In that case you don't need the if (!err) condition to free the buffer otherwise you leak the string return by strdup.<br><br>Christian<br><br><div class="gmail_quote">2012/2/1 Lauri Kenttä <span dir="ltr"><<a href="mailto:lauri.kentta@gmail.com">lauri.kentta@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">---<br>
 dlls/winealsa.drv/mmdevdrv.c |   10 +++++++---<br>
 1 files changed, 7 insertions(+), 3 deletions(-)<br>
<br>
diff --git a/dlls/winealsa.drv/mmdevdrv.c b/dlls/winealsa.drv/mmdevdrv.c<br>
index 0bedcc5..e434038 100644<br>
--- a/dlls/winealsa.drv/mmdevdrv.c<br>
+++ b/dlls/winealsa.drv/mmdevdrv.c<br>
@@ -363,7 +363,7 @@ static HRESULT alsa_enum_devices(EDataFlow flow, WCHAR **ids, char **keys,<br>
     for(err = snd_card_next(&card); card != -1 && err >= 0;<br>
             err = snd_card_next(&card)){<br>
         char cardpath[64];<br>
-        const char *cardname;<br>
+        char *cardname;<br>
         WCHAR *cardnameW;<br>
         snd_ctl_t *ctl;<br>
         DWORD len;<br>
@@ -376,16 +376,18 @@ static HRESULT alsa_enum_devices(EDataFlow flow, WCHAR **ids, char **keys,<br>
             continue;<br>
         }<br>
<br>
-        if((err = snd_card_get_name(card, (char **)&cardname)) < 0){<br>
+        if((err = snd_card_get_name(card, &cardname)) < 0){<br>
             WARN("Unable to get card name for ALSA device %s: %d (%s)\n",<br>
                     cardpath, err, snd_strerror(err));<br>
             /* FIXME: Should be localized */<br>
-            cardname = "Unknown soundcard";<br>
+            cardname = strdup("Unknown soundcard");<br>
         }<br>
<br>
         len = MultiByteToWideChar(CP_UNIXCP, 0, cardname, -1, NULL, 0);<br>
         cardnameW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));<br>
         if(!cardnameW){<br>
+            if(!err)<br>
+                free(cardname);<br>
             snd_ctl_close(ctl);<br>
             return E_OUTOFMEMORY;<br>
         }<br>
@@ -394,6 +396,8 @@ static HRESULT alsa_enum_devices(EDataFlow flow, WCHAR **ids, char **keys,<br>
         alsa_get_card_devices(stream, ids, keys, num, ctl, card, cardnameW);<br>
<br>
         HeapFree(GetProcessHeap(), 0, cardnameW);<br>
+        if(!err)<br>
+            free(cardname);<br>
<br>
         snd_ctl_close(ctl);<br>
     }<br>
<font color="#888888">--<br>
1.7.9<br>
<br>
<br>
<br>
</font></blockquote></div><br>