From a87868c1f5c7e1b8e0c0653a981b6943a5c94074 Mon Sep 17 00:00:00 2001
From: Alejandro Wainzinger <aikawarazuni@gmail.com>
Date: Sun, 5 Dec 2010 17:27:27 -0800
Subject: [PATCH] Change device name string handling to use safe conversion to
 CString (Was causing issues on OSX 10.6.5 Japanese) (cherry picked from
 commit 17fb7abb8c88bf9ae45bff349d473e9224e8174e)

---
 rtaudio/RtAudio.cpp | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/rtaudio/RtAudio.cpp b/rtaudio/RtAudio.cpp
index 69ac86f40..ab158b4af 100644
--- a/rtaudio/RtAudio.cpp
+++ b/rtaudio/RtAudio.cpp
@@ -558,7 +558,14 @@ RtAudio::DeviceInfo RtApiCore :: getDeviceInfo( unsigned int device )
     return info;
   }
 
-  const char *mname = CFStringGetCStringPtr( cfname, CFStringGetSystemEncoding() );
+  CFIndex numbytes_cfname = CFStringGetMaximumSizeOfFileSystemRepresentation( cfname );
+  if( numbytes_cfname == 0 )
+    numbytes_cfname=256;
+  char mname[numbytes_cfname];
+
+  if(! CFStringGetCString( cfname, mname,numbytes_cfname,CFStringGetSystemEncoding() ) )
+    strcpy(mname,"");
+
   info.name.append( (const char *)mname, strlen(mname) );
   info.name.append( ": " );
   CFRelease( cfname );
@@ -572,7 +579,13 @@ RtAudio::DeviceInfo RtApiCore :: getDeviceInfo( unsigned int device )
     return info;
   }
 
-  const char *name = CFStringGetCStringPtr( cfname, CFStringGetSystemEncoding() );
+  numbytes_cfname = CFStringGetMaximumSizeOfFileSystemRepresentation( cfname );
+  if( numbytes_cfname == 0 )
+    numbytes_cfname=256;
+  char name[numbytes_cfname];
+  if(! CFStringGetCString( cfname, name,numbytes_cfname,CFStringGetSystemEncoding() ) )
+    strcpy(mname,"");
+
   info.name.append( (const char *)name, strlen(name) );
   CFRelease( cfname );