On Mon, Jan 22, 2007 at 10:35:11PM -0500, Bruce Momjian wrote: > Takayuki Tsunakawa wrote: > > From: "Bruce Momjian" <[EMAIL PROTECTED]> > > > OK, I have tested on MinGW and found I can use FormatMessage() to > > print > > > a description for all ERROR* system() failures, rather than print a > > hex > > > value. This removes the need for a URL or lookup of hex values. > > > Attached and applied. > > > > Excuse me if I'm misunderstanding, but I'm afraid you are mixing up > > Win32 error codes and exception codes. I saw the following fragment > > in your patch: > > > > ! * 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. > > > > Exception codes and error codes are different and not related. In the > > above test, 0xC0000005 is an "exception code". On the other hand, what > > FormatMessage() accepts is an error code. Error codes can't derived > > from exception codes. Stripping off 0xC bit from an exception code > > does not convert it to an error code. > > I suspect the reason why you misunderstood is that the descriptions > > are similar: > > the description for exception 0xC0000005 (STATUS_ACCESS_VIOLATION) is > > "access violation" (though the text can't be obtained). This is > > caused by an illegal memory access. This is a program bug. > > The description for 0x5 (ERROR_ACCESS_DENIED) is "Access is denied." > > This is caused by permission checks. This is not a bug, and can > > happen normally. > > > > Try "1.0 / 0.0" (devide by zero) instead of (*NULL). What would your > > patch display? The exception would be 0xC000008E > > (STATUS_FLOAT_DIVIDE_BY_ZERO), I think. 0x8E is ERROR_BUSY_DRIVE. > > Yes, you are 100% correct that I had exceptions and errors confused. I > have backed out the patch that used FormatMessage(), and instead of > using a URL, the message is now: > > child process was terminated by exception %X > See /include/ntstatus.h for a description of the hex value. > > When I search for /include/ntstatus.h, I get the Wine page first, so > hopefully we can mark this item as completed.
Are you entirely sure that ntstatus.h is where to look? Because per whatever docs I've found, that contains "device driver errors" and *not* exception codes. If it really is, then using FormatMessage is correct - because it's not an exception value, it'sa DDK error value. AFAIK, that's not the same as an exception. (Though you have to add the search of ntdll.dll, of course) //Magnus ---------------------------(end of broadcast)--------------------------- TIP 9: In versions below 8.0, the planner will ignore your desire to choose an index scan if your joining column's datatypes do not match