diff --git a/reactos/lib/sdk/crt/string/_mbsnlen.c b/reactos/lib/sdk/crt/string/_mbsnlen.c new file mode 100644 index 00000000000..180b9b8ca0d --- /dev/null +++ b/reactos/lib/sdk/crt/string/_mbsnlen.c @@ -0,0 +1,36 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS CRT + * PURPOSE: Implementation of _mbsnlen + * FILE: lib/sdk/crt/string/_mbsnlen.c + * PROGRAMMER: Timo Kreuzer + */ + +#include + +_Check_return_ +_CRTIMP +size_t +__cdecl +_mbsnlen( + _In_z_ const unsigned char *pmbstr, + _In_ size_t cjMaxLen) +{ + size_t cchCount = 0; + unsigned char jMbsByte; + + /* 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; + + /* Don't count lead bytes */ + if (!_ismbblead(jMbsByte)) cchCount++; + } + + return cchCount; +} diff --git a/reactos/lib/sdk/crt/string/_mbstrnlen.c b/reactos/lib/sdk/crt/string/_mbstrnlen.c new file mode 100644 index 00000000000..5a856a3cacb --- /dev/null +++ b/reactos/lib/sdk/crt/string/_mbstrnlen.c @@ -0,0 +1,53 @@ +/* + * 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 +#include +#include + +_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; +} +