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/_mbsnle…
==============================================================================
--- 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/_mbstrn…
==============================================================================
--- 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