Ken Thomases : winecoreaudio: Avoid an extra copy/conversion of a string.

Alexandre Julliard julliard at winehq.org
Fri Oct 21 11:01:59 CDT 2011


Module: wine
Branch: master
Commit: cf390232089a53bd3adcc5364e0da95599aa80ae
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=cf390232089a53bd3adcc5364e0da95599aa80ae

Author: Ken Thomases <ken at codeweavers.com>
Date:   Thu Oct 20 23:24:12 2011 -0500

winecoreaudio: Avoid an extra copy/conversion of a string.

---

 dlls/winecoreaudio.drv/mmdevdrv.c |   17 +++++------------
 1 files changed, 5 insertions(+), 12 deletions(-)

diff --git a/dlls/winecoreaudio.drv/mmdevdrv.c b/dlls/winecoreaudio.drv/mmdevdrv.c
index 8d1e046..6842b7e 100644
--- a/dlls/winecoreaudio.drv/mmdevdrv.c
+++ b/dlls/winecoreaudio.drv/mmdevdrv.c
@@ -325,7 +325,6 @@ HRESULT WINAPI AUDDRV_GetEndpointIDs(EDataFlow flow, WCHAR ***ids,
         AudioBufferList *buffers;
         CFStringRef name;
         SIZE_T len;
-        char nameA[256];
         int j;
 
         addr.mSelector = kAudioDevicePropertyStreamConfiguration;
@@ -384,18 +383,10 @@ HRESULT WINAPI AUDDRV_GetEndpointIDs(EDataFlow flow, WCHAR ***ids,
             continue;
         }
 
-        if(!CFStringGetCString(name, nameA, sizeof(nameA),
-                    kCFStringEncodingUTF8)){
-            WARN("Error converting string to UTF8\n");
-            CFRelease(name);
-            continue;
-        }
-
-        CFRelease(name);
-
-        len = MultiByteToWideChar(CP_UNIXCP, 0, nameA, -1, NULL, 0);
+        len = CFStringGetLength(name) + 1;
         (*ids)[*num] = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
         if(!(*ids)[*num]){
+            CFRelease(name);
             HeapFree(GetProcessHeap(), 0, devices);
             for(j = 0; j < *num; ++j){
                 HeapFree(GetProcessHeap(), 0, (*ids)[j]);
@@ -405,7 +396,9 @@ HRESULT WINAPI AUDDRV_GetEndpointIDs(EDataFlow flow, WCHAR ***ids,
             HeapFree(GetProcessHeap(), 0, *keys);
             return E_OUTOFMEMORY;
         }
-        MultiByteToWideChar(CP_UNIXCP, 0, nameA, -1, (*ids)[*num], len);
+        CFStringGetCharacters(name, CFRangeMake(0, len - 1), (UniChar*)(*ids)[*num]);
+        ((*ids)[*num])[len - 1] = 0;
+        CFRelease(name);
 
         (*keys)[*num] = HeapAlloc(GetProcessHeap(), 0, sizeof(AudioDeviceID));
         if(!(*keys)[*num]){




More information about the wine-cvs mailing list