Better error messages for spawn default tip
authorJ. Ali Harlow <ali@juiblex.co.uk>
Thu Feb 21 18:53:57 2019 +0000 (2019-02-21)
changeset 21285b05022b5a
parent 20 07699c96ba7b
Better error messages for spawn
whelk/_whelk.h
whelk/setup.c
whelk/spawn.c
whelk/whelk.c
     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);