win32 inode fix

Started by Claudio Natoliover 22 years ago8 messagespatches
Jump to latest
#1Claudio Natoli
claudio.natoli@memetrics.com

For community review and application to HEAD; minor patch.

Under Win32, stat() returns an st_ino field, but it has no meaning (on
Win2K, and possibly all Win32 variants, it is always 0). This causes a
number of problems in the dfmgr.c logic, which basically all revolve around
the fact that *any* two files will appear to have the same inode.

Note also that this solves the current issues related to initdb under Win32.

--- 
Certain disclaimers and policies apply to all email sent from Memetrics.
For the full text of these disclaimers and policies see 
<a
href="http://www.memetrics.com/emailpolicy.html">http://www.memetrics.com/em
ailpolicy.html</a>

Attachments:

diff9c-inode.outapplication/octet-stream; name=diff9c-inode.outDownload+9-0
#2Neil Conway
neilc@samurai.com
In reply to: Claudio Natoli (#1)
Re: win32 inode fix

Claudio Natoli <claudio.natoli@memetrics.com> writes:

Under Win32, stat() returns an st_ino field, but it has no meaning (on
Win2K, and possibly all Win32 variants, it is always 0).

MSDN says:

Number of the information node (the inode) for the file
(UNIX-specific). On UNIX file systems, the inode describes the
file date and time stamps, permissions, and content. When files
are hard-linked to one another, they share the same inode. The
inode, and therefore st_ino, has no meaning in the FAT, HPFS, or
NTFS file systems.

I wonder if this might return non-zero for some relatively rare Win32
filesystems (say, an NFS share mounted via MS Services For
Unix). Perhaps it might be cleaner to consider a zero inode "unknown",
and therefore not equal to anything else?

-Neil (who knows next to nothing about Win32, so take that with a
grain of salt)

#3Magnus Hagander
magnus@hagander.net
In reply to: Neil Conway (#2)
Re: win32 inode fix

Claudio Natoli <claudio.natoli@memetrics.com> writes:

Under Win32, stat() returns an st_ino field, but it has no

meaning (on

Win2K, and possibly all Win32 variants, it is always 0).

MSDN says:

Number of the information node (the inode) for the file
(UNIX-specific). On UNIX file systems, the inode describes the
file date and time stamps, permissions, and content. When files
are hard-linked to one another, they share the same inode. The
inode, and therefore st_ino, has no meaning in the FAT, HPFS, or
NTFS file systems.

I wonder if this might return non-zero for some relatively
rare Win32 filesystems (say, an NFS share mounted via MS
Services For Unix). Perhaps it might be cleaner to consider a
zero inode "unknown", and therefore not equal to anything else?

It still returns 0 on a NFS share mounted with SFU (just tested). My bet
is that it will always return 0.

Might still be cleaner to change the code to make "zero equals unknown".
Is there a risk of another filesystem om some platform that won't return
inode?

//mha

#4Bruce Momjian
bruce@momjian.us
In reply to: Magnus Hagander (#3)
Re: win32 inode fix

Magnus Hagander wrote:

Claudio Natoli <claudio.natoli@memetrics.com> writes:

Under Win32, stat() returns an st_ino field, but it has no

meaning (on

Win2K, and possibly all Win32 variants, it is always 0).

MSDN says:

Number of the information node (the inode) for the file
(UNIX-specific). On UNIX file systems, the inode describes the
file date and time stamps, permissions, and content. When files
are hard-linked to one another, they share the same inode. The
inode, and therefore st_ino, has no meaning in the FAT, HPFS, or
NTFS file systems.

I wonder if this might return non-zero for some relatively
rare Win32 filesystems (say, an NFS share mounted via MS
Services For Unix). Perhaps it might be cleaner to consider a
zero inode "unknown", and therefore not equal to anything else?

It still returns 0 on a NFS share mounted with SFU (just tested). My bet
is that it will always return 0.

Might still be cleaner to change the code to make "zero equals unknown".
Is there a risk of another filesystem om some platform that won't return
inode?

In reading the patch, it seems he is only doing "zero equals unknown" on
Win32, so I think we are fine. We should continue using the inode on
Unix platforms.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
#5Neil Conway
neilc@samurai.com
In reply to: Bruce Momjian (#4)
Re: win32 inode fix

Bruce Momjian <pgman@candle.pha.pa.us> writes:

In reading the patch, it seems he is only doing "zero equals
unknown" on Win32, so I think we are fine.

That's what I was trying to avoid: where possible, we shouldn't
introduce platform-dependent #ifdefs IMHO.

-Neil

#6Bruce Momjian
bruce@momjian.us
In reply to: Neil Conway (#5)
Re: win32 inode fix

Neil Conway wrote:

Bruce Momjian <pgman@candle.pha.pa.us> writes:

In reading the patch, it seems he is only doing "zero equals
unknown" on Win32, so I think we are fine.

That's what I was trying to avoid: where possible, we shouldn't
introduce platform-dependent #ifdefs IMHO.

But the platform doesn't give us what we want so I don't see why we
should weaken other platforms just for consistency.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
#7Andrew Dunstan
andrew@dunslane.net
In reply to: Bruce Momjian (#6)
Re: win32 inode fix

Bruce Momjian wrote:

Neil Conway wrote:

Bruce Momjian <pgman@candle.pha.pa.us> writes:

In reading the patch, it seems he is only doing "zero equals
unknown" on Win32, so I think we are fine.

That's what I was trying to avoid: where possible, we shouldn't
introduce platform-dependent #ifdefs IMHO.

But the platform doesn't give us what we want so I don't see why we
should weaken other platforms just for consistency.

Surely the operative words are "where possible". Looks like this is one
case where it is not reasonably possible. I don't think we will ever be
totally rid of them. I tried quite hard to keep them to a minimum in
initdb, but eliminating them was not really an option.

cheers

andrew

#8Bruce Momjian
bruce@momjian.us
In reply to: Claudio Natoli (#1)
Re: win32 inode fix

Patch applied. Thanks.

---------------------------------------------------------------------------

Claudio Natoli wrote:

For community review and application to HEAD; minor patch.

Under Win32, stat() returns an st_ino field, but it has no meaning (on
Win2K, and possibly all Win32 variants, it is always 0). This causes a
number of problems in the dfmgr.c logic, which basically all revolve around
the fact that *any* two files will appear to have the same inode.

Note also that this solves the current issues related to initdb under Win32.

--- 
Certain disclaimers and policies apply to all email sent from Memetrics.
For the full text of these disclaimers and policies see 
<a
href="http://www.memetrics.com/emailpolicy.html">http://www.memetrics.com/em
ailpolicy.html</a>

[ Attachment, skipping... ]

---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo@postgresql.org so that your
message can get through to the mailing list cleanly

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073