|
|
/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
util.c
Abstract:
Utility functions.
Author:
Ovidiu Temereanca (ovidiut) 02-Jul-2000 Initial implementation
Revision History:
--*/
#include "pch.h"
VOID FreeString ( IN PVOID String ) { if (String) { HeapFree (GetProcessHeap (), 0, String); } }
PSTR pAllocAndConvertToAnsi ( IN PCWSTR Unicode, IN DWORD Size ) { PSTR ansi;
ansi = (PSTR) HeapAlloc (GetProcessHeap (), 0, Size); if (!ansi) { SetLastError (ERROR_NOT_ENOUGH_MEMORY); return NULL; }
if (!WideCharToMultiByte ( CP_ACP, 0, Unicode, Size, ansi, Size * sizeof (WCHAR), NULL, NULL )) { FreeString (ansi); return NULL; }
return ansi; }
PSTR ConvertToAnsiSz ( IN PCWSTR Unicode ) { DWORD size;
if (!Unicode) { SetLastError (ERROR_SUCCESS); return NULL; }
size = lstrlenW (Unicode) + 1;
return pAllocAndConvertToAnsi (Unicode, size); }
PSTR ConvertToAnsiMultiSz ( IN PCWSTR MultiSzUnicode ) { DWORD size; PCWSTR p;
if (!MultiSzUnicode) { SetLastError (ERROR_SUCCESS); return NULL; }
for (size = 1, p = MultiSzUnicode; *p; p = wcschr (p, 0) + 1) { size += lstrlenW (p) + 1; }
return pAllocAndConvertToAnsi (MultiSzUnicode, size); }
PWSTR pAllocAndConvertToUnicode ( IN PCSTR Ansi, IN DWORD Size ) { PWSTR unicode;
unicode = (PWSTR) HeapAlloc (GetProcessHeap (), 0, Size * sizeof (WCHAR)); if (!unicode) { SetLastError (ERROR_NOT_ENOUGH_MEMORY); return NULL; }
if (!MultiByteToWideChar ( CP_ACP, 0, Ansi, Size, unicode, Size )) { FreeString (unicode); unicode = NULL; }
return unicode; }
PWSTR ConvertToUnicodeSz ( IN PCSTR Ansi ) { DWORD size;
if (!Ansi) { SetLastError (ERROR_SUCCESS); return NULL; }
size = lstrlenA (Ansi) + 1;
return pAllocAndConvertToUnicode (Ansi, size); }
PWSTR ConvertToUnicodeMultiSz ( IN PCSTR MultiSzAnsi ) { DWORD size; PCSTR p;
if (!MultiSzAnsi) { SetLastError (ERROR_SUCCESS); return NULL; }
for (size = 1, p = MultiSzAnsi; *p; p = _mbschr (p, 0) + 1) { size += lstrlenA (p) + 1; }
return pAllocAndConvertToUnicode (MultiSzAnsi, size); }
|