[ros-diffs] [janderwald] 51286: [SNDVOL32] - Always write line states configuration values in one step - Fixes the problem when old line state settings were not present - Advantage is that it is faster and snd...

janderwald at svn.reactos.org janderwald at svn.reactos.org
Fri Apr 8 22:04:41 UTC 2011


Author: janderwald
Date: Fri Apr  8 22:04:41 2011
New Revision: 51286

URL: http://svn.reactos.org/svn/reactos?rev=51286&view=rev
Log:
[SNDVOL32]
- Always write line states configuration values in one step
- Fixes the problem when old line state settings were not present
- Advantage is that it is faster and sndvol32 now works in ReactOS

Modified:
    trunk/reactos/base/applications/sndvol32/misc.c
    trunk/reactos/base/applications/sndvol32/sndvol32.c
    trunk/reactos/base/applications/sndvol32/sndvol32.h

Modified: trunk/reactos/base/applications/sndvol32/misc.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/sndvol32/misc.c?rev=51286&r1=51285&r2=51286&view=diff
==============================================================================
--- trunk/reactos/base/applications/sndvol32/misc.c [iso-8859-1] (original)
+++ trunk/reactos/base/applications/sndvol32/misc.c [iso-8859-1] Fri Apr  8 22:04:41 2011
@@ -160,8 +160,43 @@
 BOOL
 WriteLineConfig(IN LPTSTR szDeviceName,
                 IN LPTSTR szLineName,
-                IN LPTSTR szControlName,
-                IN DWORD Flags)
+                IN PSNDVOL_REG_LINESTATE LineState,
+                IN DWORD cbSize)
+{
+    HKEY hLineKey;
+    TCHAR szDevRegKey[MAX_PATH];
+    BOOL Ret = FALSE;
+
+    _stprintf(szDevRegKey,
+              TEXT("%s\\%s"),
+              szDeviceName,
+              szLineName);
+
+    if (RegCreateKeyEx(hAppSettingsKey,
+                       szDevRegKey,
+                       0,
+                       NULL,
+                       REG_OPTION_NON_VOLATILE,
+                       KEY_READ | KEY_WRITE,
+                       NULL,
+                       &hLineKey,
+                       NULL) == ERROR_SUCCESS)
+    {
+        /* now update line states */
+        RegSetValueEx(hLineKey, LineStatesValue, 0, REG_BINARY, (const BYTE*)LineState, cbSize);
+        Ret = TRUE;
+
+        RegCloseKey(hLineKey);
+    }
+
+    return Ret;
+}
+
+BOOL
+ReadLineConfig(IN LPTSTR szDeviceName,
+               IN LPTSTR szLineName,
+               IN LPTSTR szControlName,
+               OUT DWORD *Flags)
 {
     HKEY hLineKey;
     DWORD Type;
@@ -221,16 +256,10 @@
                 if (!_tcscmp(szControlName,
                              LineStates[i].LineName))
                 {
-                    LineStates[i].Flags = Flags;
+                    *Flags = LineStates[i].Flags;
                     Ret = TRUE;
                     break;
                 }
-            }
-
-            /* now update line states */
-            if (Ret)
-            {
-                RegSetValueEx(hLineKey, LineStatesValue, 0, REG_BINARY, (const BYTE*)LineStates, Size);
             }
         }
 
@@ -242,89 +271,4 @@
     }
 
     return Ret;
-
-
-
-
-}
-
-BOOL
-ReadLineConfig(IN LPTSTR szDeviceName,
-               IN LPTSTR szLineName,
-               IN LPTSTR szControlName,
-               OUT DWORD *Flags)
-{
-    HKEY hLineKey;
-    DWORD Type;
-    DWORD i, Size = 0;
-    PSNDVOL_REG_LINESTATE LineStates = NULL;
-    TCHAR szDevRegKey[MAX_PATH];
-    BOOL Ret = FALSE;
-
-    _stprintf(szDevRegKey,
-              TEXT("%s\\%s"),
-              szDeviceName,
-              szLineName);
-
-    if (RegCreateKeyEx(hAppSettingsKey,
-                       szDevRegKey,
-                       0,
-                       NULL,
-                       REG_OPTION_NON_VOLATILE,
-                       KEY_READ | KEY_WRITE,
-                       NULL,
-                       &hLineKey,
-                       NULL) == ERROR_SUCCESS)
-    {
-        if (RegQueryValueEx(hLineKey,
-                            LineStatesValue,
-                            NULL,
-                            &Type,
-                            NULL,
-                            &Size) != ERROR_SUCCESS ||
-            Type != REG_BINARY ||
-            Size == 0 || (Size % sizeof(SNDVOL_REG_LINESTATE) != 0))
-        {
-            goto ExitClose;
-        }
-
-        LineStates = HeapAlloc(GetProcessHeap(),
-                               HEAP_ZERO_MEMORY,
-                               Size);
-
-        if (LineStates != NULL)
-        {
-            if (RegQueryValueEx(hLineKey,
-                                LineStatesValue,
-                                NULL,
-                                &Type,
-                                (LPBYTE)LineStates,
-                                &Size) != ERROR_SUCCESS ||
-                Type != REG_BINARY ||
-                Size == 0 || (Size % sizeof(SNDVOL_REG_LINESTATE) != 0))
-            {
-                goto ExitClose;
-            }
-
-            /* try to find the control */
-            for (i = 0; i < Size / sizeof(SNDVOL_REG_LINESTATE); i++)
-            {
-                if (!_tcscmp(szControlName,
-                             LineStates[i].LineName))
-                {
-                    *Flags = LineStates[i].Flags;
-                    Ret = TRUE;
-                    break;
-                }
-            }
-        }
-
-ExitClose:
-        HeapFree(GetProcessHeap(),
-                 0,
-                 LineStates);
-        RegCloseKey(hLineKey);
-    }
-
-    return Ret;
-}
+}

Modified: trunk/reactos/base/applications/sndvol32/sndvol32.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/sndvol32/sndvol32.c?rev=51286&r1=51285&r2=51286&view=diff
==============================================================================
--- trunk/reactos/base/applications/sndvol32/sndvol32.c [iso-8859-1] (original)
+++ trunk/reactos/base/applications/sndvol32/sndvol32.c [iso-8859-1] Fri Apr  8 22:04:41 2011
@@ -347,6 +347,7 @@
     WCHAR LineName[MIXER_LONG_NAME_CHARS];
     WCHAR DestinationName[MIXER_LONG_NAME_CHARS];
     DWORD Flags;
+    PSNDVOL_REG_LINESTATE LineStates;
 
     /* get list view */
     hwndControls = GetDlgItem(hwndDlg, IDC_CONTROLS);
@@ -364,6 +365,14 @@
     }
 
     /* allocate line states array */
+    LineStates = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(SNDVOL_REG_LINESTATE) * Count);
+    if (LineStates == NULL)
+    {
+        /* failed to allocate line states array */
+        return;
+    }
+
+
     for(Index = 0; Index < Count; Index++)
     {
         /* set to empty */
@@ -378,11 +387,18 @@
         /* get check state */
         Flags = (ListView_GetCheckState(hwndControls, Index) == 0 ? 0x4 : 0);
 
-        /* write configuration */
-        WriteLineConfig(Preferences.DeviceName, DestinationName, LineName, Flags);
-    }
-
-
+        /* copy line name */
+        wcscpy(LineStates[Index].LineName, LineName);
+
+        /* store flags */
+        LineStates[Index].Flags = Flags;
+    }
+
+    /* now write the line config */
+    WriteLineConfig(Preferences.DeviceName, DestinationName, LineStates, sizeof(SNDVOL_REG_LINESTATE) * Count);
+
+    /* free line states */
+    HeapFree(GetProcessHeap(), 0, LineStates);
 }
 
 static INT_PTR CALLBACK

Modified: trunk/reactos/base/applications/sndvol32/sndvol32.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/sndvol32/sndvol32.h?rev=51286&r1=51285&r2=51286&view=diff
==============================================================================
--- trunk/reactos/base/applications/sndvol32/sndvol32.h [iso-8859-1] (original)
+++ trunk/reactos/base/applications/sndvol32/sndvol32.h [iso-8859-1] Fri Apr  8 22:04:41 2011
@@ -160,7 +160,7 @@
 BOOL
 WriteLineConfig(IN LPTSTR szDeviceName,
                 IN LPTSTR szLineName,
-                IN LPTSTR szControlName,
-                IN DWORD Flags);
+                IN PSNDVOL_REG_LINESTATE LineState,
+                IN DWORD cbSize);
 
 #endif /* __SNDVOL32_H */




More information about the Ros-diffs mailing list