This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: New platform independent problem


On Jan 20 13:08, Eli Zaretskii wrote:
> > Date: Fri, 20 Jan 2006 14:47:40 +0900
> > From: djh 
> > 
> > In December of last year, 2005, the cygwin developers deprecated d_ino 
> > out of the dirent.h defined dirent structure.  
> > 
> > This break emac's dired.c (from compiling)
> > 
> > Ref: http://www.cygwin.com/ml/cygwin/2005-12/msg00205.html
> 
> Without knowing the full details, I'd risk saying that this was not
> the best decision.  Is there really no way of making d_ino be
> consistent with what `stat' returns about the same directory?

The problem is that the Windows functions for reading directory content
don't return the inode number(*), so we ended up using a namehash for
the d_ino member.  Otherwise, to get the inode number for the files'
directory entry, we would have to open each file to get a handle, then
call GetFileInformationByHandle, and then have to close the handle
again.  This would make the readdir function *very* slow.

The other alternative would be to use always a namehash, also in the
st_ino case.  The problem with this approach is that hardlinks to the
same file would have different inode numbers, which then confuse tar or
cpio.

> In any case, I think removing the member is a solution that is much
> worse than the problem: many programs refer to d_ino, but don't
> require too much from its contents.  These programs will now fail to
> compile.  I don't think that the goal of educating the maintainers of
> Bash and Find (a worthy goal in itself) justifies breaking the other
> packages.
> 
> If making d_ino consistent with st_ino is impossible, a better way of
> dealing with problems in Bash and Find is to make changes in those
> packages' sources that are specific to Cygwin.

I'm also having a problem right now building rcp and scp due to the
missing d_ino.  OTOH, the d_ino member is not required by POSIX, but
only in X/Open compliant OSes, see

  http://www.opengroup.org/onlinepubs/009695399/basedefs/dirent.h.html
  http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap02.html#tag_02_01_04

So, portable applications shouldn't rely on d_ino.

Whether we should revert to using d_ino or not, I'm not sure.  From a
Windows perspective, it's a step in the right direction.  From an
application portability perspective, it should be ok to do it.  From a
Linux compatibility perspective, which we claim, it might be somewhat
hazardous to drop d_ino, though.


Corinna

(*) Beginning with Windows XP, two such functions exist now, but they
    won't help for older OSes, obviously.

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader          cygwin AT cygwin DOT com
Red Hat

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]