Kirill K. Smirnov : winecfg/audio: Simplify removeDriver() function.
Alexandre Julliard
julliard at winehq.org
Wed Nov 26 07:32:44 CST 2008
Module: wine
Branch: master
Commit: 1482006fb565b76910d1acb6b0677f1fbf347883
URL: http://source.winehq.org/git/wine.git/?a=commit;h=1482006fb565b76910d1acb6b0677f1fbf347883
Author: Kirill K. Smirnov <lich at math.spbu.ru>
Date: Wed Nov 26 01:24:53 2008 +0300
winecfg/audio: Simplify removeDriver() function.
---
programs/winecfg/audio.c | 59 +++++++++++++++------------------------------
1 files changed, 20 insertions(+), 39 deletions(-)
diff --git a/programs/winecfg/audio.c b/programs/winecfg/audio.c
index 7f6cff8..78f9f57 100644
--- a/programs/winecfg/audio.c
+++ b/programs/winecfg/audio.c
@@ -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;
-
- strcpy(before, ",");
- strcat(before, driver);
- strcpy(after, driver);
- strcat(after, ",");
-
- 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;
- 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, "");
- }
+ char pattern[32], *p;
+ int drvlen, listlen;
+
+ strcpy(pattern, ",");
+ strcat(pattern, driver);
+ strcat(pattern, ",");
+ drvlen = strlen(driver);
+ listlen = strlen(curAudioDriver);
+
+ 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
+ WINE_FIXME("driver '%s' is not in the list, please report!\n", driver);
}
static void initAudioDeviceTree(HWND hDlg)
More information about the wine-cvs
mailing list