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;
         }
     }