winecfg/audio: Simplify removeDriver() function.

This commit is contained in:
Kirill K. Smirnov 2008-11-26 01:24:53 +03:00 committed by Alexandre Julliard
parent d540cf3c80
commit 1482006fb5
1 changed files with 18 additions and 37 deletions

View File

@ -173,45 +173,26 @@ static void addDriver(const char * driver)
/* remove driver from local copy of driver registry string */
static void removeDriver(const char * driver)
{
char before[32], after[32], * start;
char pattern[32], *p;
int drvlen, listlen;
strcpy(before, ",");
strcat(before, driver);
strcpy(after, driver);
strcat(after, ",");
strcpy(pattern, ",");
strcat(pattern, driver);
strcat(pattern, ",");
drvlen = strlen(driver);
listlen = strlen(curAudioDriver);
if ((start = strstr(curAudioDriver, after)))
{
int len = strlen(after);
char * end = curAudioDriver + strlen(curAudioDriver);
int i, count = end - start + len;
for (i = 0; i < count; i++)
{
if (start + len >= end)
*start = 0;
p = strstr(curAudioDriver, pattern);
if (p) /* somewhere in the middle */
memmove(p, p+drvlen+1, strlen(p+drvlen+1)+1);
else if (!strncmp(curAudioDriver, pattern+1, drvlen+1)) /* the head */
memmove(curAudioDriver, curAudioDriver+drvlen+1, listlen-drvlen);
else if (!strncmp(curAudioDriver+listlen-drvlen-1, pattern, drvlen+1)) /* the tail */
curAudioDriver[listlen-drvlen-1] = 0;
else if (!strcmp(curAudioDriver, driver)) /* only one entry (head&tail) */
curAudioDriver[0] = 0;
else
*start = start[len];
start++;
}
}
else if ((start = strstr(curAudioDriver, before)))
{
int len = strlen(before);
char * end = curAudioDriver + strlen(curAudioDriver);
int i, count = end - start + len;
for (i = 0; i < count; i++)
{
if (start + len >= end)
*start = 0;
else
*start = start[len];
start++;
}
}
else if (strcmp(curAudioDriver, driver) == 0)
{
strcpy(curAudioDriver, "");
}
WINE_FIXME("driver '%s' is not in the list, please report!\n", driver);
}
static void initAudioDeviceTree(HWND hDlg)