On 09/04/2012 04:57 AM, Eric Blake wrote: >> * lib/fts.c (fts_open): Upon initialization, if a name ends in two >> or more slashes, trim all but the final one. But if a name consists >> solely of two or more slashes, reduce it to "//", not to "/". >> > > For two slashes, that is correct. But trimming "///" to "//" is a > violation of POSIX and fails on cygwin; "///" must be the same as "/", > not "///". > >> +++ b/lib/fts.c >> @@ -487,6 +487,14 @@ fts_open (char * const *argv, >> for (root = NULL, nitems = 0; *argv != NULL; ++argv, ++nitems) { >> /* *Do* allow zero-length file names. */ >> size_t len = strlen(*argv); >> + >> + /* If there are two or more trailing slashes, trim all but >> one, >> + but don't change "//" to "/". */ >> + char const *v = *argv; >> + if (2 < len && v[len - 1] == '/') >> + while (2 < len && v[len - 2] == '/') >> + --len;
I think that this would do the right thing, though (notice that it strips all but 1 slash for anything longer than "//" to begin with): + char const *v = *argv; + if (2 < len && v[len - 1] == '/') + while (1 < len && v[len - 1] == '/') + --len; -- Eric Blake ebl...@redhat.com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature