Author: tkreuzer Date: Thu Sep 27 21:53:25 2012 New Revision: 57404
URL: http://svn.reactos.org/svn/reactos?rev=57404&view=rev Log: [CRT] Implement _mbsnlen, _mbstrnlen
Added: trunk/reactos/lib/sdk/crt/string/_mbsnlen.c (with props) trunk/reactos/lib/sdk/crt/string/_mbstrnlen.c (with props)
Added: trunk/reactos/lib/sdk/crt/string/_mbsnlen.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/string/_mbsnlen... ============================================================================== --- trunk/reactos/lib/sdk/crt/string/_mbsnlen.c (added) +++ trunk/reactos/lib/sdk/crt/string/_mbsnlen.c [iso-8859-1] Thu Sep 27 21:53:25 2012 @@ -1,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 <mbstring.h> + +_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; +}
Propchange: trunk/reactos/lib/sdk/crt/string/_mbsnlen.c ------------------------------------------------------------------------------ svn:eol-style = native
Added: trunk/reactos/lib/sdk/crt/string/_mbstrnlen.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/string/_mbstrnl... ============================================================================== --- trunk/reactos/lib/sdk/crt/string/_mbstrnlen.c (added) +++ trunk/reactos/lib/sdk/crt/string/_mbstrnlen.c [iso-8859-1] Thu Sep 27 21:53:25 2012 @@ -1,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 <precomp.h> +#include <mbctype.h> +#include <specstrings.h> + +_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; +} +
Propchange: trunk/reactos/lib/sdk/crt/string/_mbstrnlen.c ------------------------------------------------------------------------------ svn:eol-style = native