[MMIXER]
authorJohannes Anderwald <johannes.anderwald@reactos.org>
Sat, 19 Dec 2009 20:45:29 +0000 (20:45 +0000)
committerJohannes Anderwald <johannes.anderwald@reactos.org>
Sat, 19 Dec 2009 20:45:29 +0000 (20:45 +0000)
- Fix broken check in MMixerAddMixerControl, which only copied the node name on failure
- Add initialization of LineControlsExtraDat LIST_ENTRY type, which resulted in a crash

svn path=/trunk/; revision=44659

reactos/lib/drivers/sound/mmixer/controls.c

index 5252a7b..a366067 100644 (file)
@@ -207,7 +207,8 @@ MMixerAddMixerControl(
 
         /* get node name */
         Status = MixerContext->Control(hDevice, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), (LPVOID)Name, BytesReturned, &BytesReturned);
 
         /* get node name */
         Status = MixerContext->Control(hDevice, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), (LPVOID)Name, BytesReturned, &BytesReturned);
-        if (Status != MM_STATUS_SUCCESS)
+
+        if (Status == MM_STATUS_SUCCESS)
         {
             MixerContext->Copy(MixerControl->szShortName, Name, (min(MIXER_SHORT_NAME_CHARS, wcslen(Name)+1)) * sizeof(WCHAR));
             MixerControl->szShortName[MIXER_SHORT_NAME_CHARS-1] = L'\0';
         {
             MixerContext->Copy(MixerControl->szShortName, Name, (min(MIXER_SHORT_NAME_CHARS, wcslen(Name)+1)) * sizeof(WCHAR));
             MixerControl->szShortName[MIXER_SHORT_NAME_CHARS-1] = L'\0';
@@ -300,7 +301,6 @@ MMixerAddMixerControl(
                 {
                     MixerContext->Free(Desc);
                     MixerContext->Free(VolumeData);
                 {
                     MixerContext->Free(Desc);
                     MixerContext->Free(VolumeData);
-
                     return MM_STATUS_NO_MEMORY;
                 }
 
                     return MM_STATUS_NO_MEMORY;
                 }
 
@@ -316,7 +316,6 @@ MMixerAddMixerControl(
        MixerContext->Free(Desc);
     }
 
        MixerContext->Free(Desc);
     }
 
-
     DPRINT("Status %x Name %S\n", Status, MixerControl->szName);
     return MM_STATUS_SUCCESS;
 }
     DPRINT("Status %x Name %S\n", Status, MixerControl->szName);
     return MM_STATUS_SUCCESS;
 }
@@ -594,6 +593,8 @@ MMixerCreateDestinationLine(
     DestinationLine->Line.Target.vDriverVersion = MixerInfo->MixCaps.vDriverVersion;
     wcscpy(DestinationLine->Line.Target.szPname, MixerInfo->MixCaps.szPname);
 
     DestinationLine->Line.Target.vDriverVersion = MixerInfo->MixCaps.vDriverVersion;
     wcscpy(DestinationLine->Line.Target.szPname, MixerInfo->MixCaps.szPname);
 
+    // initialize extra line
+    InitializeListHead(&DestinationLine->LineControlsExtraData);
 
     // insert into mixer info
     InsertHeadList(&MixerInfo->LineList, &DestinationLine->Entry);
 
     // insert into mixer info
     InsertHeadList(&MixerInfo->LineList, &DestinationLine->Entry);
@@ -988,7 +989,7 @@ MMixerSetupFilter(
     IN LPMIXER_DATA MixerData,
     IN PULONG DeviceCount)
 {
     IN LPMIXER_DATA MixerData,
     IN PULONG DeviceCount)
 {
-    PKSMULTIPLE_ITEM NodeTypes, NodeConnections;
+    PKSMULTIPLE_ITEM NodeTypes = NULL, NodeConnections = NULL;
     MIXER_STATUS Status;
     ULONG PinCount;
     ULONG NodeIndex;
     MIXER_STATUS Status;
     ULONG PinCount;
     ULONG NodeIndex;
@@ -1016,6 +1017,7 @@ MMixerSetupFilter(
     }
 
     // check if the filter has an wave out node
     }
 
     // check if the filter has an wave out node
+
     NodeIndex = MMixerGetIndexOfGuid(NodeTypes, &KSNODETYPE_DAC);
     if (NodeIndex != MAXULONG)
     {
     NodeIndex = MMixerGetIndexOfGuid(NodeTypes, &KSNODETYPE_DAC);
     if (NodeIndex != MAXULONG)
     {