Commit 29cced94 authored by Sergey Glukhov's avatar Sergey Glukhov
Browse files

Bug#34825 perror on windows doesn't know about win32 error codes

extended perror to enable printing of Win32 system errors
parent c3f07acf
Loading
Loading
Loading
Loading
+38 −2
Original line number Diff line number Diff line
@@ -185,11 +185,36 @@ static const char *get_ha_error_msg(int code)
}


#if defined(__WIN__)
static my_bool print_win_error_msg(DWORD error, my_bool verbose)
{
  LPTSTR s;
  if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
                    FORMAT_MESSAGE_FROM_SYSTEM,
                    NULL, error, 0, (LPTSTR)&s, 0,
                    NULL))
  {
    if (verbose)
      printf("Win32 error code %d: %s", error, s);
    else
      puts(s);
    LocalFree(s);
    return 0;
  }
  return 1;
}
#endif



int main(int argc,char *argv[])
{
  int error,code,found;
  const char *msg;
  char *unknown_error = 0;
#if defined(__WIN__)
  my_bool skip_win_message= 0;
#endif
  MY_INIT(argv[0]);

  if (get_options(&argc,&argv))
@@ -286,8 +311,15 @@ int main(int argc,char *argv[])
        /* Error message still not found, look in handler error codes */
        if (!(msg=get_ha_error_msg(code)))
        {
#if defined(__WIN__)
          if (!(skip_win_message= !print_win_error_msg((DWORD)code, verbose)))
          {
#endif
            fprintf(stderr,"Illegal error code: %d\n",code);
            error=1;
#if defined(__WIN__)
          }
#endif
        }
        else
        {
@@ -298,6 +330,10 @@ int main(int argc,char *argv[])
            puts(msg);
        }
      }
#if defined(__WIN__)
      if (!skip_win_message)
        print_win_error_msg((DWORD)code, verbose);
#endif
    }
  }

+5 −0
Original line number Diff line number Diff line
MySQL error code 150: Foreign key constraint is incorrectly formed
Win32 error code 150: System trace information was not specified in your CONFIG.SYS file, or tracing is disallowed.
OS error code  23:  Too many open files in system
Win32 error code 23: Data error (cyclic redundancy check).
Win32 error code 15000: The specified channel path is invalid.
+11 −0
Original line number Diff line number Diff line
# Windows-specific tests
--source include/windows.inc
--require r/have_perror.require
disable_query_log;
eval select LENGTH("$MY_PERROR") > 0 as "have_perror";
enable_query_log;


--exec $MY_PERROR 150
--exec $MY_PERROR 23
--exec $MY_PERROR 15000