Make sure that DRIVE_FindDriveRoot always returns an absolute path.
diff --git a/files/dos_fs.c b/files/dos_fs.c
index c045a98..74be98e 100644
--- a/files/dos_fs.c
+++ b/files/dos_fs.c
@@ -867,7 +867,6 @@
*/
BOOL DOSFS_GetFullName( LPCSTR name, BOOL check_last, DOS_FULL_NAME *full )
{
- BOOL unixabsolute = *name == '/';
BOOL found;
UINT flags;
char *p_l, *p_s, *root;
@@ -895,7 +894,7 @@
{
while ((*name == '\\') || (*name == '/')) name++;
}
- else if (!unixabsolute) /* Relative path */
+ else /* Relative path */
{
lstrcpynA( root + 1, DRIVE_GetUnixCwd( full->drive ),
sizeof(full->long_name) - (root - full->long_name) - 1 );
@@ -1028,7 +1027,6 @@
DWORD sp = 0, lp = 0;
int tmplen, drive;
UINT flags;
- BOOL unixabsolute = *longpath == '/';
TRACE("%s\n", debugstr_a(longpath));
@@ -1046,22 +1044,12 @@
return 0;
}
- /* check for drive letter */
- if ( longpath[1] == ':' ) {
- tmpshortpath[0] = longpath[0];
- tmpshortpath[1] = ':';
- sp = 2;
- }
-
if ( ( drive = DOSFS_GetPathDrive ( &longpath )) == -1 ) return 0;
flags = DRIVE_GetFlags ( drive );
- if ( unixabsolute ) {
- tmpshortpath[0] = drive + 'A';
- tmpshortpath[1] = ':';
- tmpshortpath[2] = '\\';
- sp = 3;
- }
+ tmpshortpath[0] = drive + 'A';
+ tmpshortpath[1] = ':';
+ sp = 2;
while ( longpath[lp] ) {
@@ -2431,4 +2419,3 @@
GlobalFree16( handle );
return TRUE;
}
-
diff --git a/files/drive.c b/files/drive.c
index 9e5b453..01b36ad 100644
--- a/files/drive.c
+++ b/files/drive.c
@@ -388,6 +388,9 @@
*p = '/';
len = strlen(buffer);
+ /* strip off trailing slashes */
+ while (len > 0 && buffer[len - 1] == '/') buffer[--len] = 0;
+
while (len > 0)
{
/* Find the drive */
@@ -405,6 +408,7 @@
TRACE( "%s -> drive %c:, root='%s', name='%s'\n",
*path, 'A' + drive, buffer, *path + len);
*path += len;
+ if (!**path) *path = "\\";
return drive;
}
}
@@ -413,9 +417,6 @@
level = 0;
while (len > 0 && level < 1)
{
- /* strip off a trailing slash */
- while (len > 0 && buffer[len - 1] == '/')
- buffer[--len] = 0;
/* find start of the last path component */
while (len > 0 && buffer[len - 1] != '/')
--len;
@@ -423,6 +424,8 @@
if (strcmp( buffer + len, "." ) != 0)
level += strcmp( buffer + len, ".." ) ? 1 : -1;
buffer[len] = 0;
+ /* strip off trailing slashes */
+ while (len > 0 && buffer[len - 1] == '/') buffer[--len] = 0;
}
}