Skip site navigation (1) Skip section navigation (2)

Re: [HACKERS] Win32 WEXITSTATUS too

From: "Takayuki Tsunakawa" <tsunakawa(dot)takay(at)jp(dot)fujitsu(dot)com>
To: "Bruce Momjian" <bruce(at)momjian(dot)us>, "PostgreSQL-patches" <pgsql-patches(at)postgresql(dot)org>
Cc: "Tom Lane" <tgl(at)sss(dot)pgh(dot)pa(dot)us>, "Alvaro Herrera" <alvherre(at)commandprompt(dot)com>, "Magnus Hagander" <magnus(at)hagander(dot)net>, "ITAGAKI Takahiro" <itagaki(dot)takahiro(at)oss(dot)ntt(dot)co(dot)jp>
Subject: Re: [HACKERS] Win32 WEXITSTATUS too
Date: 2007-01-23 02:55:57
Message-ID: 023b01c73e9a$01e885d0$19527c0a@OPERAO (view raw or flat)
Thread:
Lists: pgsql-hackerspgsql-patches
From: "Bruce Momjian" <bruce(at)momjian(dot)us>
> 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.





In response to

Responses

pgsql-hackers by date

Next:From: Bruce MomjianDate: 2007-01-23 03:35:11
Subject: Re: [HACKERS] Win32 WEXITSTATUS too
Previous:From: Stephen FrostDate: 2007-01-23 02:45:02
Subject: Default permissisons from schemas

pgsql-patches by date

Next:From: Bruce MomjianDate: 2007-01-23 03:35:11
Subject: Re: [HACKERS] Win32 WEXITSTATUS too
Previous:From: Takayuki TsunakawaDate: 2007-01-23 01:58:17
Subject: Re: [HACKERS] Win32 WEXITSTATUS too

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group