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


The following commit(s) were added to refs/heads/master by this push:
     new 5430de72f8 libc/lib_rawmemchr.c:Add rawmemchr methon.
5430de72f8 is described below

commit 5430de72f806dd799a358832f01de518c44ab27b
Author: chenrun1 <chenr...@xiaomi.com>
AuthorDate: Wed Feb 8 14:23:21 2023 +0800

    libc/lib_rawmemchr.c:Add rawmemchr methon.
---
 include/string.h                 |  1 +
 libs/libc/string/Make.defs       |  2 +-
 libs/libc/string/lib_rawmemchr.c | 59 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 61 insertions(+), 1 deletion(-)

diff --git a/include/string.h b/include/string.h
index 5cb4a5b6d5..0e537b014c 100644
--- a/include/string.h
+++ b/include/string.h
@@ -95,6 +95,7 @@ int        strverscmp(FAR const char *s1, FAR const char *s2);
 
 FAR void  *memchr(FAR const void *s, int c, size_t n);
 FAR void  *memrchr(FAR const void *s, int c, size_t n);
+FAR void  *rawmemchr(FAR const void *s, int c);
 FAR void  *memccpy(FAR void *s1, FAR const void *s2, int c, size_t n);
 int        memcmp(FAR const void *s1, FAR const void *s2, size_t n);
 FAR void  *memcpy(FAR void *dest, FAR const void *src, size_t n);
diff --git a/libs/libc/string/Make.defs b/libs/libc/string/Make.defs
index c9ff5a15fc..6f6f35c2bf 100644
--- a/libs/libc/string/Make.defs
+++ b/libs/libc/string/Make.defs
@@ -30,7 +30,7 @@ CSRCS += lib_strndup.c lib_strcasestr.c lib_strpbrk.c 
lib_strrchr.c
 CSRCS += lib_strspn.c lib_strstr.c lib_strtok.c lib_strtokr.c
 CSRCS += lib_strsep.c lib_strerrorr.c lib_explicit_bzero.c lib_strsignal.c
 CSRCS += lib_index.c lib_rindex.c lib_timingsafe_bcmp.c lib_strverscmp.c
-CSRCS += lib_mempcpy.c
+CSRCS += lib_mempcpy.c lib_rawmemchr.c
 
 ifneq ($(CONFIG_LIBC_ARCH_MEMCHR),y)
 CSRCS += lib_memchr.c
diff --git a/libs/libc/string/lib_rawmemchr.c b/libs/libc/string/lib_rawmemchr.c
new file mode 100644
index 0000000000..f4e99c9fbb
--- /dev/null
+++ b/libs/libc/string/lib_rawmemchr.c
@@ -0,0 +1,59 @@
+/****************************************************************************
+ * libs/libc/string/lib_rawmemchr.c
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.  The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <string.h>
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: rawmemchr
+ *
+ * Description:
+ *   The rawmemchr() function is similar to memchr(), it assumes (i.e., the
+ *   programmer knows for certain) that an instance of c lies somewhere in
+ *   the memory area starting at the location pointed to by s,and so performs
+ *   an optimized search for c (i.e., no use of a count argument to limit the
+ *   range of the search). If an instance of c is not found, the results are
+ *   unpredictable.The following call is a fast means of locating a string's
+ *   terminating null byte.
+ *
+ * Returned Value:
+ *   The rawmemchr() function returns a pointer to the located byte, or a
+ *   null pointer if the byte does not occur in the object.
+ *
+ ****************************************************************************/
+
+FAR void *rawmemchr(FAR const void *s, int c)
+{
+  if (c != '\0')
+    {
+      return memchr(s, c, SSIZE_MAX);
+    }
+
+  return (FAR char *)s + strlen(s);
+}

Reply via email to