From 882b9948d706af983e101166ec73bb54a7782957 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Tue, 23 Jan 2007 03:28:49 +0000 Subject: [PATCH] Back out use of FormatMessage(), does error values, not exception values. Point to /include/ntstatus.h for an exception list, rather than a URL. --- src/backend/postmaster/postmaster.c | 26 +++++--------------------- src/include/port/win32.h | 28 ++++++++-------------------- src/port/exec.c | 22 +++------------------- 3 files changed, 16 insertions(+), 60 deletions(-) diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 7e18251a58..a321f3d1f3 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -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, diff --git a/src/include/port/win32.h b/src/include/port/win32.h index ef515fd48b..75583d905a 100644 --- a/src/include/port/win32.h +++ b/src/include/port/win32.h @@ -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) ) diff --git a/src/port/exec.c b/src/port/exec.c index 0ed4b59014..28be9d7878 100644 --- a/src/port/exec.c +++ b/src/port/exec.c @@ -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"), -- 2.40.0