CFStringRefをSVに変換
追記: id:tokuhirom先生に添削してもらった。
- malloc使うべからず -> NewXX()系でアロケート、SafeFree()で解放すべし(そういえばid:hirose31さんも言ってた)
- newSVpvの第二引数(STRLEN)は明示的に指定すべし -> 0で自動計算は\0 終端前提
SV * getString(CFStringRef var) { char *buf; SV *sv; CFIndex len = CFStringGetLength(val); CFIndex max = CFStringGetMaximumSizeForEncoding(len, kCFStringEncodingUTF8); buf = Newxz(max + 1); CFStringGetCString(val, buf, max + 1, kCFStringEncodingUTF8); CFRelease(val); sv = newSVpv(buf, max); SafeFree(buf); return sv; }