diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/strs.c | 33 | ||||
| -rw-r--r-- | src/core/strs.h | 1 | ||||
| -rw-r--r-- | src/supplemental/http/http_msg.c | 15 | ||||
| -rw-r--r-- | src/supplemental/http/server.c | 5 | ||||
| -rw-r--r-- | src/supplemental/websocket/websocket.c | 11 |
5 files changed, 43 insertions, 22 deletions
diff --git a/src/core/strs.c b/src/core/strs.c index a03c0bb5..66a385d0 100644 --- a/src/core/strs.c +++ b/src/core/strs.c @@ -134,14 +134,35 @@ nni_strcasestr(const char *s1, const char *s2) } int +nni_strcasecmp(const char *s1, const char *s2) +{ +#if defined(_WIN32) + return (_stricmp(s1, s2)); +#elif defined(NNG_HAVE_STRCASECMP) + return (strcasecmp(s1, s2)); +#else + for (;;) { + uint8_t c1 = (uint8_t) tolower(*s1++); + uint8_t c2 = (uint8_t) tolower(*s2++); + if (c1 == c2) { + if (c1 == 0) { + return (0); + } + continue; + } + return ((c1 < c2) ? -1 : 1); + } + return (0); +#endif +} + +int nni_strncasecmp(const char *s1, const char *s2, size_t n) { -#ifdef NNG_HAVE_STRNCASECMP -#ifdef _WIN32 +#if defined(_WIN32) return (_strnicmp(s1, s2, n)); -#else +#elif defined(NNG_HAVE_STRNCASECMP) return (strncasecmp(s1, s2, n)); -#endif #else for (int i = 0; i < n; i++) { uint8_t c1 = (uint8_t) tolower(*s1++); @@ -152,12 +173,14 @@ nni_strncasecmp(const char *s1, const char *s2, size_t n) } continue; } - return (c1 < c2 ? -1 : 1); + return ((c1 < c2) ? -1 : 1); } return (0); #endif } +// As with strdup, we always use our own, so that our strings +// can be freed with nni_strfree(). int nni_asprintf(char **sp, const char *fmt, ...) { diff --git a/src/core/strs.h b/src/core/strs.h index 3b369fe4..d4851ecf 100644 --- a/src/core/strs.h +++ b/src/core/strs.h @@ -20,6 +20,7 @@ extern size_t nni_strlcat(char *, const char *, size_t); extern size_t nni_strnlen(const char *, size_t); extern char * nni_strcasestr(const char *, const char *); extern int nni_strncasecmp(const char *, const char *, size_t); +extern int nni_strcasecmp(const char *, const char *); extern int nni_asprintf(char **, const char *, ...); #endif // CORE_STRS_H diff --git a/src/supplemental/http/http_msg.c b/src/supplemental/http/http_msg.c index 8b3c6a7c..ff931240 100644 --- a/src/supplemental/http/http_msg.c +++ b/src/supplemental/http/http_msg.c @@ -145,7 +145,7 @@ http_del_header(nni_list *hdrs, const char *key) { http_header *h; NNI_LIST_FOREACH (hdrs, h) { - if (strcasecmp(key, h->name) == 0) { + if (nni_strcasecmp(key, h->name) == 0) { nni_list_remove(hdrs, h); nni_strfree(h->name); nni_free(h->value, strlen(h->value) + 1); @@ -173,7 +173,7 @@ http_set_header(nni_list *hdrs, const char *key, const char *val) { http_header *h; NNI_LIST_FOREACH (hdrs, h) { - if (strcasecmp(key, h->name) == 0) { + if (nni_strcasecmp(key, h->name) == 0) { char * news; size_t len = strlen(val) + 1; if ((news = nni_alloc(len)) == NULL) { @@ -220,7 +220,7 @@ http_add_header(nni_list *hdrs, const char *key, const char *val) { http_header *h; NNI_LIST_FOREACH (hdrs, h) { - if (strcasecmp(key, h->name) == 0) { + if (nni_strcasecmp(key, h->name) == 0) { char * news; size_t len = strlen(h->value) + strlen(val) + 3; if ((news = nni_alloc(len)) == NULL) { @@ -267,7 +267,7 @@ http_get_header(nni_list *hdrs, const char *key) { http_header *h; NNI_LIST_FOREACH (hdrs, h) { - if (strcasecmp(h->name, key) == 0) { + if (nni_strcasecmp(h->name, key) == 0) { return (h->value); } } @@ -407,10 +407,9 @@ nni_http_res_alloc_data(nni_http_res *res, size_t size) static int http_parse_header(nni_list *hdrs, void *line) { - http_header *h; - char * key = line; - char * val; - char * end; + char *key = line; + char *val; + char *end; // Find separation between key and value if ((val = strchr(key, ':')) == NULL) { diff --git a/src/supplemental/http/server.c b/src/supplemental/http/server.c index 0a132975..4a46bf44 100644 --- a/src/supplemental/http/server.c +++ b/src/supplemental/http/server.c @@ -289,7 +289,6 @@ http_sconn_rxdone(void *arg) char * uri; size_t urisz; char * path; - char * tmp; bool badmeth = false; if ((rv = nni_aio_result(aio)) != 0) { @@ -819,7 +818,7 @@ http_server_add_handler(void **hp, nni_http_server *s, nni_http_handler *hh, // matches.) Note that a wild card host matches both. NNI_LIST_FOREACH (&s->handlers, h2) { if ((h2->h_host != NULL) && (h->h_host != NULL) && - (strcasecmp(h2->h_host, h->h_host) != 0)) { + (nni_strcasecmp(h2->h_host, h->h_host) != 0)) { // Hosts don't match, so we are safe. continue; } @@ -916,7 +915,7 @@ http_lookup_type(const char *path) if (l2 > l1) { continue; } - if (strcasecmp(&path[l1 - l2], content_map[i].ext) == 0) { + if (nni_strcasecmp(&path[l1 - l2], content_map[i].ext) == 0) { return (content_map[i].typ); } } diff --git a/src/supplemental/websocket/websocket.c b/src/supplemental/websocket/websocket.c index 53e4af8c..06e1c70a 100644 --- a/src/supplemental/websocket/websocket.c +++ b/src/supplemental/websocket/websocket.c @@ -237,7 +237,7 @@ ws_mask_frame(ws_frame *frame) } r = nni_random(); NNI_PUT32(frame->mask, r); - for (int i = 0; i < frame->len; i++) { + for (size_t i = 0; i < frame->len; i++) { frame->buf[i] ^= frame->mask[i % 4]; } memcpy(frame->head + frame->hlen, frame->mask, 4); @@ -253,7 +253,7 @@ ws_unmask_frame(ws_frame *frame) if (!frame->masked) { return; } - for (int i = 0; i < frame->len; i++) { + for (size_t i = 0; i < frame->len; i++) { frame->buf[i] ^= frame->mask[i % 4]; } frame->hlen -= 4; @@ -1651,8 +1651,7 @@ nni_ws_listener_accept(nni_ws_listener *l, nni_aio *aio) void nni_ws_listener_close(nni_ws_listener *l) { - nni_aio *aio; - nni_ws * ws; + nni_ws *ws; nni_mtx_lock(&l->mtx); if (l->closed) { nni_mtx_unlock(&l->mtx); @@ -2012,7 +2011,7 @@ ws_set_header(nni_list *l, const char *n, const char *v) } NNI_LIST_FOREACH (l, hdr) { - if (strcasecmp(hdr->name, n) == 0) { + if (nni_strcasecmp(hdr->name, n) == 0) { nni_strfree(hdr->value); hdr->value = nv; return (0); @@ -2023,7 +2022,7 @@ ws_set_header(nni_list *l, const char *n, const char *v) nni_strfree(nv); return (NNG_ENOMEM); } - if ((hdr->name = strdup(n)) == NULL) { + if ((hdr->name = nni_strdup(n)) == NULL) { nni_strfree(nv); NNI_FREE_STRUCT(hdr); return (NNG_ENOMEM); |
