[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