Commit 5d531fc1 authored by Francois Gouget's avatar Francois Gouget Committed by Alexandre Julliard

winepath: Fix --unix so it works whether the Windows path refers to an existing…

winepath: Fix --unix so it works whether the Windows path refers to an existing file/directory or not.
parent 86ba62a5
...@@ -189,14 +189,61 @@ int wmain(int argc, const WCHAR *argv[]) ...@@ -189,14 +189,61 @@ int wmain(int argc, const WCHAR *argv[])
printf("%s\n", path); printf("%s\n", path);
} }
if (outputformats & UNIXFORMAT) { if (outputformats & UNIXFORMAT) {
char *unix_name; WCHAR *ntpath, *tail;
int ntpathlen=lstrlenW(argv[i]);
if ((unix_name = wine_get_unix_file_name_ptr(argv[i]))) ntpath=HeapAlloc(GetProcessHeap(), 0, sizeof(*ntpath)*(ntpathlen+1));
lstrcpyW(ntpath, argv[i]);
tail=NULL;
while (1)
{ {
printf("%s\n", unix_name); char *unix_name;
HeapFree( GetProcessHeap(), 0, unix_name ); WCHAR *slash, *c;
unix_name = wine_get_unix_file_name_ptr(ntpath);
if (unix_name)
{
if (tail)
{
WideCharToMultiByte(CP_UNIXCP, 0, tail+1, -1, path, MAX_PATH, NULL, NULL);
printf("%s/%s\n", unix_name, path);
}
else
{
printf("%s\n", unix_name);
}
HeapFree( GetProcessHeap(), 0, unix_name );
break;
}
slash=(tail ? tail : ntpath+ntpathlen);
while (slash != ntpath && *slash != '/' && *slash != '\\')
slash--;
if (slash == ntpath)
{
/* This is a complete path conversion failure.
* It would typically happen if ntpath == "".
*/
printf("\n");
break;
}
c=slash+1;
while (*c != '\0' && *c != '*' && *c != '?' &&
*c != '<' && *c != '>' && *c != '|' && *c != '"')
c++;
if (*c != '\0')
{
/* If this is not a valid NT path to start with,
* then obviously we cannot convert it.
*/
printf("\n");
break;
}
if (tail)
*tail='/';
tail=slash;
*tail='\0';
} }
else printf( "\n" ); HeapFree(GetProcessHeap(), 0, ntpath);
} }
if (outputformats & WINDOWSFORMAT) { if (outputformats & WINDOWSFORMAT) {
WCHAR* windows_name; WCHAR* windows_name;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment