On 06/18/2012 09:30 AM, Eli Zaretskii wrote: >> At least to experiment on the concept, and on a suggestion from >> Eric Blake weeks ago, I stole bits of the coreutils, and made them >> a gnulib module. > > Perhaps the comments below, mainly related to portability to > MS-Windows (but not only that) will be helpful, even though a lot has > been said already.
Yes, porting to mingw would be helpful.
>
>> + while (*path1 && *path2)
>> + {
>> + if (*path1 != *path2)
>
> This comparison should be case-insensitive for MS-Windows.
Shouldn't normalization already guarantee canonical case, so that by the
time we get here, case-sensitive comparison is correct?
>
>> + /* Skip over extraneous '/'. */
>> + if (*relto_suffix == '/')
>> + relto_suffix++;
>> + if (*fname_suffix == '/')
>> + fname_suffix++;
>
> Why do you skip only over a single slash? Can't there be an
> arbitrarily long sequence of redundant slashes?
After canonicalization, there can be at most one location where you will
ever have consecutive '/', and that is in path names that start with //.
>
>> +/* Return FROM represented as relative to the dir of TARGET.
>> + The result is malloced. */
>
> This commentary doesn't say that the result can be NULL.
nor that NULL is _expected_ when two names have no relative relationship
(as is the case between /foo and //bar on systems where // is special,
or between a:/file and c:/file on windows).
>
>> +
>> +char *
>> +convert_abs_rel (const char *from, const char *target)
>> +{
>> + char *realtarget = canonicalize_filename_mode (target, CAN_MISSING);
>> + char *realfrom = canonicalize_filename_mode (from, CAN_MISSING);
>
> AFAICT, canonicalize_filename_mode can return NULL, but the rest of
> the code doesn't cope with that.
No, canonicalize_filename_mode is GPL because it calls xalloc() and dies
rather than return NULL.
--
Eric Blake [email protected] +1-919-301-3266
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
