Home | History | Annotate | Download | only in mDNSWindows
      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