summaryrefslogtreecommitdiffstats
path: root/mDNSResponder/mDNSWindows/WinServices.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'mDNSResponder/mDNSWindows/WinServices.cpp')
-rw-r--r--mDNSResponder/mDNSWindows/WinServices.cpp93
1 files changed, 93 insertions, 0 deletions
diff --git a/mDNSResponder/mDNSWindows/WinServices.cpp b/mDNSResponder/mDNSWindows/WinServices.cpp
new file mode 100644
index 00000000..e47c4688
--- /dev/null
+++ b/mDNSResponder/mDNSWindows/WinServices.cpp
@@ -0,0 +1,93 @@
+/* -*- Mode: C; tab-width: 4 -*-
+ *
+ * Copyright (c) 1997-2004 Apple Computer, Inc. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "WinServices.h"
+#include <DebugServices.h>
+
+
+//===========================================================================================================================
+// UTF8StringToStringObject
+//===========================================================================================================================
+
+OSStatus UTF8StringToStringObject( const char *inUTF8, CString &inObject )
+{
+ OSStatus err;
+ int n;
+ BSTR unicode;
+
+ unicode = NULL;
+
+ n = MultiByteToWideChar( CP_UTF8, 0, inUTF8, -1, NULL, 0 );
+ if( n > 0 )
+ {
+ unicode = (BSTR) malloc( (size_t)( n * sizeof( wchar_t ) ) );
+ if( !unicode )
+ {
+ err = ERROR_INSUFFICIENT_BUFFER;
+ goto exit;
+ }
+
+ n = MultiByteToWideChar( CP_UTF8, 0, inUTF8, -1, unicode, n );
+ try
+ {
+ inObject = unicode;
+ }
+ catch( ... )
+ {
+ err = ERROR_NO_UNICODE_TRANSLATION;
+ goto exit;
+ }
+ }
+ else
+ {
+ inObject = "";
+ }
+ err = ERROR_SUCCESS;
+
+exit:
+ if( unicode )
+ {
+ free( unicode );
+ }
+ return( err );
+}
+
+
+//===========================================================================================================================
+// UTF8StringToStringObject
+//===========================================================================================================================
+
+OSStatus
+StringObjectToUTF8String( CString &inObject, char* outUTF8, size_t outUTF8Len )
+{
+ OSStatus err = kNoErr;
+
+ memset( outUTF8, 0, outUTF8Len );
+
+ if ( inObject.GetLength() > 0 )
+ {
+ size_t size;
+
+ size = (size_t) WideCharToMultiByte( CP_UTF8, 0, inObject.GetBuffer(), inObject.GetLength(), outUTF8, (int) outUTF8Len, NULL, NULL);
+ err = translate_errno( size != 0, GetLastError(), kUnknownErr );
+ require_noerr( err, exit );
+ }
+
+exit:
+
+ return err;
+}