Use of access(X_OK) check in pg_upgrade

Started by Bruce Momjianalmost 15 years ago5 messageshackers
Jump to latest
#1Bruce Momjian
bruce@momjian.us

I broke the Win32 build members by using access(X_OK) in pg_upgrade. I
have a fix for this but looking at pg_upgrade's exec.c, I see for
Win32:

if ((buf.st_mode & S_IXUSR) == 0)

I am confused why Windows supports S_IXUSR but not X_OK.

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ It's impossible for everything to be true. +

#2Magnus Hagander
magnus@hagander.net
In reply to: Bruce Momjian (#1)
Re: Use of access(X_OK) check in pg_upgrade

On Wed, May 18, 2011 at 11:41, Bruce Momjian <bruce@momjian.us> wrote:

I broke the Win32 build members by using access(X_OK) in pg_upgrade.  I
have a fix for this but looking at pg_upgrade's exec.c, I see for
Win32:

           if ((buf.st_mode & S_IXUSR) == 0)

I am confused why Windows supports S_IXUSR but not X_OK.

It doesn't natively - we define it in port/win32.h

--
 Magnus Hagander
 Me: http://www.hagander.net/
 Work: http://www.redpill-linpro.com/

#3Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#1)
Re: Use of access(X_OK) check in pg_upgrade

Bruce Momjian wrote:

I broke the Win32 build members by using access(X_OK) in pg_upgrade. I
have a fix for this but looking at pg_upgrade's exec.c, I see for
Win32:

if ((buf.st_mode & S_IXUSR) == 0)

I am confused why Windows supports S_IXUSR but not X_OK.

I have applied the attached patch to fix this.

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ It's impossible for everything to be true. +

Attachments:

/rtmp/pg_upgradetext/x-diffDownload+11-11
#4Bruce Momjian
bruce@momjian.us
In reply to: Magnus Hagander (#2)
Re: Use of access(X_OK) check in pg_upgrade

Magnus Hagander wrote:

On Wed, May 18, 2011 at 11:41, Bruce Momjian <bruce@momjian.us> wrote:

I broke the Win32 build members by using access(X_OK) in pg_upgrade. ?I
have a fix for this but looking at pg_upgrade's exec.c, I see for
Win32:

? ? ? ? ? ?if ((buf.st_mode & S_IXUSR) == 0)

I am confused why Windows supports S_IXUSR but not X_OK.

It doesn't natively - we define it in port/win32.h

Sure, but that is defined as _S_IEXEC:

#define S_IXUSR _S_IEXEC
#define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)

So what is _S_IEXEC. Anyway, execute permission means something
different on Win32 for directories so I have a fix applied.

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ It's impossible for everything to be true. +

#5Magnus Hagander
magnus@hagander.net
In reply to: Bruce Momjian (#4)
Re: Use of access(X_OK) check in pg_upgrade

On Wed, May 18, 2011 at 12:16, Bruce Momjian <bruce@momjian.us> wrote:

Magnus Hagander wrote:

On Wed, May 18, 2011 at 11:41, Bruce Momjian <bruce@momjian.us> wrote:

I broke the Win32 build members by using access(X_OK) in pg_upgrade. ?I
have a fix for this but looking at pg_upgrade's exec.c, I see for
Win32:

? ? ? ? ? ?if ((buf.st_mode & S_IXUSR) == 0)

I am confused why Windows supports S_IXUSR but not X_OK.

It doesn't natively - we define it in port/win32.h

Sure, but that is defined as _S_IEXEC:

       #define S_IXUSR _S_IEXEC
       #define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)

So what is _S_IEXEC.  Anyway, execute permission means something
different on Win32 for directories so I have a fix applied.

I'm pretty sure it's mapped to read permissions internally in the API headers.

--
 Magnus Hagander
 Me: http://www.hagander.net/
 Work: http://www.redpill-linpro.com/