mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 10:04:49 +00:00
Untested raw implementation of MultiByteToWideChar().
svn path=/trunk/; revision=986
This commit is contained in:
parent
3cd2fc22d7
commit
f0175145d6
1 changed files with 152 additions and 4 deletions
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: stubs.c,v 1.11 1999/12/26 15:50:44 dwelch Exp $
|
/* $Id: stubs.c,v 1.12 2000/02/14 22:10:46 ea Exp $
|
||||||
*
|
*
|
||||||
* KERNEL32.DLL stubs (unimplemented functions)
|
* KERNEL32.DLL stubs (unimplemented functions)
|
||||||
* Remove from this file, if you implement them.
|
* Remove from this file, if you implement them.
|
||||||
|
@ -2878,7 +2878,69 @@ MulDiv (
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
/**********************************************************************
|
||||||
|
* NAME PRIVATE
|
||||||
|
* IsInstalledCP@4
|
||||||
|
*
|
||||||
|
* RETURN VALUE
|
||||||
|
* TRUE if CodePage is installed in the system.
|
||||||
|
*/
|
||||||
|
static
|
||||||
|
BOOL
|
||||||
|
STDCALL
|
||||||
|
IsInstalledCP (
|
||||||
|
UINT CodePage
|
||||||
|
)
|
||||||
|
{
|
||||||
|
/* FIXME */
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* NAME EXPORTED
|
||||||
|
* MultiByteToWideChar@24
|
||||||
|
*
|
||||||
|
* ARGUMENTS
|
||||||
|
* CodePage
|
||||||
|
* CP_ACP ANSI code page
|
||||||
|
* CP_MACCP Macintosh code page
|
||||||
|
* CP_OEMCP OEM code page
|
||||||
|
* (UINT) Any installed code page
|
||||||
|
*
|
||||||
|
* dwFlags
|
||||||
|
* MB_PRECOMPOSED
|
||||||
|
* MB_COMPOSITE
|
||||||
|
* MB_ERR_INVALID_CHARS
|
||||||
|
* MB_USEGLYPHCHARS
|
||||||
|
*
|
||||||
|
* lpMultiByteStr
|
||||||
|
* Input buffer;
|
||||||
|
*
|
||||||
|
* cchMultiByte
|
||||||
|
* Size of MultiByteStr, or -1 if MultiByteStr is
|
||||||
|
* NULL terminated;
|
||||||
|
*
|
||||||
|
* lpWideCharStr
|
||||||
|
* Output buffer;
|
||||||
|
*
|
||||||
|
* cchWideChar
|
||||||
|
* Size (in WCHAR unit) of WideCharStr, or 0
|
||||||
|
* if the caller just wants to know how large
|
||||||
|
* WideCharStr should be for a successful
|
||||||
|
* conversion.
|
||||||
|
*
|
||||||
|
* RETURN VALUE
|
||||||
|
* 0 on error; otherwise the number of WCHAR written
|
||||||
|
* in the WideCharStr buffer.
|
||||||
|
*
|
||||||
|
* NOTE
|
||||||
|
* A raw converter for now. It assumes lpMultiByteStr is
|
||||||
|
* NEVER multi-byte (that is each input character is
|
||||||
|
* 8-bit ASCII) and is ALWAYS NULL terminated.
|
||||||
|
* FIXME-FIXME-FIXME-FIXME
|
||||||
|
*/
|
||||||
|
INT
|
||||||
STDCALL
|
STDCALL
|
||||||
MultiByteToWideChar (
|
MultiByteToWideChar (
|
||||||
UINT CodePage,
|
UINT CodePage,
|
||||||
|
@ -2889,8 +2951,94 @@ MultiByteToWideChar (
|
||||||
int cchWideChar
|
int cchWideChar
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
int InStringLength = 0;
|
||||||
return 0;
|
BOOL InIsNullTerminated = TRUE;
|
||||||
|
PCHAR r;
|
||||||
|
PWCHAR w;
|
||||||
|
int cchConverted;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check the parameters.
|
||||||
|
*/
|
||||||
|
if ( /* --- CODE PAGE --- */
|
||||||
|
( (CP_ACP != CodePage)
|
||||||
|
&& (CP_MACCP != CodePage)
|
||||||
|
&& (CP_OEMCP != CodePage)
|
||||||
|
&& (FALSE == IsInstalledCP (CodePage))
|
||||||
|
)
|
||||||
|
/* --- FLAGS --- */
|
||||||
|
|| (dwFlags ^ ( MB_PRECOMPOSED
|
||||||
|
| MB_COMPOSITE
|
||||||
|
| MB_ERR_INVALID_CHARS
|
||||||
|
| MB_USEGLYPHCHARS
|
||||||
|
)
|
||||||
|
)
|
||||||
|
/* --- INPUT BUFFER --- */
|
||||||
|
|| (NULL == lpMultiByteStr)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
SetLastError (ERROR_INVALID_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Compute the input buffer length.
|
||||||
|
*/
|
||||||
|
if (-1 == cchMultiByte)
|
||||||
|
{
|
||||||
|
InStringLength = lstrlen (lpMultiByteStr);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
InIsNullTerminated = FALSE;
|
||||||
|
InStringLength = cchMultiByte;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Does caller query for output
|
||||||
|
* buffer size?
|
||||||
|
*/
|
||||||
|
if (0 == cchWideChar)
|
||||||
|
{
|
||||||
|
SetLastError (ERROR_SUCCESS);
|
||||||
|
return InStringLength;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Is space provided for the translated
|
||||||
|
* string enough?
|
||||||
|
*/
|
||||||
|
if (cchWideChar < InStringLength)
|
||||||
|
{
|
||||||
|
SetLastError (ERROR_INSUFFICIENT_BUFFER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Raw 8- to 16-bit conversion.
|
||||||
|
*/
|
||||||
|
for ( cchConverted = 0,
|
||||||
|
r = (PCHAR) lpMultiByteStr,
|
||||||
|
w = (PWCHAR) lpWideCharStr;
|
||||||
|
|
||||||
|
((*r) && (cchConverted < cchWideChar));
|
||||||
|
|
||||||
|
r++,
|
||||||
|
cchConverted++
|
||||||
|
)
|
||||||
|
{
|
||||||
|
*w = (WCHAR) *r;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Is the input string NULL terminated?
|
||||||
|
*/
|
||||||
|
if (TRUE == InIsNullTerminated)
|
||||||
|
{
|
||||||
|
*w = L'\0';
|
||||||
|
++cchConverted;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Return how many characters we
|
||||||
|
* wrote in the output buffer.
|
||||||
|
*/
|
||||||
|
SetLastError (ERROR_SUCCESS);
|
||||||
|
return cchConverted;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue