wine/dlls/crtdll/mbstring.c
Alexandre Julliard d229b98c61 Reimplemented multi-byte and wide-chars functions to not depend on
lstr* functions; added a few missing ones; fixed a couple of bugs.
1999-08-08 18:47:59 +00:00

75 lines
1.6 KiB
C

/*
* CRTDLL multi-byte string functions
*
* Copyright 1999 Alexandre Julliard
*/
#include "config.h"
#include <ctype.h>
#include <limits.h>
#include <stdlib.h>
#include <string.h>
#ifdef HAVE_WCTYPE_H
#include <wctype.h>
#endif
#include "windef.h"
#include "crtdll.h"
/*********************************************************************
* CRTDLL__mbsinc (CRTDLL.205)
*/
LPSTR __cdecl CRTDLL__mbsinc( LPCSTR str )
{
int len = mblen( str, MB_LEN_MAX );
if (len < 1) len = 1;
return (LPSTR)(str + len);
}
/*********************************************************************
* CRTDLL__mbslen (CRTDLL.206)
*/
INT __cdecl CRTDLL__mbslen( LPCSTR str )
{
INT len, total = 0;
while ((len = mblen( str, MB_LEN_MAX )) > 0)
{
str += len;
total++;
}
return total;
}
/*********************************************************************
* CRTDLL_mbstowcs (CRTDLL.429)
*/
INT __cdecl CRTDLL_mbstowcs( LPWSTR dst, LPCSTR src, INT n )
{
wchar_t *buffer, *p;
int ret;
if (!(buffer = CRTDLL_malloc( n * sizeof(wchar_t) ))) return -1;
ret = mbstowcs( buffer, src, n );
if (ret < n) n = ret + 1; /* nb of chars to copy (including terminating null) */
p = buffer;
while (n-- > 0) *dst++ = (WCHAR)*p++;
CRTDLL_free( buffer );
return ret;
}
/*********************************************************************
* CRTDLL_mbtowc (CRTDLL.430)
*/
INT __cdecl CRTDLL_mbtowc( WCHAR *dst, LPCSTR str, INT n )
{
wchar_t res;
int ret = mbtowc( &res, str, n );
if (dst) *dst = (WCHAR)res;
return ret;
}