File 3572-erts-Add-sys_memchr.patch of Package erlang

From ef1ded8bf759bb8a749cdada959d2e6c1951d895 Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Tue, 28 Mar 2023 15:54:48 +0200
Subject: [PATCH 2/2] erts: Add sys_memchr()

for completeness/symmetry with sys_memrchr().
---
 erts/emulator/beam/packet_parser.c | 14 +++++++-------
 erts/emulator/beam/sys.h           |  6 ++++++
 2 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/erts/emulator/beam/packet_parser.c b/erts/emulator/beam/packet_parser.c
index 50d292b33e..164994a98f 100644
--- a/erts/emulator/beam/packet_parser.c
+++ b/erts/emulator/beam/packet_parser.c
@@ -293,7 +293,7 @@ int packet_get_length(enum PacketParseType htype,
     case TCP_PB_LINE_LF: {
         /* TCP_PB_LINE_LF:  [Data ... Delimiter]  */
         const char* ptr2;
-        if ((ptr2 = memchr(ptr, delimiter, n)) == NULL) {
+        if ((ptr2 = sys_memchr(ptr, delimiter, n)) == NULL) {
             if (n > max_plen && max_plen != 0) { /* packet full */
                 DEBUGF((" => packet full (no NL)=%d\r\n", n));
                 goto error;
@@ -407,7 +407,7 @@ int packet_get_length(enum PacketParseType htype,
 	    }
 
             while (1) {
-                const char* ptr2 = memchr(ptr1, '\n', len);
+                const char* ptr2 = sys_memchr(ptr1, '\n', len);
                 
                 if (ptr2 == NULL) {
                     if (max_plen != 0) {
@@ -520,7 +520,7 @@ http_parse_absoluteURI(PacketHttpURI* uri, const char* uri_ptr, int uri_len)
     const char* p;
     const char* v;
     
-    if ((p = memchr(uri_ptr, '/', uri_len)) == NULL) {
+    if ((p = sys_memchr(uri_ptr, '/', uri_len)) == NULL) {
         /* host [":" port] */
         uri->s2_ptr = "/";
         uri->s2_len = 1;
@@ -534,15 +534,15 @@ http_parse_absoluteURI(PacketHttpURI* uri, const char* uri_ptr, int uri_len)
 
     uri->s1_ptr = uri_ptr;
     uri->port = 0; /* undefined */
-    if ((p = memchr(uri_ptr, ':', uri_len)) == NULL) {
+    if ((p = sys_memchr(uri_ptr, ':', uri_len)) == NULL) {
         uri->s1_len = uri_len;
     }
     /* ipv6
      * eg [::1]:4000
      * eg [FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80
      */
-    else if (memchr(uri_ptr, '[', uri_len) == uri_ptr &&
-        (v = memchr(uri_ptr, ']', uri_len)) != NULL) {
+    else if (sys_memchr(uri_ptr, '[', uri_len) == uri_ptr &&
+        (v = sys_memchr(uri_ptr, ']', uri_len)) != NULL) {
       int n = (v - uri_ptr) + 1;
       int port = 0;
       uri->s1_len = n;
@@ -632,7 +632,7 @@ static void http_parse_uri(PacketHttpURI* uri, const char* uri_ptr, int uri_len)
     }
     else {
         char* ptr;
-        if ((ptr = memchr(uri_ptr, ':', uri_len)) == NULL) {
+        if ((ptr = sys_memchr(uri_ptr, ':', uri_len)) == NULL) {
             uri->type = URI_STRING;
             uri->s1_ptr = uri_ptr;
             uri->s1_len = uri_len;
diff --git a/erts/emulator/beam/sys.h b/erts/emulator/beam/sys.h
index e009473403..f162569252 100644
--- a/erts/emulator/beam/sys.h
+++ b/erts/emulator/beam/sys.h
@@ -1079,6 +1079,7 @@ ERTS_GLB_INLINE void *sys_memmove(void *dest, const void *src, size_t n);
 ERTS_GLB_INLINE int sys_memcmp(const void *s1, const void *s2, size_t n);
 ERTS_GLB_INLINE void *sys_memset(void *s, int c, size_t n);
 ERTS_GLB_INLINE void *sys_memzero(void *s, size_t n);
+ERTS_GLB_INLINE void *sys_memchr(const void *s, int c, size_t n);
 ERTS_GLB_INLINE void *sys_memrchr(const void *s, int c, size_t n);
 ERTS_GLB_INLINE int sys_strcmp(const char *s1, const char *s2);
 ERTS_GLB_INLINE int sys_strncmp(const char *s1, const char *s2, size_t n);
@@ -1113,6 +1114,11 @@ ERTS_GLB_INLINE void *sys_memzero(void *s, size_t n)
     ASSERT(s != NULL);
     return memset(s,'\0',n);
 }
+ERTS_GLB_INLINE void *sys_memchr(const void *s, int c, size_t n)
+{
+    ASSERT(s != NULL);
+    return (void*)memchr(s, c, n);
+}
 ERTS_GLB_INLINE void *sys_memrchr(const void *s, int c, size_t n)
 {
     ASSERT(s != NULL);
-- 
2.35.3

openSUSE Build Service is sponsored by