bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: mingw and same-inode


From: Eric Blake
Subject: Re: mingw and same-inode
Date: Thu, 24 Sep 2009 05:52:24 -0600
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.23) Gecko/20090812 Thunderbird/2.0.0.23 Mnenhy/0.7.6.666

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

According to Jim Meyering on 9/24/2009 12:29 AM:
>> I'm also preparing a followup patch for coreutils usage of SAME_INODE.
>> Thoughts before I apply this?
> 
> You have pushed these changes already.
> Imagine my surprise upon seeing unreviewed and unapproved API changes...
> 
> Accidentally, no doubt, since I would expect you to wait at least
> for an "ok" from me before making API-changing changes to such
> fundamental modules.

Indeed; they were queued prior to my linkat changes.  I've now pushed a
reversion commit; linkat now fails on mingw, but will be fixed again once
we decide the proper fix for same-inode.

> 
> I haven't reviewed everything yet, but this error
> jumped out at me:
> 
> bool
> same_name (const char *source, const char *dest)
> {
>   ...
>   bool same = false;
>   ...
>       same = SAME_INODE (source_dir_stats, dest_dir_stats);
>       if (same < 0)
>         same = (identical_basenames
>                 && strcmp (source_basename, dest_basename) == 0);
>   ...
>   return same;
> }
> 
> Your new test, "same < 0" will never be true when
> compiled on a system with proper "bool" support.
> 
> Apparently, since your testing did not expose this flaw,
> no tested use of same_name requires the new semantics of SAME_INODE.
> 
> I have profound doubts about whether this is a desirable change.
> Since it is solely in support of non-POSIX platforms,
> I find it debatable, to say the least.  You've converted the
> clearly-boolean SAME_INODE to be tri-state, with no way (other
> than inspection) for callers to detect the need to update
> their code.
> 
> If the tri-state test is required in only a few places,
> how about using a new macro, say SAME_INODE_TRISTATE,
> in just those few places?
> With a name that makes it obvious the result is not boolean,
> there is far less risk of misuse.
> 
>> >From 5538c910e1acd307a3d3e69f6d80044b1f3d935a Mon Sep 17 00:00:00 2001
>> From: Eric Blake <address@hidden>
>> Date: Wed, 23 Sep 2009 14:51:29 -0600
>> Subject: [PATCH 2/2] same-inode: make SAME_INODE tri-state, to port to mingw
>>
>> Mingw has the annoying habit (already documented in
>> doc/posix-functions/*stat) that st_ino is always 0.
>> This means that naive uses of SAME_INODE(a,b) would
>> succeed, even on distinct files.
> ...
>> diff --git a/NEWS b/NEWS
>> index 62c631f..87fc884 100644
>> --- a/NEWS
>> +++ b/NEWS
>> @@ -6,6 +6,9 @@ User visible incompatible changes
>>
>>  Date        Modules         Changes
>>
>> +2009-09-23  same-inode      The macro SAME_INODE is now tri-state, adding -1
>> +                            for unknown.
>> +
> ...
>> diff --git a/lib/same.c b/lib/same.c
>> index af3a95e..5251fb8 100644
>> --- a/lib/same.c
>> +++ b/lib/same.c
>> @@ -1,7 +1,7 @@
>>  /* Determine whether two file names refer to the same file.
>>
>> -   Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006 Free
>> -   Software Foundation, Inc.
>> +   Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
>> +   2009 Free Software Foundation, Inc.
>>
>>     This program is free software: you can redistribute it and/or modify
>>     it under the terms of the GNU General Public License as published by
>> @@ -97,6 +97,9 @@ same_name (const char *source, const char *dest)
>>      }
>>
>>        same = SAME_INODE (source_dir_stats, dest_dir_stats);
>> +      if (same < 0)
>> +    same = (identical_basenames
>> +            && strcmp (source_basename, dest_basename) == 0);
>>
>>  #if ! _POSIX_NO_TRUNC && HAVE_PATHCONF && defined _PC_NAME_MAX
>>        if (same && ! identical_basenames)
> 

- --
Don't work too hard, make some time for fun as well!

Eric Blake             address@hidden
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Cygwin)
Comment: Public key at home.comcast.net/~ericblake/eblake.gpg
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkq7XXgACgkQ84KuGfSFAYAf5gCZAQcJDAUzyqjSFVyMfEFha0Bo
ESUAnRdaH7Ezb5GT11GYoW+sEikL4z6Z
=+5eF
-----END PGP SIGNATURE-----




reply via email to

[Prev in Thread] Current Thread [Next in Thread]