summaryrefslogtreecommitdiff
path: root/src/include/port/win32.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/port/win32.h')
-rw-r--r--src/include/port/win32.h42
1 files changed, 32 insertions, 10 deletions
diff --git a/src/include/port/win32.h b/src/include/port/win32.h
index 22d71272d1..dc2219be16 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.65 2007/01/11 02:42:31 momjian Exp $ */
+/* $PostgreSQL: pgsql/src/include/port/win32.h,v 1.66 2007/01/22 18:31:51 momjian Exp $ */
#if defined(_MSC_VER) || defined(__BORLANDC__)
#define WIN32_ONLY_COMPILER
@@ -115,16 +115,38 @@ int semop(int semId, struct sembuf * sops, int flag);
/*
* Signal stuff
- * WIN32 doesn't have wait(), so the return value for children
- * is simply the return value specified by the child, without
- * any additional information on whether the child terminated
- * on its own or via a signal. These macros are also used
- * to interpret the return value of system().
+ *
+ * For WIN32, there is no wait() call so there are no wait() macros
+ * to interpret the return value of system(). Instead, system()
+ * return values < 0x100 are used for exit() termination, and higher
+ * values are used to indicated non-exit() termination, which is
+ * similar to a unix-style signal exit (think SIGSEGV ==
+ * STATUS_ACCESS_VIOLATION). Return values are broken up into groups:
+ *
+ * http://msdn2.microsoft.com/en-gb/library/aa489609.aspx
+ *
+ * NT_SUCCESS 0 - 0x3FFFFFFF
+ * NT_INFORMATION 0x40000000 - 0x7FFFFFFF
+ * NT_WARNING 0x80000000 - 0xBFFFFFFF
+ * NT_ERROR 0xC0000000 - 0xFFFFFFFF
+ *
+ * Effectively, we don't care on the severity of the return value from
+ * system(), we just need to know if it was because of exit() or generated
+ * by the system, and it seems values >= 0x100 are system-generated.
+ * See this URL for a list of WIN32 STATUS_* values:
+ *
+ * Wine (URL used in our error messages) -
+ * http://source.winehq.org/source/include/ntstatus.h
+ * Descriptions - http://www.comp.nus.edu.sg/~wuyongzh/my_doc/ntstatus.txt
+ * MS SDK - http://www.nologs.com/ntstatus.html
+ *
+ * Some day we might want to print descriptions for the most common
+ * exceptions, rather than printing a URL.
*/
-#define WEXITSTATUS(w) (w)
-#define WIFEXITED(w) (true)
-#define WIFSIGNALED(w) (false)
-#define WTERMSIG(w) (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) )