[PATCH 5/5] winecfg: Always retrieve volume name and serial number when adding a drive

Alexandre Goujon ale.goujon at gmail.com
Mon Aug 29 08:22:31 CDT 2011


Also removing IDS_SYSTEM_DRIVE_LABEL as it's GetVolumeInformation job.
---
 programs/winecfg/drive.c       |   26 +++++++++++++-------------
 programs/winecfg/drivedetect.c |   11 ++++-------
 programs/winecfg/driveui.c     |    7 ++-----
 programs/winecfg/resource.h    |    1 -
 programs/winecfg/winecfg.h     |    3 +--
 programs/winecfg/winecfg.rc    |    1 -
 6 files changed, 20 insertions(+), 29 deletions(-)

diff --git a/programs/winecfg/drive.c b/programs/winecfg/drive.c
index f536bd6..0a41e1c 100644
--- a/programs/winecfg/drive.c
+++ b/programs/winecfg/drive.c
@@ -93,22 +93,30 @@ ULONG drive_available_mask(char letter)
   return result;
 }
 
-BOOL add_drive(char letter, const char *targetpath, const char *device, const WCHAR *label,
-               DWORD serial, DWORD type)
+BOOL add_drive(char letter, const char *targetpath, const char *device, DWORD type)
 {
     int driveIndex = letter_to_index(letter);
+    DWORD serial;
+    char label[MAX_PATH], root[] = {letter,':','\\',0};
 
     if(drives[driveIndex].in_use)
         return FALSE;
 
+    if (!GetVolumeInformationA( root, label, sizeof(label)/sizeof(label[0]),
+                                &serial, NULL, NULL, NULL, 0 ))
+    {
+        label[0] = 0;
+        serial = 0;
+    }
+
     WINE_TRACE("letter == '%c', unixpath == %s, device == %s, label == %s, serial == %08x, type == %d\n",
                letter, wine_dbgstr_a(targetpath), wine_dbgstr_a(device),
-               wine_dbgstr_w(label), serial, type);
+               wine_dbgstr_a(label), serial, type);
 
     drives[driveIndex].letter   = toupper(letter);
     drives[driveIndex].unixpath = strdupA(targetpath);
     drives[driveIndex].device   = device ? strdupA(device) : NULL;
-    drives[driveIndex].label    = label ? strdupW(label) : NULL;
+    drives[driveIndex].label    = strdupU2W(label);
     drives[driveIndex].serial   = serial;
     drives[driveIndex].type     = type;
     drives[driveIndex].in_use   = TRUE;
@@ -278,20 +286,12 @@ BOOL load_drives(void)
                              data, size, NULL, NULL ))
         {
             char *unixpath = NULL, *device = NULL;
-            WCHAR volname[MAX_PATH];
-            DWORD serial;
 
             if (data->mount_point_offset) unixpath = (char *)data + data->mount_point_offset;
             if (data->device_offset) device = (char *)data + data->device_offset;
 
-            if (!GetVolumeInformationW( root, volname, sizeof(volname)/sizeof(WCHAR),
-                                        &serial, NULL, NULL, NULL, 0 ))
-            {
-                volname[0] = 0;
-                serial = 0;
-            }
             if (unixpath)  /* FIXME: handle unmounted drives too */
-                add_drive( root[0], unixpath, device, volname, serial, get_drive_type(root[0]) );
+                add_drive( root[0], unixpath, device, get_drive_type(root[0]) );
             root[0]++;
         }
         else
diff --git a/programs/winecfg/drivedetect.c b/programs/winecfg/drivedetect.c
index c7e2f78..01e606c 100644
--- a/programs/winecfg/drivedetect.c
+++ b/programs/winecfg/drivedetect.c
@@ -237,7 +237,7 @@ static void ensure_root_is_mapped(void)
         {
             if (!drives[letter - 'A'].in_use) 
             {
-                add_drive(letter, "/", NULL, NULL, 0, DRIVE_FIXED);
+                add_drive(letter, "/", NULL, DRIVE_FIXED);
                 WINE_TRACE("allocated drive %c as the root drive\n", letter);
                 break;
             }
@@ -266,7 +266,7 @@ static void ensure_home_is_mapped(void)
         {
             if (!drives[letter - 'A'].in_use)
             {
-                add_drive(letter, home, NULL, NULL, 0, DRIVE_FIXED);
+                add_drive(letter, home, NULL, DRIVE_FIXED);
                 WINE_TRACE("allocated drive %c as the user's home directory\n", letter);
                 break;
             }
@@ -291,10 +291,7 @@ static void ensure_drive_c_is_mapped(void)
 
     if (stat(drive_c_dir, &buf) == 0)
     {
-        WCHAR label[64];
-        LoadStringW (GetModuleHandle (NULL), IDS_SYSTEM_DRIVE_LABEL, label,
-                     sizeof(label)/sizeof(label[0]));
-        add_drive('C', "../drive_c", NULL, label, 0, DRIVE_FIXED);
+        add_drive('C', "../drive_c", NULL, DRIVE_FIXED);
     }
     else
     {
@@ -362,7 +359,7 @@ int autodetect_drives(void)
 
         WINE_TRACE("adding drive %c for %s, device %s, type %s\n",
                    letter, ent->mnt_dir, device, ent->mnt_type);
-        add_drive(letter, ent->mnt_dir, device, NULL, 0, type);
+        add_drive(letter, ent->mnt_dir, device, type);
 
         /* working_mask is a map of the drive letters still available. */
         working_mask &= ~DRIVE_MASK_BIT(letter);
diff --git a/programs/winecfg/driveui.c b/programs/winecfg/driveui.c
index ead74b6..c53fc59 100644
--- a/programs/winecfg/driveui.c
+++ b/programs/winecfg/driveui.c
@@ -329,12 +329,9 @@ static void on_add_click(HWND dialog)
 
     if (new == 'C')
     {
-        WCHAR label[64];
-        LoadStringW (GetModuleHandle (NULL), IDS_SYSTEM_DRIVE_LABEL, label,
-                     sizeof(label)/sizeof(label[0]));
-        add_drive(new, "../drive_c", NULL, label, 0, DRIVE_FIXED);
+        add_drive(new, "../drive_c", NULL, DRIVE_FIXED);
     }
-    else add_drive(new, "/", NULL, NULL, 0, DRIVE_UNKNOWN);
+    else add_drive(new, "/", NULL, DRIVE_UNKNOWN);
 
     fill_drives_list(dialog);
 
diff --git a/programs/winecfg/resource.h b/programs/winecfg/resource.h
index 67b912c..9d5369a 100644
--- a/programs/winecfg/resource.h
+++ b/programs/winecfg/resource.h
@@ -140,7 +140,6 @@
 #define IDS_DRIVE_REMOVABLE             8203
 #define IDS_DRIVE_CDROM                 8204
 #define IDS_DRIVE_LETTERS_EXCEEDED      8205
-#define IDS_SYSTEM_DRIVE_LABEL          8206
 #define IDS_CONFIRM_DELETE_C            8207
 #define IDS_COL_DRIVELETTER             8208
 #define IDS_COL_DRIVEMAPPING            8209
diff --git a/programs/winecfg/winecfg.h b/programs/winecfg/winecfg.h
index 1959409..b652b01 100644
--- a/programs/winecfg/winecfg.h
+++ b/programs/winecfg/winecfg.h
@@ -109,8 +109,7 @@ struct drive
 #define DRIVE_MASK_BIT(B) (1 << (toupper(B) - 'A'))
 
 ULONG drive_available_mask(char letter);
-BOOL add_drive(char letter, const char *targetpath, const char *device,
-               const WCHAR *label, DWORD serial, DWORD type);
+BOOL add_drive(char letter, const char *targetpath, const char *device, DWORD type);
 void delete_drive(struct drive *pDrive);
 void apply_drive_changes(void);
 BOOL browse_for_unix_folder(HWND dialog, WCHAR *pszPath);
diff --git a/programs/winecfg/winecfg.rc b/programs/winecfg/winecfg.rc
index 9c936ca..0313a8a 100644
--- a/programs/winecfg/winecfg.rc
+++ b/programs/winecfg/winecfg.rc
@@ -84,7 +84,6 @@ BEGIN
     IDS_DRIVE_REMOVABLE         "Floppy disk"
     IDS_DRIVE_CDROM             "CD-ROM"
     IDS_DRIVE_LETTERS_EXCEEDED  "You cannot add any more drives.\n\nEach drive must have a letter, from A to Z, so you cannot have more than 26."
-    IDS_SYSTEM_DRIVE_LABEL      "System drive"
     IDS_CONFIRM_DELETE_C        "Are you sure you want to delete drive C?\n\nMost Windows applications expect drive C to exist, and will die messily if it doesn't. If you proceed remember to recreate it!"
     IDS_COL_DRIVELETTER         "Letter"
     IDS_COL_DRIVEMAPPING        "Drive Mapping"
-- 
1.7.4.1




More information about the wine-patches mailing list