# HG changeset patch # User J. Ali Harlow # Date 1550775237 0 # Node ID 285b05022b5abb599b6d99858123dfd1c671e3e6 # Parent 07699c96ba7bc6c1adceeeec9352f3c188a14f7d Better error messages for spawn diff -r 07699c96ba7b -r 285b05022b5a whelk/_whelk.h --- a/whelk/_whelk.h Thu Feb 21 18:52:49 2019 +0000 +++ b/whelk/_whelk.h Thu Feb 21 18:53:57 2019 +0000 @@ -25,6 +25,10 @@ }; #endif +#ifdef __WIN32__ +int whelk_win32_error(lua_State *L,DWORD err); +#endif + int whelk_perror(lua_State *L,const char *s); int whelk_get_folder_path(lua_State *L); void whelk_open_get_folder_path(lua_State *L); diff -r 07699c96ba7b -r 285b05022b5a whelk/setup.c --- a/whelk/setup.c Thu Feb 21 18:52:49 2019 +0000 +++ b/whelk/setup.c Thu Feb 21 18:53:57 2019 +0000 @@ -11,31 +11,6 @@ #define SUOI_FORCEDELETE 1 #endif -int whelk_win32_error(lua_State *L,DWORD err) -{ - DWORD n; - WCHAR *buf; - char *utf8; - lua_pushnil(L); - buf=NULL; - n=FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER|\ - FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,0,err,0, - (LPWSTR)&buf,0,NULL); - if (n) - { - if (n>2 && buf[n-2]=='\r' && buf[n-1]=='\n') - n-=2; - utf8=whelk_utf16_to_utf8(buf,n); - LocalFree(buf); - lua_pushstring(L,utf8); - free(utf8); - } - else - lua_pushstring(L,"Unknown error"); - lua_pushinteger(L,err); - return 3; -} - /* * SetupCopyOEMInf(source_inf_file_name,oem_source_media_location, * oem_source_media_type,copy_style) diff -r 07699c96ba7b -r 285b05022b5a whelk/spawn.c --- a/whelk/spawn.c Thu Feb 21 18:52:49 2019 +0000 +++ b/whelk/spawn.c Thu Feb 21 18:53:57 2019 +0000 @@ -54,7 +54,7 @@ char *buffer; HANDLE stdin_pipe[2],stdout_pipe[2],stderr_pipe[2],h; struct whelk_wait wait={0}; - DWORD nb; + DWORD nb,err; int exitcode; if (!whelk_child_pipe(stdin_pipe,TRUE)) { @@ -92,14 +92,14 @@ CREATE_DEFAULT_ERROR_MODE|NORMAL_PRIORITY_CLASS,NULL,working_directory, &si,&pi)) { + err=GetLastError(); free(application_name); free(command_line); free(working_directory); whelk_close_pipe(stdin_pipe); whelk_close_pipe(stdout_pipe); whelk_close_pipe(stderr_pipe); - errno=EACCES; - return whelk_perror(L,NULL); + return whelk_win32_error(L,err); } free(application_name); free(command_line); diff -r 07699c96ba7b -r 285b05022b5a whelk/whelk.c --- a/whelk/whelk.c Thu Feb 21 18:52:49 2019 +0000 +++ b/whelk/whelk.c Thu Feb 21 18:53:57 2019 +0000 @@ -7,6 +7,33 @@ #include "config.h" #include "_whelk.h" +#ifdef __WIN32__ +int whelk_win32_error(lua_State *L,DWORD err) +{ + DWORD n; + WCHAR *buf; + char *utf8; + lua_pushnil(L); + buf=NULL; + n=FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER|\ + FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,0,err,0, + (LPWSTR)&buf,0,NULL); + if (n) + { + if (n>2 && buf[n-2]=='\r' && buf[n-1]=='\n') + n-=2; + utf8=whelk_utf16_to_utf8(buf,n); + LocalFree(buf); + lua_pushstring(L,utf8); + free(utf8); + } + else + lua_pushstring(L,"Unknown error"); + lua_pushinteger(L,err); + return 3; +} +#endif + int whelk_perror(lua_State *L,const char *s) { lua_pushnil(L);