reactos/sdk/lib/crt/string/_mbstrnlen.c

54 lines
1.1 KiB
C

/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS CRT
* PURPOSE: Implementation of _mbstrnlen
* FILE: lib/sdk/crt/string/_mbstrnlen.c
* PROGRAMMER: Timo Kreuzer
*/
#include <precomp.h>
#include <mbctype.h>
#include <specstrings.h>
_Success_(return>0)
_Check_return_
_CRTIMP
size_t
__cdecl
_mbstrnlen(
_In_z_ const char *pmbstr,
_In_ size_t cjMaxLen)
{
size_t cchCount = 0;
unsigned char jMbsByte;
/* Check parameters */
if (!MSVCRT_CHECK_PMT((pmbstr != 0)) && (cjMaxLen <= INT_MAX))
{
_set_errno(EINVAL);
return -1;
}
/* Loop while we have bytes to process */
while (cjMaxLen-- > 0)
{
/* Get next mb byte */
jMbsByte = *pmbstr++;
/* If this is 0, we're done */
if (jMbsByte == 0) break;
/* if this is a lead byte, continue with next char */
if (_ismbblead(jMbsByte))
{
// FIXME: check if this is a valid char.
continue;
}
/* Count this character */
cchCount++;
}
return cchCount;
}