1 /* -*- Mode: C; tab-width: 4 -*- 2 * 3 * Copyright (c) 1997-2004 Apple Computer, Inc. All rights reserved. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 #include "WinServices.h" 19 #include <DebugServices.h> 20 21 22 //=========================================================================================================================== 23 // UTF8StringToStringObject 24 //=========================================================================================================================== 25 26 OSStatus UTF8StringToStringObject( const char *inUTF8, CString &inObject ) 27 { 28 OSStatus err; 29 int n; 30 BSTR unicode; 31 32 unicode = NULL; 33 34 n = MultiByteToWideChar( CP_UTF8, 0, inUTF8, -1, NULL, 0 ); 35 if( n > 0 ) 36 { 37 unicode = (BSTR) malloc( (size_t)( n * sizeof( wchar_t ) ) ); 38 if( !unicode ) 39 { 40 err = ERROR_INSUFFICIENT_BUFFER; 41 goto exit; 42 } 43 44 n = MultiByteToWideChar( CP_UTF8, 0, inUTF8, -1, unicode, n ); 45 try 46 { 47 inObject = unicode; 48 } 49 catch( ... ) 50 { 51 err = ERROR_NO_UNICODE_TRANSLATION; 52 goto exit; 53 } 54 } 55 else 56 { 57 inObject = ""; 58 } 59 err = ERROR_SUCCESS; 60 61 exit: 62 if( unicode ) 63 { 64 free( unicode ); 65 } 66 return( err ); 67 } 68 69 70 //=========================================================================================================================== 71 // UTF8StringToStringObject 72 //=========================================================================================================================== 73 74 OSStatus 75 StringObjectToUTF8String( CString &inObject, char* outUTF8, size_t outUTF8Len ) 76 { 77 OSStatus err = kNoErr; 78 79 memset( outUTF8, 0, outUTF8Len ); 80 81 if ( inObject.GetLength() > 0 ) 82 { 83 size_t size; 84 85 size = (size_t) WideCharToMultiByte( CP_UTF8, 0, inObject.GetBuffer(), inObject.GetLength(), outUTF8, (int) outUTF8Len, NULL, NULL); 86 err = translate_errno( size != 0, GetLastError(), kUnknownErr ); 87 require_noerr( err, exit ); 88 } 89 90 exit: 91 92 return err; 93 } 94