You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2023/09/21 06:02:34 UTC
[nuttx] 09/10: libs/libc/wchar: add wcsspn implementation
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit e2962e84c5e7b9e558ed4895b4765e5c7a484bc1
Author: guoshichao <gu...@xiaomi.com>
AuthorDate: Sat Aug 19 17:20:31 2023 +0800
libs/libc/wchar: add wcsspn implementation
Signed-off-by: guoshichao <gu...@xiaomi.com>
---
libs/libc/wchar/Make.defs | 2 +-
libs/libc/wchar/lib_wcscspn.c | 70 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 71 insertions(+), 1 deletion(-)
diff --git a/libs/libc/wchar/Make.defs b/libs/libc/wchar/Make.defs
index 9501bbd542..5167f698eb 100644
--- a/libs/libc/wchar/Make.defs
+++ b/libs/libc/wchar/Make.defs
@@ -28,7 +28,7 @@ CSRCS += lib_wcstoull.c lib_wcstold.c lib_wcstof.c lib_wcstod.c
CSRCS += lib_swprintf.c lib_mbsnrtowcs.c lib_wcsnrtombs.c lib_mbsinit.c
CSRCS += lib_mbrlen.c lib_mbsrtowcs.c lib_wcsrtombs.c lib_wcscpy.c
CSRCS += lib_wcscat.c lib_wcslcat.c lib_wcsncat.c lib_wcsrchr.c lib_wcschr.c
-CSRCS += lib_wcsncpy.c lib_wcsncmp.c
+CSRCS += lib_wcsncpy.c lib_wcsncmp.c lib_wcscspn.c
# Add the wchar directory to the build
diff --git a/libs/libc/wchar/lib_wcscspn.c b/libs/libc/wchar/lib_wcscspn.c
new file mode 100644
index 0000000000..087345803c
--- /dev/null
+++ b/libs/libc/wchar/lib_wcscspn.c
@@ -0,0 +1,70 @@
+/****************************************************************************
+ * libs/libc/wchar/lib_wcscspn.c
+ *
+ * Copyright © 2005-2014 Rich Felker, et al.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <wchar.h>
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: wcscspn
+ *
+ * Description:
+ * Get span until character in wide string. scans "s" for the first
+ * occurrence of any of the wide characters that are part of "c".
+ *
+ * Input Parameters:
+ * s - the wchar string to be scanned
+ * c - the wchar string containing the characters to match.
+ *
+ * Returned Value:
+ * Return the number of wide characters of "s" read before this first
+ * occurrence.
+ *
+ ****************************************************************************/
+
+size_t wcscspn(FAR const wchar_t *s, FAR const wchar_t *c)
+{
+ FAR const wchar_t *a;
+
+ if (!c[0])
+ {
+ return wcslen(s);
+ }
+
+ if (!c[1])
+ {
+ return (s = wcschr(a = s, *c)) ? s - a : wcslen(a);
+ }
+
+ for (a = s; *s && !wcschr(c, *s); s++);
+ return s - a;
+}