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
UTF8StringToStringObject(const char * inUTF8,CString & inObject)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
StringObjectToUTF8String(CString & inObject,char * outUTF8,size_t outUTF8Len)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