On 09/12/2024 14.17, Corinna Vinschen via Cygwin wrote:
On Dec  9 13:47, Federico Kircheis via Cygwin wrote:
On 09/12/2024 12.46, Corinna Vinschen via Cygwin wrote:
On Dec  6 13:23, Federico Kircheis via Cygwin wrote:
Hello,

was it considered to add a flag to cygpath to output a path in unc format?

No.  But it wouldn't be much work.

It would be very nice if it ever happens.

For example, the folder

C:\test.

cannot be accessed from many Windows applications (powershell and cmd
included) because of the trailing dot, while cygwin has no issue creating,
accessing and deleting such files/folders.

Using an unc path

\\?\C:\test.

solves the issue for some programs, but cygpath currently misses an option
for creating such path.

As a workaround you can just prepend the long path prefix:

    echo -n '\\?\'; cygpath ...

Which is what I'm doing, plus special-casing

1)
root path, like C:\ , because for whatever reason \\?\C:\ is not valid, it
has to be a subfolder (and trying to trick it with \\?\C:\\ does not work
either).

In which scenario?  \\?\C:\ is just the same as \??\C:\ in NT speak, and
that's a perfectly valid directory path.

I've never seen \??\C:\.

My test case, from powershell (which I do definitively _not_ know well enough, otherwise I wouldn't be using cygwin) was

cd C:\             # success
cd \\?\C:\         # fail
cd C:\windows      # success
cd \\?\C:\windows  # success

and repeat the same operation with dir instead of ls.

The error message is that the "value of argument path is not valid"

I did some further testing: no amount of quoting (with ", ' and `) helps, also replacing \ with / does not change any outcome.

For cd, the parameter -literal makes a difference

cd -literal \\?\C:\  # success

for dir, I did not find anything yet.

So I guess you are correct, although support from basic tools (cd and dir at least) seems very suboptimal...

2)
unmounted network drives (\\server\path)

Yeah, those have a different prefix:

   \\?\UNC\server\share

I'm not sure how a --unc should handle those cases.
For all things I have in mind, not appending \\?\ is preferred, but someone
might expect a hard error.

Either way, it is another reason why it makes sense for cygpath to handle
those cases, currently I have to parse it's output before prepending '\\?\'.

I'll take a look.

Notice that creating a dos path leads to an error.

I don't understand. Creating which DOS path with which application?

I meant that it is not possible to create a DOS path to C:\test., thus using
a dos path is not a viable workaround to unc:

----
cd 'C:/test.'
cygpath -ws .
cygpath: cannot create short name of .
----

Don't use -s, it's just for the old short name style of DOS paths.
Nobody should actually need this nowadays, and sometimes short paths
don't even exist.  It's a functionality inside the FS driver, afaik, and
it can be switched off in the system.

In your example, standard filenames work:

   $ cd /cygdrive/c
   $ mkdir test.
   $ cd test.
   $ cygpath -ws .
   cygpath: cannot create short name of C:\test.
   $ cygpath -wa .
   C:\test.

Yes, -wa works; I wanted to point out that DOS paths are not a viable workaround. I could have left it out from my first mail, we agree no need to iterate further ;)


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

Reply via email to