home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Windows Gam…ming Gurus (2nd Edition)
/
Disc2.iso
/
vc98
/
crt
/
src
/
wsetloca.c
< prev
next >
Wrap
C/C++ Source or Header
|
1998-06-17
|
2KB
|
72 lines
/***
*wsetlocal.c - Contains the setlocale function (wchar_t version)
*
* Copyright (c) 1993-1997, Microsoft Corporation. All rights reserved.
*
*Purpose:
* Contains the _wsetlocale() function.
*
*******************************************************************************/
#include <wchar.h>
#include <stdlib.h>
#include <setlocal.h>
#include <locale.h>
#include <dbgint.h>
wchar_t * __cdecl _wsetlocale (
int _category,
const wchar_t *_wlocale
)
{
int size;
char *inlocale = NULL;
char *outlocale;
static wchar_t *outwlocale = NULL;
/* convert WCS string into ASCII string */
if (_wlocale)
{
size = wcslen(_wlocale) + 1;
if (NULL == (inlocale = (char *)_malloc_crt(size * sizeof(char))))
return NULL;
if (-1 == wcstombs(inlocale, _wlocale, size))
{
_free_crt (inlocale);
return NULL;
}
}
/* set the locale and get ASCII return string */
outlocale = setlocale(_category, inlocale);
_free_crt (inlocale);
if (NULL == outlocale)
return NULL;
/* get space for WCS return value */
_free_crt(outwlocale);
if (-1 == (size = mbstowcs(NULL, outlocale, 0)))
return NULL;
size++;
if (NULL == (outwlocale = (wchar_t *)_malloc_crt(size * sizeof(wchar_t))))
return NULL;
/* convert return value to WCS */
if (-1 == mbstowcs(outwlocale, outlocale, size))
{
_free_crt(outwlocale);
return NULL;
}
return outwlocale;
}