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