MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:Sergey Glukhov Date:November 20 2008 3:03pm
Subject:bzr commit into mysql-5.0-bugteam branch (Sergey.Glukhov:2720)
Bug#34825
View as plain text  
#At file:///home/gluh/MySQL/mysql-5.0-bug-34825/ based on revid:ramil@stripped

 2720 Sergey Glukhov	2008-11-20
      Bug#34825 perror on windows doesn't know about win32 error codes
      extended perror to enable printing of Win32 system errors
added:
  mysql-test/r/perror-win.result
  mysql-test/t/perror-win.test
modified:
  extra/perror.c

per-file messages:
  extra/perror.c
    extended perror to enable printing of Win32 system errors
  mysql-test/r/perror-win.result
    test result
  mysql-test/t/perror-win.test
    test case
=== modified file 'extra/perror.c'
--- a/extra/perror.c	2007-03-28 17:46:42 +0000
+++ b/extra/perror.c	2008-11-20 15:02:10 +0000
@@ -185,11 +185,35 @@ static const char *get_ha_error_msg(int 
 }
 
 
+#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);
+    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 +310,15 @@ int main(int argc,char *argv[])
         /* Error message still not found, look in handler error codes */
         if (!(msg=get_ha_error_msg(code)))
         {
-	  fprintf(stderr,"Illegal error code: %d\n",code);
-	  error=1;
+#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 +329,10 @@ int main(int argc,char *argv[])
             puts(msg);
         }
       }
+#if defined(__WIN__)
+      if (!skip_win_message)
+        print_win_error_msg((DWORD)code, verbose);
+#endif
     }
   }
 

=== added file 'mysql-test/r/perror-win.result'
--- a/mysql-test/r/perror-win.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/r/perror-win.result	2008-11-20 15:02:10 +0000
@@ -0,0 +1,5 @@
+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.

=== added file 'mysql-test/t/perror-win.test'
--- a/mysql-test/t/perror-win.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/t/perror-win.test	2008-11-20 15:02:10 +0000
@@ -0,0 +1,11 @@
+# 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

Thread
bzr commit into mysql-5.0-bugteam branch (Sergey.Glukhov:2720)Bug#34825Sergey Glukhov20 Nov