commit 0337c71

default  ·  2022-12-11 08:46:27 +0000 UTC
parent 79270ab
Backport from xs.
3 files changed,  +22, -6
M xs.h
M xs.h
+18, -0
 1@@ -90,6 +90,7 @@ d_char *xs_number_new(double f);
 2 double xs_number_get(const char *v);
 3 const char *xs_number_str(const char *v);
 4 
 5+void *xs_memmem(const char *haystack, int h_size, const char *needle, int n_size);
 6 
 7 #ifdef XS_IMPLEMENTATION
 8 
 9@@ -907,6 +908,23 @@ const char *xs_number_str(const char *v)
10 }
11 
12 
13+void *xs_memmem(const char *haystack, int h_size, const char *needle, int n_size)
14+/* clone of memmem */
15+{
16+    char *p, *r = NULL;
17+    int offset = 0;
18+
19+    while (!r && h_size - offset > n_size && (p = strchr(haystack + offset, *needle))) {
20+        if (memcmp(p, needle, n_size) == 0)
21+            r = p;
22+        else
23+            offset = p - haystack + 1;
24+    }
25+
26+    return r;
27+}
28+
29+
30 #endif /* XS_IMPLEMENTATION */
31 
32 #endif /* _XS_H */
+3, -5
 1@@ -69,8 +69,6 @@ d_char *xs_url_vars(char *str)
 2 }
 3 
 4 
 5-void *memmem(const void *, size_t, const void *, size_t);
 6-
 7 d_char *_xs_multipart_form_data(char *payload, int p_size, char *header)
 8 /* parses a multipart/form-data payload */
 9 {
10@@ -94,7 +92,7 @@ d_char *_xs_multipart_form_data(char *payload, int p_size, char *header)
11     d_char *p_vars = xs_dict_new();
12 
13     /* iterate searching the boundaries */
14-    while ((p = memmem(payload + offset, p_size - offset, boundary, bsz)) != NULL) {
15+    while ((p = xs_memmem(payload + offset, p_size - offset, boundary, bsz)) != NULL) {
16         xs *s1 = NULL;
17         xs *l1 = NULL;
18         char *vn = NULL;
19@@ -133,13 +131,13 @@ d_char *_xs_multipart_form_data(char *payload, int p_size, char *header)
20         }
21 
22         /* find the start of the part content */
23-        if ((p = memmem(p, p_size - offset, "\r\n\r\n", 4)) == NULL)
24+        if ((p = xs_memmem(p, p_size - offset, "\r\n\r\n", 4)) == NULL)
25             break;
26 
27         p += 4;
28 
29         /* find the next boundary */
30-        if ((q = memmem(p, p_size - offset, boundary, bsz)) == NULL)
31+        if ((q = xs_memmem(p, p_size - offset, boundary, bsz)) == NULL)
32             break;
33 
34         po = p - payload;
+1, -1
1@@ -1 +1 @@
2-/* ad1c7ba748725abdecc1f1124d697f9130c49e87 */
3+/* 3aa82bc4fc310ec95194602bed88a9767e100350 */