This is the mail archive of the cygwin 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: Strange cygpath behavior.


On 6/23/2011 8:06 PM, Andrey Repin wrote:
Greetings, Marco atzeri!

On 6/23/2011 5:05 PM, Andrey Repin wrote:
Greetings, Marco atzeri!

Cygwin, to my best understanding, is supposed to transparently accept native
Windows paths.

No, cygwin expects to receive POSIX/Unix paths

$ cygpath -h
[cut]
    -u, --unix            (default) print Unix form of NAMEs
(/cygdrive/c/winnt)

so cygpath -u
expects to receive a Windows path and convert it in a unix one.

That's your assumption. Which is not necessarily true. (Unless you're author of cygpath, in which case you have full authority to tell me what it is supposed to be.) Man page and reference card both do not specify the exact argument format, only the intended result format. And just to be clear, windows in the core don't see a difference between the path in format of "C:/whatever/..." or "C:\whatever\...". This behavior is very, very old. Even older than Windows itself, if you know, what "INT 21h" means.

you are right, but it is not very useful to translate a windows path in a windows path ...

On Win XP cmd.exe, is not always true that the
two forms are equivalent (we are not anymore on CP/M, DOS age):

C:\Temp>cd c:/Temp
The system cannot find the path specified.

C:\Temp>cd c:\Temp
C:\Temp>

C:\>cd c:\Temp
C:\Temp>

C:\>cd c:/Temp
C:\Temp>

and if I remember correctly also somewhere else in the core of MS system the "\" "/" are not equivalent.


   From your example:
cygpath -u \\\\DAEMON1\\anrdaemon\\.profile
   /c/DAEMON1/anrdaemon/.profile

the argument is an escaped windows network path
and the outcome is the Unix equivalent

Not true for the "outcome" part.


<stdout>:cygpath -w "/c/DAEMON1/anrdaemon/.profile"
C:\DAEMON1\anrdaemon\.profile

With your cygdrive mapping /c is the disk C: so the first looks like a Unix path and the outcome is the equivalent windows path.

Cygpath doesn't check if the path exist
From my bash shell, as cygdrive is not remapped:

$ cygpath -w "/c/DAEMON1/anrdaemon/.profile"
E:\cygwin2\c\DAEMON1\anrdaemon\.profile

$ cygpath -w "/cygdrive/c/DAEMON1/anrdaemon/.profile"
C:\DAEMON1\anrdaemon\.profile



Which is far from original network path.


As Corinna explained:
$ echo \\\\DAEMON1\\anrdaemon\\.profile
\\DAEMON1\anrdaemon\.profile

I already said that I'm sorry, that I forgot to mention what seems to be critical bit of information.

By the way resetting "cygdrive" is not a good idea,
it is better to obtain

To tell you, that was actually a good idea for me. I don't have an eternity to type "/cygwhatever" every time I want to address another drive. So the idea to map cygdrive to "/" was actually very handy, thanks to this mailing list helping to finish and polish it.

If you are happy, fine for me.


--
WBR,
  Andrey Repin (anrdaemon@freemail.ru) 23.06.2011,<20:58>

Sorry for my terrible english...



--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]