1.1 --- a/whelk/_whelk.h Thu Feb 21 18:52:49 2019 +0000
1.2 +++ b/whelk/_whelk.h Thu Feb 21 18:53:57 2019 +0000
1.3 @@ -25,6 +25,10 @@
1.4 };
1.5 #endif
1.6
1.7 +#ifdef __WIN32__
1.8 +int whelk_win32_error(lua_State *L,DWORD err);
1.9 +#endif
1.10 +
1.11 int whelk_perror(lua_State *L,const char *s);
1.12 int whelk_get_folder_path(lua_State *L);
1.13 void whelk_open_get_folder_path(lua_State *L);
2.1 --- a/whelk/setup.c Thu Feb 21 18:52:49 2019 +0000
2.2 +++ b/whelk/setup.c Thu Feb 21 18:53:57 2019 +0000
2.3 @@ -11,31 +11,6 @@
2.4 #define SUOI_FORCEDELETE 1
2.5 #endif
2.6
2.7 -int whelk_win32_error(lua_State *L,DWORD err)
2.8 -{
2.9 - DWORD n;
2.10 - WCHAR *buf;
2.11 - char *utf8;
2.12 - lua_pushnil(L);
2.13 - buf=NULL;
2.14 - n=FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER|\
2.15 - FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,0,err,0,
2.16 - (LPWSTR)&buf,0,NULL);
2.17 - if (n)
2.18 - {
2.19 - if (n>2 && buf[n-2]=='\r' && buf[n-1]=='\n')
2.20 - n-=2;
2.21 - utf8=whelk_utf16_to_utf8(buf,n);
2.22 - LocalFree(buf);
2.23 - lua_pushstring(L,utf8);
2.24 - free(utf8);
2.25 - }
2.26 - else
2.27 - lua_pushstring(L,"Unknown error");
2.28 - lua_pushinteger(L,err);
2.29 - return 3;
2.30 -}
2.31 -
2.32 /*
2.33 * SetupCopyOEMInf(source_inf_file_name,oem_source_media_location,
2.34 * oem_source_media_type,copy_style)
3.1 --- a/whelk/spawn.c Thu Feb 21 18:52:49 2019 +0000
3.2 +++ b/whelk/spawn.c Thu Feb 21 18:53:57 2019 +0000
3.3 @@ -54,7 +54,7 @@
3.4 char *buffer;
3.5 HANDLE stdin_pipe[2],stdout_pipe[2],stderr_pipe[2],h;
3.6 struct whelk_wait wait={0};
3.7 - DWORD nb;
3.8 + DWORD nb,err;
3.9 int exitcode;
3.10 if (!whelk_child_pipe(stdin_pipe,TRUE))
3.11 {
3.12 @@ -92,14 +92,14 @@
3.13 CREATE_DEFAULT_ERROR_MODE|NORMAL_PRIORITY_CLASS,NULL,working_directory,
3.14 &si,&pi))
3.15 {
3.16 + err=GetLastError();
3.17 free(application_name);
3.18 free(command_line);
3.19 free(working_directory);
3.20 whelk_close_pipe(stdin_pipe);
3.21 whelk_close_pipe(stdout_pipe);
3.22 whelk_close_pipe(stderr_pipe);
3.23 - errno=EACCES;
3.24 - return whelk_perror(L,NULL);
3.25 + return whelk_win32_error(L,err);
3.26 }
3.27 free(application_name);
3.28 free(command_line);
4.1 --- a/whelk/whelk.c Thu Feb 21 18:52:49 2019 +0000
4.2 +++ b/whelk/whelk.c Thu Feb 21 18:53:57 2019 +0000
4.3 @@ -7,6 +7,33 @@
4.4 #include "config.h"
4.5 #include "_whelk.h"
4.6
4.7 +#ifdef __WIN32__
4.8 +int whelk_win32_error(lua_State *L,DWORD err)
4.9 +{
4.10 + DWORD n;
4.11 + WCHAR *buf;
4.12 + char *utf8;
4.13 + lua_pushnil(L);
4.14 + buf=NULL;
4.15 + n=FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER|\
4.16 + FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,0,err,0,
4.17 + (LPWSTR)&buf,0,NULL);
4.18 + if (n)
4.19 + {
4.20 + if (n>2 && buf[n-2]=='\r' && buf[n-1]=='\n')
4.21 + n-=2;
4.22 + utf8=whelk_utf16_to_utf8(buf,n);
4.23 + LocalFree(buf);
4.24 + lua_pushstring(L,utf8);
4.25 + free(utf8);
4.26 + }
4.27 + else
4.28 + lua_pushstring(L,"Unknown error");
4.29 + lua_pushinteger(L,err);
4.30 + return 3;
4.31 +}
4.32 +#endif
4.33 +
4.34 int whelk_perror(lua_State *L,const char *s)
4.35 {
4.36 lua_pushnil(L);