Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
unicode.c
Abstract:
Simplified Unicode-Ansi conversion functions.
Author:
Jim Schmidt (jimschm) 03-Aug-2001
Revision History:
<alias> <date> <comments>
--*/
#include "pch.h"
#include "commonp.h"
static WORD g_GlobalCodePage = CP_ACP; static DWORD g_WToAFlags; static DWORD g_AToWFlags;
PWSTR SzConvertBufferBytesAToW ( OUT PWSTR OutputBuffer, IN PCSTR InputString, IN UINT ByteCountInclNul ) { INT rc; DWORD flags;
if (g_GlobalCodePage == CP_UTF8) { flags = 0; } else { flags = g_AToWFlags; }
rc = MultiByteToWideChar ( g_GlobalCodePage, flags, InputString, ByteCountInclNul, OutputBuffer, ByteCountInclNul * 2 );
if (!rc && ByteCountInclNul) { return NULL; }
return OutputBuffer + rc; }
PSTR SzConvertBufferBytesWToA ( OUT PSTR OutputBuffer, IN PCWSTR InputString, IN UINT ByteCountInclNul ) { INT rc; DWORD flags; UINT logicalChars;
if (g_GlobalCodePage == CP_UTF8) { flags = 0; } else { flags = g_WToAFlags; }
logicalChars = ByteCountInclNul / sizeof (WCHAR);
rc = WideCharToMultiByte ( g_GlobalCodePage, flags, InputString, logicalChars, OutputBuffer, logicalChars * 3, NULL, NULL );
if (!rc && logicalChars) { return NULL; }
return (PSTR) ((PBYTE) OutputBuffer + rc); }
PWSTR RealSzConvertBytesAToW ( IN PCSTR AnsiString, IN UINT ByteCountInclNul ) { PWSTR alloc; PWSTR result; DWORD error;
alloc = SzAllocW (ByteCountInclNul); result = SzConvertBufferBytesAToW (alloc, AnsiString, ByteCountInclNul);
if (!result) { error = GetLastError(); SzFreeW (alloc); SetLastError (error); }
return alloc; }
PSTR RealSzConvertBytesWToA ( IN PCWSTR UnicodeString, IN UINT ByteCountInclNul ) { PSTR alloc; PSTR result; DWORD error; UINT logicalChars;
logicalChars = ByteCountInclNul / sizeof (WCHAR);
alloc = SzAllocA (logicalChars); result = SzConvertBufferBytesWToA (alloc, UnicodeString, ByteCountInclNul);
if (!result) { error = GetLastError(); SzFreeA (alloc); SetLastError (error); }
return alloc; }
|