@ -18,7 +18,7 @@ static int build_cmd(char *cmd, size_t len, const char *const argv[]) {
}
}
enum process_result cmd_execute ( const char * path , const char * const argv [ ] , HANDLE * handle ) {
enum process_result cmd_execute ( const char * path , const char * const argv [ ] , HANDLE * handle ) {
STARTUPINFO si ;
STARTUPINFO W si ;
PROCESS_INFORMATION pi ;
PROCESS_INFORMATION pi ;
memset ( & si , 0 , sizeof ( si ) ) ;
memset ( & si , 0 , sizeof ( si ) ) ;
si . cb = sizeof ( si ) ;
si . cb = sizeof ( si ) ;
@ -29,12 +29,19 @@ enum process_result cmd_execute(const char *path, const char *const argv[], HAND
return PROCESS_ERROR_GENERIC ;
return PROCESS_ERROR_GENERIC ;
}
}
wchar_t * wide = utf8_to_wide_char ( cmd ) ;
if ( ! wide ) {
LOGC ( " Cannot allocate wide char string " ) ;
return PROCESS_ERROR_GENERIC ;
}
# ifdef WINDOWS_NOCONSOLE
# ifdef WINDOWS_NOCONSOLE
int flags = CREATE_NO_WINDOW ;
int flags = CREATE_NO_WINDOW ;
# else
# else
int flags = 0 ;
int flags = 0 ;
# endif
# endif
if ( ! CreateProcess ( NULL , cmd , NULL , NULL , FALSE , flags , NULL , NULL , & si , & pi ) ) {
if ( ! CreateProcessW ( NULL , wide , NULL , NULL , FALSE , flags , NULL , NULL , & si , & pi ) ) {
free ( wide ) ;
* handle = NULL ;
* handle = NULL ;
if ( GetLastError ( ) = = ERROR_FILE_NOT_FOUND ) {
if ( GetLastError ( ) = = ERROR_FILE_NOT_FOUND ) {
return PROCESS_ERROR_MISSING_BINARY ;
return PROCESS_ERROR_MISSING_BINARY ;
@ -42,6 +49,7 @@ enum process_result cmd_execute(const char *path, const char *const argv[], HAND
return PROCESS_ERROR_GENERIC ;
return PROCESS_ERROR_GENERIC ;
}
}
free ( wide ) ;
* handle = pi . hProcess ;
* handle = pi . hProcess ;
return PROCESS_SUCCESS ;
return PROCESS_SUCCESS ;
}
}