Make sure that DRIVE_FindDriveRoot always returns an absolute path.
This commit is contained in:
parent
4b9cc8684b
commit
dcf0beac22
@ -867,7 +867,6 @@ static int DOSFS_GetPathDrive( const char **name )
|
|||||||
*/
|
*/
|
||||||
BOOL DOSFS_GetFullName( LPCSTR name, BOOL check_last, DOS_FULL_NAME *full )
|
BOOL DOSFS_GetFullName( LPCSTR name, BOOL check_last, DOS_FULL_NAME *full )
|
||||||
{
|
{
|
||||||
BOOL unixabsolute = *name == '/';
|
|
||||||
BOOL found;
|
BOOL found;
|
||||||
UINT flags;
|
UINT flags;
|
||||||
char *p_l, *p_s, *root;
|
char *p_l, *p_s, *root;
|
||||||
@ -895,7 +894,7 @@ BOOL DOSFS_GetFullName( LPCSTR name, BOOL check_last, DOS_FULL_NAME *full )
|
|||||||
{
|
{
|
||||||
while ((*name == '\\') || (*name == '/')) name++;
|
while ((*name == '\\') || (*name == '/')) name++;
|
||||||
}
|
}
|
||||||
else if (!unixabsolute) /* Relative path */
|
else /* Relative path */
|
||||||
{
|
{
|
||||||
lstrcpynA( root + 1, DRIVE_GetUnixCwd( full->drive ),
|
lstrcpynA( root + 1, DRIVE_GetUnixCwd( full->drive ),
|
||||||
sizeof(full->long_name) - (root - full->long_name) - 1 );
|
sizeof(full->long_name) - (root - full->long_name) - 1 );
|
||||||
@ -1028,7 +1027,6 @@ DWORD WINAPI GetShortPathNameA( LPCSTR longpath, LPSTR shortpath,
|
|||||||
DWORD sp = 0, lp = 0;
|
DWORD sp = 0, lp = 0;
|
||||||
int tmplen, drive;
|
int tmplen, drive;
|
||||||
UINT flags;
|
UINT flags;
|
||||||
BOOL unixabsolute = *longpath == '/';
|
|
||||||
|
|
||||||
TRACE("%s\n", debugstr_a(longpath));
|
TRACE("%s\n", debugstr_a(longpath));
|
||||||
|
|
||||||
@ -1046,22 +1044,12 @@ DWORD WINAPI GetShortPathNameA( LPCSTR longpath, LPSTR shortpath,
|
|||||||
return 0;
|
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;
|
if ( ( drive = DOSFS_GetPathDrive ( &longpath )) == -1 ) return 0;
|
||||||
flags = DRIVE_GetFlags ( drive );
|
flags = DRIVE_GetFlags ( drive );
|
||||||
|
|
||||||
if ( unixabsolute ) {
|
tmpshortpath[0] = drive + 'A';
|
||||||
tmpshortpath[0] = drive + 'A';
|
tmpshortpath[1] = ':';
|
||||||
tmpshortpath[1] = ':';
|
sp = 2;
|
||||||
tmpshortpath[2] = '\\';
|
|
||||||
sp = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
while ( longpath[lp] ) {
|
while ( longpath[lp] ) {
|
||||||
|
|
||||||
@ -2431,4 +2419,3 @@ BOOL16 WINAPI FindClose16( HANDLE16 handle )
|
|||||||
GlobalFree16( handle );
|
GlobalFree16( handle );
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -388,6 +388,9 @@ int DRIVE_FindDriveRoot( const char **path )
|
|||||||
*p = '/';
|
*p = '/';
|
||||||
len = strlen(buffer);
|
len = strlen(buffer);
|
||||||
|
|
||||||
|
/* strip off trailing slashes */
|
||||||
|
while (len > 0 && buffer[len - 1] == '/') buffer[--len] = 0;
|
||||||
|
|
||||||
while (len > 0)
|
while (len > 0)
|
||||||
{
|
{
|
||||||
/* Find the drive */
|
/* Find the drive */
|
||||||
@ -405,6 +408,7 @@ int DRIVE_FindDriveRoot( const char **path )
|
|||||||
TRACE( "%s -> drive %c:, root='%s', name='%s'\n",
|
TRACE( "%s -> drive %c:, root='%s', name='%s'\n",
|
||||||
*path, 'A' + drive, buffer, *path + len);
|
*path, 'A' + drive, buffer, *path + len);
|
||||||
*path += len;
|
*path += len;
|
||||||
|
if (!**path) *path = "\\";
|
||||||
return drive;
|
return drive;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -413,9 +417,6 @@ int DRIVE_FindDriveRoot( const char **path )
|
|||||||
level = 0;
|
level = 0;
|
||||||
while (len > 0 && level < 1)
|
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 */
|
/* find start of the last path component */
|
||||||
while (len > 0 && buffer[len - 1] != '/')
|
while (len > 0 && buffer[len - 1] != '/')
|
||||||
--len;
|
--len;
|
||||||
@ -423,6 +424,8 @@ int DRIVE_FindDriveRoot( const char **path )
|
|||||||
if (strcmp( buffer + len, "." ) != 0)
|
if (strcmp( buffer + len, "." ) != 0)
|
||||||
level += strcmp( buffer + len, ".." ) ? 1 : -1;
|
level += strcmp( buffer + len, ".." ) ? 1 : -1;
|
||||||
buffer[len] = 0;
|
buffer[len] = 0;
|
||||||
|
/* strip off trailing slashes */
|
||||||
|
while (len > 0 && buffer[len - 1] == '/') buffer[--len] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user