Fix two more corner cases in UNIXFS_get_unix_path and UNIXFS_path_to_pidl.

This commit is contained in:
Michael Jung 2005-06-30 10:59:51 +00:00 committed by Alexandre Julliard
parent 832450920d
commit c0995c2c93
1 changed files with 17 additions and 3 deletions

View File

@ -280,11 +280,17 @@ static BOOL UNIXFS_get_unix_path(LPCWSTR pszDosPath, char *pszCanonicalPath)
if (cLinkLen + cTailLen + 1 > FILENAME_MAX)
return FALSE;
/* Avoid double slashes. */
if (szSymlink[cLinkLen-1] == '/' && pPathTail[0] == '/') {
szSymlink[cLinkLen-1] = '\0';
cLinkLen--;
}
memcpy(szSymlink + cLinkLen, pPathTail, cTailLen + 1);
memcpy(szPath, szSymlink, cLinkLen + cTailLen + 1);
*pszCanonicalPath = '\0';
pCanonicalTail = pszCanonicalPath;
pPathTail = szPath;
pCanonicalTail = pszCanonicalPath;
pPathTail = szPath;
} else {
/* Relative link. Expand into szPath and continue. */
char szTemp[FILENAME_MAX];
@ -307,7 +313,7 @@ static BOOL UNIXFS_get_unix_path(LPCWSTR pszDosPath, char *pszCanonicalPath)
pCanonicalTail += pPathTail - pElement;
*pPathTail = cTemp;
}
} while (pPathTail[0] == '/' && pPathTail[1]); /* Also handles paths terminated by '/' */
} while (pPathTail[0] == '/');
TRACE("--> %s\n", debugstr_a(pszCanonicalPath));
@ -440,6 +446,14 @@ static BOOL UNIXFS_path_to_pidl(UnixFolder *pUnixFolder, const WCHAR *path, LPIT
}
}
/* Special case for the root folder. */
if (!strcmp(szCompletePath, "/")) {
*ppidl = pidl = (LPITEMIDLIST)SHAlloc(sizeof(USHORT));
if (!pidl) return FALSE;
pidl->mkid.cb = 0; /* Terminate the ITEMIDLIST */
return TRUE;
}
/* Remove trailing slash, if present */
cPathLen = strlen(szCompletePath);
if (szCompletePath[cPathLen-1] == '/')