mirror of
https://github.com/cesanta/mongoose.git
synced 2026-11-03 13:28:44 +00:00
Fix #2612 - struct mg_str::ptr -> buf
This commit is contained in:
1 parent
e93d18d200
commit
e0e599ffa1
61 files changed
+684
-686
No files matched your search
@@ -1,12 +1,12 @@
|
||||
#include "str.h"
|
||||
|
||||
struct mg_str mg_str_s(const char *s) {
|
||||
struct mg_str str = {s, s == NULL ? 0 : strlen(s)};
|
||||
struct mg_str str = {(char *) s, s == NULL ? 0 : strlen(s)};
|
||||
return str;
|
||||
}
|
||||
|
||||
struct mg_str mg_str_n(const char *s, size_t n) {
|
||||
struct mg_str str = {s, n};
|
||||
struct mg_str str = {(char *) s, n};
|
||||
return str;
|
||||
}
|
||||
|
||||
@@ -30,26 +30,26 @@ int mg_casecmp(const char *s1, const char *s2) {
|
||||
|
||||
int mg_vcmp(const struct mg_str *s1, const char *s2) {
|
||||
size_t n2 = strlen(s2), n1 = s1->len;
|
||||
int r = strncmp(s1->ptr, s2, (n1 < n2) ? n1 : n2);
|
||||
int r = strncmp(s1->buf, s2, (n1 < n2) ? n1 : n2);
|
||||
if (r == 0) return (int) (n1 - n2);
|
||||
return r;
|
||||
}
|
||||
|
||||
int mg_vcasecmp(const struct mg_str *str1, const char *str2) {
|
||||
size_t n2 = strlen(str2), n1 = str1->len;
|
||||
int r = mg_ncasecmp(str1->ptr, str2, (n1 < n2) ? n1 : n2);
|
||||
int r = mg_ncasecmp(str1->buf, str2, (n1 < n2) ? n1 : n2);
|
||||
if (r == 0) return (int) (n1 - n2);
|
||||
return r;
|
||||
}
|
||||
|
||||
struct mg_str mg_strdup(const struct mg_str s) {
|
||||
struct mg_str r = {NULL, 0};
|
||||
if (s.len > 0 && s.ptr != NULL) {
|
||||
if (s.len > 0 && s.buf != NULL) {
|
||||
char *sc = (char *) calloc(1, s.len + 1);
|
||||
if (sc != NULL) {
|
||||
memcpy(sc, s.ptr, s.len);
|
||||
memcpy(sc, s.buf, s.len);
|
||||
sc[s.len] = '\0';
|
||||
r.ptr = sc;
|
||||
r.buf = sc;
|
||||
r.len = s.len;
|
||||
}
|
||||
}
|
||||
@@ -59,8 +59,8 @@ struct mg_str mg_strdup(const struct mg_str s) {
|
||||
int mg_strcmp(const struct mg_str str1, const struct mg_str str2) {
|
||||
size_t i = 0;
|
||||
while (i < str1.len && i < str2.len) {
|
||||
int c1 = str1.ptr[i];
|
||||
int c2 = str2.ptr[i];
|
||||
int c1 = str1.buf[i];
|
||||
int c2 = str2.buf[i];
|
||||
if (c1 < c2) return -1;
|
||||
if (c1 > c2) return 1;
|
||||
i++;
|
||||
@@ -74,10 +74,10 @@ const char *mg_strstr(const struct mg_str haystack,
|
||||
const struct mg_str needle) {
|
||||
size_t i;
|
||||
if (needle.len > haystack.len) return NULL;
|
||||
if (needle.len == 0) return haystack.ptr;
|
||||
if (needle.len == 0) return haystack.buf;
|
||||
for (i = 0; i <= haystack.len - needle.len; i++) {
|
||||
if (memcmp(haystack.ptr + i, needle.ptr, needle.len) == 0) {
|
||||
return haystack.ptr + i;
|
||||
if (memcmp(haystack.buf + i, needle.buf, needle.len) == 0) {
|
||||
return haystack.buf + i;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
@@ -88,39 +88,39 @@ static bool is_space(int c) {
|
||||
}
|
||||
|
||||
struct mg_str mg_strstrip(struct mg_str s) {
|
||||
while (s.len > 0 && is_space((int) *s.ptr)) s.ptr++, s.len--;
|
||||
while (s.len > 0 && is_space((int) *(s.ptr + s.len - 1))) s.len--;
|
||||
while (s.len > 0 && is_space((int) *s.buf)) s.buf++, s.len--;
|
||||
while (s.len > 0 && is_space((int) *(s.buf + s.len - 1))) s.len--;
|
||||
return s;
|
||||
}
|
||||
|
||||
bool mg_match(struct mg_str s, struct mg_str p, struct mg_str *caps) {
|
||||
size_t i = 0, j = 0, ni = 0, nj = 0;
|
||||
if (caps) caps->ptr = NULL, caps->len = 0;
|
||||
if (caps) caps->buf = NULL, caps->len = 0;
|
||||
while (i < p.len || j < s.len) {
|
||||
if (i < p.len && j < s.len && (p.ptr[i] == '?' || s.ptr[j] == p.ptr[i])) {
|
||||
if (i < p.len && j < s.len && (p.buf[i] == '?' || s.buf[j] == p.buf[i])) {
|
||||
if (caps == NULL) {
|
||||
} else if (p.ptr[i] == '?') {
|
||||
caps->ptr = &s.ptr[j], caps->len = 1; // Finalize `?` cap
|
||||
caps++, caps->ptr = NULL, caps->len = 0; // Init next cap
|
||||
} else if (caps->ptr != NULL && caps->len == 0) {
|
||||
caps->len = (size_t) (&s.ptr[j] - caps->ptr); // Finalize current cap
|
||||
caps++, caps->len = 0, caps->ptr = NULL; // Init next cap
|
||||
} else if (p.buf[i] == '?') {
|
||||
caps->buf = &s.buf[j], caps->len = 1; // Finalize `?` cap
|
||||
caps++, caps->buf = NULL, caps->len = 0; // Init next cap
|
||||
} else if (caps->buf != NULL && caps->len == 0) {
|
||||
caps->len = (size_t) (&s.buf[j] - caps->buf); // Finalize current cap
|
||||
caps++, caps->len = 0, caps->buf = NULL; // Init next cap
|
||||
}
|
||||
i++, j++;
|
||||
} else if (i < p.len && (p.ptr[i] == '*' || p.ptr[i] == '#')) {
|
||||
if (caps && !caps->ptr) caps->len = 0, caps->ptr = &s.ptr[j]; // Init cap
|
||||
} else if (i < p.len && (p.buf[i] == '*' || p.buf[i] == '#')) {
|
||||
if (caps && !caps->buf) caps->len = 0, caps->buf = &s.buf[j]; // Init cap
|
||||
ni = i++, nj = j + 1;
|
||||
} else if (nj > 0 && nj <= s.len && (p.ptr[ni] == '#' || s.ptr[j] != '/')) {
|
||||
} else if (nj > 0 && nj <= s.len && (p.buf[ni] == '#' || s.buf[j] != '/')) {
|
||||
i = ni, j = nj;
|
||||
if (caps && caps->ptr == NULL && caps->len == 0) {
|
||||
if (caps && caps->buf == NULL && caps->len == 0) {
|
||||
caps--, caps->len = 0; // Restart previous cap
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (caps && caps->ptr && caps->len == 0) {
|
||||
caps->len = (size_t) (&s.ptr[j] - caps->ptr);
|
||||
if (caps && caps->buf && caps->len == 0) {
|
||||
caps->len = (size_t) (&s.buf[j] - caps->buf);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -130,14 +130,14 @@ bool mg_globmatch(const char *s1, size_t n1, const char *s2, size_t n2) {
|
||||
}
|
||||
|
||||
bool mg_span(struct mg_str s, struct mg_str *a, struct mg_str *b, char sep) {
|
||||
if (s.len == 0 || s.ptr == NULL) {
|
||||
if (s.len == 0 || s.buf == NULL) {
|
||||
return false; // Empty string, nothing to span - fail
|
||||
} else {
|
||||
size_t len = 0;
|
||||
while (len < s.len && s.ptr[len] != sep) len++; // Find separator
|
||||
if (a) *a = mg_str_n(s.ptr, len); // Init a
|
||||
if (b) *b = mg_str_n(s.ptr + len, s.len - len); // Init b
|
||||
if (b && len < s.len) b->ptr++, b->len--; // Skip separator
|
||||
while (len < s.len && s.buf[len] != sep) len++; // Find separator
|
||||
if (a) *a = mg_str_n(s.buf, len); // Init a
|
||||
if (b) *b = mg_str_n(s.buf + len, s.len - len); // Init b
|
||||
if (b && len < s.len) b->buf++, b->len--; // Skip separator
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user