Free up the original buffer pointer instead of the one we advanced.
Only call getDrive() once inside of addDrive().
diff --git a/programs/winecfg/drive.c b/programs/winecfg/drive.c
index 1f0a0ce..a22b151 100644
--- a/programs/winecfg/drive.c
+++ b/programs/winecfg/drive.c
@@ -70,18 +70,20 @@
BOOL addDrive(char letter, char *targetpath, char *label, char *serial, uint type)
{
- if(drives[getDrive(letter)].in_use)
+ int driveIndex = getDrive(letter);
+
+ if(drives[driveIndex].in_use)
return FALSE;
WINE_TRACE("letter == '%c', unixpath == '%s', label == '%s', serial == '%s', type == %d\n",
letter, targetpath, label, serial, type);
- drives[getDrive(letter)].letter = toupper(letter);
- drives[getDrive(letter)].unixpath = strdup(targetpath);
- drives[getDrive(letter)].label = strdup(label);
- drives[getDrive(letter)].serial = strdup(serial);
- drives[getDrive(letter)].type = type;
- drives[getDrive(letter)].in_use = TRUE;
+ drives[driveIndex].letter = toupper(letter);
+ drives[driveIndex].unixpath = strdup(targetpath);
+ drives[driveIndex].label = strdup(label);
+ drives[driveIndex].serial = strdup(serial);
+ drives[driveIndex].type = type;
+ drives[driveIndex].in_use = TRUE;
return TRUE;
}
@@ -696,7 +698,7 @@
void onDriveInitDialog(void)
{
- char *pDevices;
+ char *pDevices, *pDev;
int ret;
int i;
int retval;
@@ -704,7 +706,7 @@
WINE_TRACE("\n");
/* setup the drives array */
- pDevices = (char*)malloc(512);
+ pDev = pDevices = malloc(512);
ret = GetLogicalDriveStrings(512, pDevices);
/* make all devices unused */
@@ -786,7 +788,7 @@
WINE_TRACE("found %d drives\n", i);
- free(pDevices);
+ free(pDev);
}