xref: /aosp_15_r20/external/mdnsresponder/mDNSWindows/DLL.NET/PString.h (revision 48a54d368dc4fa860885eef7b70b6c53499e7c25)
1*48a54d36SAndroid Build Coastguard Worker /* -*- Mode: C; tab-width: 4 -*-
2*48a54d36SAndroid Build Coastguard Worker  *
3*48a54d36SAndroid Build Coastguard Worker  * Copyright (c) 2003-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 #pragma once
19*48a54d36SAndroid Build Coastguard Worker 
20*48a54d36SAndroid Build Coastguard Worker using namespace System;
21*48a54d36SAndroid Build Coastguard Worker using namespace System::Text;
22*48a54d36SAndroid Build Coastguard Worker 
23*48a54d36SAndroid Build Coastguard Worker namespace Apple
24*48a54d36SAndroid Build Coastguard Worker {
25*48a54d36SAndroid Build Coastguard Worker 	__gc class PString
26*48a54d36SAndroid Build Coastguard Worker 	{
27*48a54d36SAndroid Build Coastguard Worker 	public:
28*48a54d36SAndroid Build Coastguard Worker 
PString(String * string)29*48a54d36SAndroid Build Coastguard Worker 		PString(String* string)
30*48a54d36SAndroid Build Coastguard Worker 		{
31*48a54d36SAndroid Build Coastguard Worker 			if (string != NULL)
32*48a54d36SAndroid Build Coastguard Worker 			{
33*48a54d36SAndroid Build Coastguard Worker 				Byte unicodeBytes[] = Encoding::Unicode->GetBytes(string);
34*48a54d36SAndroid Build Coastguard Worker 				Byte utf8Bytes[] = Encoding::Convert(Encoding::Unicode, Encoding::UTF8, unicodeBytes);
35*48a54d36SAndroid Build Coastguard Worker 				m_p = Marshal::AllocHGlobal(utf8Bytes->Length + 1);
36*48a54d36SAndroid Build Coastguard Worker 
37*48a54d36SAndroid Build Coastguard Worker 				Byte __pin * p = &utf8Bytes[0];
38*48a54d36SAndroid Build Coastguard Worker 				char * hBytes = static_cast<char*>(m_p.ToPointer());
39*48a54d36SAndroid Build Coastguard Worker 				memcpy(hBytes, p, utf8Bytes->Length);
40*48a54d36SAndroid Build Coastguard Worker 				hBytes[utf8Bytes->Length] = '\0';
41*48a54d36SAndroid Build Coastguard Worker 			}
42*48a54d36SAndroid Build Coastguard Worker 			else
43*48a54d36SAndroid Build Coastguard Worker 			{
44*48a54d36SAndroid Build Coastguard Worker 				m_p = NULL;
45*48a54d36SAndroid Build Coastguard Worker 			}
46*48a54d36SAndroid Build Coastguard Worker 		}
47*48a54d36SAndroid Build Coastguard Worker 
~PString()48*48a54d36SAndroid Build Coastguard Worker 		~PString()
49*48a54d36SAndroid Build Coastguard Worker 		{
50*48a54d36SAndroid Build Coastguard Worker 			Marshal::FreeHGlobal(m_p);
51*48a54d36SAndroid Build Coastguard Worker 		}
52*48a54d36SAndroid Build Coastguard Worker 
53*48a54d36SAndroid Build Coastguard Worker 		const char*
c_str()54*48a54d36SAndroid Build Coastguard Worker 		c_str()
55*48a54d36SAndroid Build Coastguard Worker 		{
56*48a54d36SAndroid Build Coastguard Worker 			if (m_p != NULL)
57*48a54d36SAndroid Build Coastguard Worker 			{
58*48a54d36SAndroid Build Coastguard Worker 				return static_cast<const char*>(m_p.ToPointer());
59*48a54d36SAndroid Build Coastguard Worker 			}
60*48a54d36SAndroid Build Coastguard Worker 			else
61*48a54d36SAndroid Build Coastguard Worker 			{
62*48a54d36SAndroid Build Coastguard Worker 				return NULL;
63*48a54d36SAndroid Build Coastguard Worker 			}
64*48a54d36SAndroid Build Coastguard Worker 		}
65*48a54d36SAndroid Build Coastguard Worker 
66*48a54d36SAndroid Build Coastguard Worker 	protected:
67*48a54d36SAndroid Build Coastguard Worker 
68*48a54d36SAndroid Build Coastguard Worker 		IntPtr m_p;
69*48a54d36SAndroid Build Coastguard Worker 	};
70*48a54d36SAndroid Build Coastguard Worker }
71