]> granicus.if.org Git - postgresql/commitdiff
Back out use of FormatMessage(), does error values, not exception
authorBruce Momjian <bruce@momjian.us>
Tue, 23 Jan 2007 03:28:49 +0000 (03:28 +0000)
committerBruce Momjian <bruce@momjian.us>
Tue, 23 Jan 2007 03:28:49 +0000 (03:28 +0000)
values.  Point to /include/ntstatus.h for an exception list, rather than
a URL.

src/backend/postmaster/postmaster.c
src/include/port/win32.h
src/port/exec.c

index 7e18251a583fb0cae711f183e21cf998e200bf14..a321f3d1f37c74c3d728237f6b43f8e5aa1554c9 100644 (file)
@@ -37,7 +37,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.511 2007/01/23 01:45:11 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.512 2007/01/23 03:28:49 momjian Exp $
  *
  * NOTES
  *
@@ -2430,30 +2430,14 @@ LogChildExit(int lev, const char *procname, int pid, int exitstatus)
                                (errmsg("%s (PID %d) was terminated by signal %d",
                                                procname, pid, WTERMSIG(exitstatus))));
 #else
-       {
-               static char last_system_error[512];
-
-               if (WERRORCODE(exitstatus) == 0 ||
-                       FormatMessage(FORMAT_MESSAGE_IGNORE_INSERTS |
-                                                 FORMAT_MESSAGE_FROM_SYSTEM,
-                                                 NULL,
-                                                 WERRORCODE(exitstatus),
-                                                 MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT),
-                                                 last_system_error,
-                                                 sizeof(last_system_error) - 1,
-                                                 NULL) == 0)
-                       snprintf(last_system_error, sizeof(last_system_error) - 1,
-                                        "Unknown error %X.", WEXITSTATUS(exitstatus));
-
                ereport(lev,
-       
+
                /*------
                  translator: %s is a noun phrase describing a child process, such as
                  "server process" */
-                               (errmsg("%s (PID %d) was terminated by the operating system",
-                                               procname, pid),
-                                errdetail("%s", last_system_error)));
-       }
+                               (errmsg("%s (PID %d) was terminated by exception %X",
+                                               procname, pid, WTERMSIG(exitstatus)),
+                                errhint("See /include/ntstatus.h for a description of the hex value.")));
 #endif
        else
                ereport(lev,
index ef515fd48b333420bda43ecaa756eae076a0bd8d..75583d905acaac41aed9478b1e5dd21c294fac50 100644 (file)
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/include/port/win32.h,v 1.68 2007/01/23 01:45:11 momjian Exp $ */
+/* $PostgreSQL: pgsql/src/include/port/win32.h,v 1.69 2007/01/23 03:28:49 momjian Exp $ */
 
 #if defined(_MSC_VER) || defined(__BORLANDC__)
 #define WIN32_ONLY_COMPILER
@@ -140,26 +140,14 @@ int                       semop(int semId, struct sembuf * sops, int flag);
  *             Descriptions - http://www.comp.nus.edu.sg/~wuyongzh/my_doc/ntstatus.txt
  *             MS SDK - http://www.nologs.com/ntstatus.html
  *
- *     Because FormatMessage only handles NT_ERROR strings, and assumes they
- *     do not have the 0xC prefix, we strip it to match this list:
- *             http://msdn2.microsoft.com/en-us/library/ms681381.aspx
- *
- *     When using FormatMessage():
- *
- *     On MinGW, system() returns STATUS_* values.  MSVC might be
- *     different.  To test, create a binary that does *(NULL), and
- *     then create a second binary that calls it via system(),
- *     and check the return value of system().  On MinGW, it is
- *     0xC0000005 == STATUS_ACCESS_VIOLATION, and 0x5 is a value
- *     FormatMessage() can look up.  GetLastError() does not work;
- *     always zero.
+ *     Some day we might want to print descriptions for the most common
+ *     exceptions, rather than printing a URL.  FormatMessage() can print
+ *     the text of error values, but not exception values.
  */
-#define STATUS_ERROR_MASK      0xC0000000
-#define WIFEXITED(w)           (((w) & 0XFFFFFF00) == 0)
-#define WIFSIGNALED(w)         (!WIFEXITED(w))
-#define WEXITSTATUS(w)         (w)
-#define WERRORCODE(w)          ((((w) & STATUS_ERROR_MASK) == STATUS_ERROR_MASK) ? \
-                                                       ((w) & ~STATUS_ERROR_MASK) : 0)
+#define WIFEXITED(w)    (((w) & 0XFFFFFF00) == 0)
+#define WIFSIGNALED(w)  (!WIFEXITED(w))
+#define WEXITSTATUS(w)  (w)
+#define WTERMSIG(w)     (w)
 
 #define sigmask(sig) ( 1 << ((sig)-1) )
 
index 0ed4b59014bb732301a917fd47aed981b7f3d8fd..28be9d7878646aaf4728e3b0e563131efd4195b1 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/port/exec.c,v 1.46 2007/01/23 01:45:11 momjian Exp $
+ *       $PostgreSQL: pgsql/src/port/exec.c,v 1.47 2007/01/23 03:28:49 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -586,24 +586,8 @@ pclose_check(FILE *stream)
                log_error(_("child process was terminated by signal %d"),
                                  WTERMSIG(exitstatus));
 #else
-       {
-               static char last_system_error[512];
-
-               if (WERRORCODE(exitstatus) == 0 ||
-                       FormatMessage(FORMAT_MESSAGE_IGNORE_INSERTS |
-                                                 FORMAT_MESSAGE_FROM_SYSTEM,
-                                                 NULL,
-                                                 WERRORCODE(exitstatus),
-                                                 MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT),
-                                                 last_system_error,
-                                                 sizeof(last_system_error) - 1,
-                                                 NULL) == 0)
-                       snprintf(last_system_error, sizeof(last_system_error) - 1,
-                                        "Unknown error %X.", WEXITSTATUS(exitstatus));
-
-               log_error(_("child process was terminated by the operating system\n%s"),
-                                 last_system_error);
-       }
+               log_error(_("child process was terminated by exception %X\nSee /include/ntstatus.h for a description\nof the hex value."),
+                                 WTERMSIG(exitstatus));
 #endif
        else
                log_error(_("child process exited with unrecognized status %d"),