This is the mail archive of the cygwin@cygwin.com 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: Finding exact case of paths


On Thu, 12 Sep 2002, Igor Pechtchanski wrote:

> On Fri, 13 Sep 2002, Paul Johnston wrote:
>
> > > Oh, I see, add a modifier similar to '-s', so that it verifies the case of
> > > each element in the path...  Yeah, that could work, something like:
> > >   -e, --exact-case      print exact case of NAME
> >
> > Yep, exactly. Now, cygpath seems to generally not hit the filesystem -
> > cygpath c:/complete/crap gives me /c/complete/crap so using that switch
> > will necessarily involve a performance hit. Given that, I think I'm
> > happy with my solution based on dirent/strcasecmp. I've attached a
> > stand-alone utility that seems to work (just on cygwin paths), although
> > it has the side effect of squishing down multiple slashes
> > ///like////this//path down to /like/this/path.
> >
> > I think it would be ok to restrict --exact-case to cygwin paths.
>
> I don't think there's a need to search the directory yourself.  Upon
> browsing the cygpath code some more, I realized that it is doing exactly
> what we need (i.e. convert to the exact path) when returning the system
> directory (the '-S' flag).  Quoting the code (cygpath.cc:396):
>
>     case 'S':
>       GetSystemDirectory (buf, MAX_PATH);
>       FindFirstFile (buf, &w32_fd);
>       strcpy (strrchr (buf, '\\') + 1, w32_fd.cFileName);
>       break;
>
> So we can do the same trick with each filename when our option ('-e') is
> in effect.  I'm looking at a fix to cygpath now, and will submit a patch
> as soon as I have it ready.
>
> On a separate note, I found that "cygpath -l -w <path>" does not work on
> my Win2k SP2 system, returning the same garbage (hex 20 FB 22 0a)
> regardless of the path.  Anyone else have that problem?

Well, after further reading of the code and experimenting I've determined
two things:
1) the '-l' option of cygpath works in the cvs HEAD, and
2) it does exactly what we need (thanks, Corinna).

So we can use $(cygpath -u $(cygpath -l -w "$WINETC/$WFILE")) in the
script.  This would require people to upgrade to the new cygpath (which
they would have to anyway, if they were to use the option we proposed),
which means that this script can not be released before the next cygwin,
but that is probably fine.  New version and diff attached.
	Igor
P.S. I'm racking my brain trying to figure out why -l didn't work for me
in version 1.21 of cygpath, but did in version 1.22.  As far as I could
see, the only changes to cygpath were some added newlines...
-- 
				http://cs.nyu.edu/~pechtcha/
      |\      _,,,---,,_		pechtcha@cs.nyu.edu
ZZZzz /,`.-'`'    -.  ;-;;,_		igor@watson.ibm.com
     |,4-  ) )-,_. ,\ (  `'-'		Igor Pechtchanski
    '---''(_/--'  `-'\_) fL	a.k.a JaguaR-R-R-r-r-r-.-.-.  Meow!

It took the computational power of three Commodore 64s to fly to the moon.
It takes a 486 to run Windows 95.  Something is wrong here. -- SC sig file

Attachment: make-etc-links.sh
Description: Text document

Attachment: make-etc-links.sh-0.7-diff
Description: Text document

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.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]