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