X-Spam-Check-By: sourceware.org Message-ID: <43D0ECA5.3030506@byu.net> Date: Fri, 20 Jan 2006 06:59:01 -0700 From: Eric Blake User-Agent: Mozilla Thunderbird 1.0.2 (Windows/20050317) MIME-Version: 1.0 To: cygwin AT cygwin DOT com, emacs-devel AT gnu DOT org, Eli Zaretskii Subject: Re: New platform independent problem References: <43D0797C DOT 1030604 AT it DOT to-be DOT co DOT jp> <20060120122559 DOT GZ8318 AT calimero DOT vinschen DOT de> In-Reply-To: <20060120122559.GZ8318@calimero.vinschen.de> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-IsSubscribed: yes Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 According to Corinna Vinschen on 1/20/2006 5:25 AM: > > 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. Is there a compromise here? Many applications that look at d_ino also check whether the d_ino member is 0, in which case they fall back on st_ino. For example, coreutils's pwd.c contains: #define NOT_AN_INODE_NUMBER 0 #ifdef D_INO_IN_DIRENT # define D_INO(dp)((dp)->d_ino) #else /* Some systems don't have inodes, so fake them to avoid lots of ifdefs. */ # define D_INO(dp) NOT_AN_INODE_NUMBER #endif Then later on, it can blindly do: ino_t ino = D_INO(dp); if (ino == NOT_AN_INODE_NUMBER) { if (lstat (dp->d_name, &ent_sb) < 0) continue; /* Skip any entry we can't stat. */ ino = ent_sb.st_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. This would allow cygwin to provide the d_ino member (but probably in a new offset, rather than renaming __deprecated_d_ino back to d_ino, to avoid breaking backwards compatibility with old cygwin apps that have come to rely on the field at offset __deprecated_d_ino being a hash rather than an inode value). Cygwin would then set it to 0 on WinNT and 2k (where it is prohibitively expensive to determine a real value), set it to the hash on Win9x and ME (since st_ino is also the hash on those platforms), and set it to the actual st_ino value on WinXP and beyond (since the API exists). It would just be a matter of educating apps that use d_ino that when d_ino==0, fall back on st_ino instead. And based on the code in coreutils, this is probably already the case for code that strives to be portable, since it appears there are already existing Unix machines that return d_ino == 0 when a real value is not available. - -- Life is short - so eat dessert first! Eric Blake ebb9 AT byu DOT net -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.1 (Cygwin) Comment: Public key at home.comcast.net/~ericblake/eblake.gpg Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org iD8DBQFD0Oyk84KuGfSFAYARArXgAJ0aQu09wfK4ab0R+upRH7kLq6FlTACgluSD Y8hqZD9P15tdhF6v2Rv2sXY= =+rha -----END PGP SIGNATURE----- -- 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/