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