winepath: Fix --unix so it works whether the Windows path refers to an existing file/directory or not.
This commit is contained in:
parent
86ba62a563
commit
5d531fc1d5
|
@ -189,14 +189,61 @@ int wmain(int argc, const WCHAR *argv[])
|
|||
printf("%s\n", path);
|
||||
}
|
||||
if (outputformats & UNIXFORMAT) {
|
||||
WCHAR *ntpath, *tail;
|
||||
int ntpathlen=lstrlenW(argv[i]);
|
||||
ntpath=HeapAlloc(GetProcessHeap(), 0, sizeof(*ntpath)*(ntpathlen+1));
|
||||
lstrcpyW(ntpath, argv[i]);
|
||||
tail=NULL;
|
||||
while (1)
|
||||
{
|
||||
char *unix_name;
|
||||
WCHAR *slash, *c;
|
||||
|
||||
if ((unix_name = wine_get_unix_file_name_ptr(argv[i])))
|
||||
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 );
|
||||
}
|
||||
else printf( "\n" );
|
||||
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';
|
||||
}
|
||||
HeapFree(GetProcessHeap(), 0, ntpath);
|
||||
}
|
||||
if (outputformats & WINDOWSFORMAT) {
|
||||
WCHAR* windows_name;
|
||||
|
|
Loading…
Reference in New Issue