Export evutil_str[n]casecmp as evutil_ascii_str[n]casecmp.

svn:r1387
This commit is contained in:
Nick Mathewson 2009-07-28 19:41:57 +00:00
parent a826a75800
commit 72ea534f8e
8 changed files with 36 additions and 32 deletions

View File

@ -2,6 +2,7 @@ Changes in 2.0.3-alpha:
o Add a new code to support SSL/TLS on bufferevents, using the OpenSSL library (where available).
o Fix a bug where we didn't allocate enough memory in event_get_supported_methods().
o Avoid segfault during failed allocation of locked evdns_base. (Found by Rocco Carbone.)
o Export new evutil_ascii_* functions to perform locale-independent character type operations.
Changes in 2.0.2-alpha:
o Add a new flag to bufferevents to make all callbacks automatically deferred.

View File

@ -1005,7 +1005,7 @@ reply_parse(struct evdns_base *base, u8 *packet, int length) {
if (strcmp(tmp_name, cmp_name) == 0) \
name_matches = 1; \
} else { \
if (evutil_strcasecmp(tmp_name, cmp_name) == 0) \
if (evutil_ascii_strcasecmp(tmp_name, cmp_name) == 0) \
name_matches = 1; \
} \
} while(0)

View File

@ -773,7 +773,7 @@ const char EVUTIL_TOLOWER_TABLE[256] = {
};
int
evutil_strcasecmp(const char *s1, const char *s2)
evutil_ascii_strcasecmp(const char *s1, const char *s2)
{
char c1, c2;
while (1) {
@ -787,7 +787,7 @@ evutil_strcasecmp(const char *s1, const char *s2)
return 0;
}
}
int evutil_strncasecmp(const char *s1, const char *s2, size_t n)
int evutil_ascii_strncasecmp(const char *s1, const char *s2, size_t n)
{
char c1, c2;
while (n--) {

14
http.c
View File

@ -418,10 +418,10 @@ evhttp_is_connection_close(int flags, struct evkeyvalq* headers)
if (flags & EVHTTP_PROXY_REQUEST) {
/* proxy connection */
const char *connection = evhttp_find_header(headers, "Proxy-Connection");
return (connection == NULL || evutil_strcasecmp(connection, "keep-alive") != 0);
return (connection == NULL || evutil_ascii_strcasecmp(connection, "keep-alive") != 0);
} else {
const char *connection = evhttp_find_header(headers, "Connection");
return (connection != NULL && evutil_strcasecmp(connection, "close") == 0);
return (connection != NULL && evutil_ascii_strcasecmp(connection, "close") == 0);
}
}
@ -430,7 +430,7 @@ evhttp_is_connection_keepalive(struct evkeyvalq* headers)
{
const char *connection = evhttp_find_header(headers, "Connection");
return (connection != NULL
&& evutil_strncasecmp(connection, "keep-alive", 10) == 0);
&& evutil_ascii_strncasecmp(connection, "keep-alive", 10) == 0);
}
static void
@ -1325,7 +1325,7 @@ evhttp_find_header(const struct evkeyvalq *headers, const char *key)
struct evkeyval *header;
TAILQ_FOREACH(header, headers, next) {
if (evutil_strcasecmp(header->key, key) == 0)
if (evutil_ascii_strcasecmp(header->key, key) == 0)
return (header->value);
}
@ -1358,7 +1358,7 @@ evhttp_remove_header(struct evkeyvalq *headers, const char *key)
struct evkeyval *header;
TAILQ_FOREACH(header, headers, next) {
if (evutil_strcasecmp(header->key, key) == 0)
if (evutil_ascii_strcasecmp(header->key, key) == 0)
break;
}
@ -1554,7 +1554,7 @@ evhttp_get_body_length(struct evhttp_request *req)
if (content_length == NULL && connection == NULL)
req->ntoread = -1;
else if (content_length == NULL &&
evutil_strcasecmp(connection, "Close") != 0) {
evutil_ascii_strcasecmp(connection, "Close") != 0) {
/* Bad combination, we don't know when it will end */
event_warnx("%s: we got no content length, but the "
"server wants to keep the connection open: %s.",
@ -1593,7 +1593,7 @@ evhttp_get_body(struct evhttp_connection *evcon, struct evhttp_request *req)
}
evcon->state = EVCON_READING_BODY;
xfer_enc = evhttp_find_header(req->input_headers, "Transfer-Encoding");
if (xfer_enc != NULL && evutil_strcasecmp(xfer_enc, "chunked") == 0) {
if (xfer_enc != NULL && evutil_ascii_strcasecmp(xfer_enc, "chunked") == 0) {
req->chunked = 1;
req->ntoread = -1;
} else {

View File

@ -295,6 +295,14 @@ struct sockaddr;
*/
int evutil_parse_sockaddr_port(const char *str, struct sockaddr *out, int *outlen);
/** As strcasecmp, but always compares the characters in locale-independent
ASCII. That's useful if you're handling data in ASCII-based protocols.
*/
int evutil_ascii_strcasecmp(const char *str1, const char *str2);
/** As strncasecmp, but always compares the characters in locale-independent
ASCII. That's useful if you're handling data in ASCII-based protocols.
*/
int evutil_ascii_strncasecmp(const char *str1, const char *str2, size_t n);
#ifdef __cplusplus
}

View File

@ -70,9 +70,6 @@ static int dns_ok = 0;
static int dns_got_cancel = 0;
static int dns_err = 0;
/* XXXXX have evutil export this. */
int evutil_strcasecmp(const char *, const char *);
static void
dns_gethostbyname_cb(int result, char type, int count, int ttl,
void *addresses, void *arg)
@ -226,7 +223,7 @@ dns_server_request_cb(struct evdns_server_request *req, void *data)
ans.s_addr = htonl(0xc0a80b0bUL); /* 192.168.11.11 */
if (req->questions[i]->type == EVDNS_TYPE_A &&
req->questions[i]->dns_question_class == EVDNS_CLASS_INET &&
!evutil_strcasecmp(req->questions[i]->name, "zz.example.com")) {
!evutil_ascii_strcasecmp(req->questions[i]->name, "zz.example.com")) {
r = evdns_server_request_add_a_reply(req,
req->questions[i]->name,
1, &ans.s_addr, 12345);
@ -234,7 +231,7 @@ dns_server_request_cb(struct evdns_server_request *req, void *data)
dns_ok = 0;
} else if (req->questions[i]->type == EVDNS_TYPE_AAAA &&
req->questions[i]->dns_question_class == EVDNS_CLASS_INET &&
!evutil_strcasecmp(req->questions[i]->name, "zz.example.com")) {
!evutil_ascii_strcasecmp(req->questions[i]->name, "zz.example.com")) {
char addr6[17] = "abcdefghijklmnop";
r = evdns_server_request_add_aaaa_reply(req,
req->questions[i]->name,
@ -243,7 +240,7 @@ dns_server_request_cb(struct evdns_server_request *req, void *data)
dns_ok = 0;
} else if (req->questions[i]->type == EVDNS_TYPE_PTR &&
req->questions[i]->dns_question_class == EVDNS_CLASS_INET &&
!evutil_strcasecmp(req->questions[i]->name, TEST_ARPA)) {
!evutil_ascii_strcasecmp(req->questions[i]->name, TEST_ARPA)) {
r = evdns_server_request_add_ptr_reply(req, NULL,
req->questions[i]->name,
"ZZ.EXAMPLE.COM", 54321);
@ -251,7 +248,7 @@ dns_server_request_cb(struct evdns_server_request *req, void *data)
dns_ok = 0;
} else if (req->questions[i]->type == EVDNS_TYPE_A &&
req->questions[i]->dns_question_class == EVDNS_CLASS_INET &&
!evutil_strcasecmp(req->questions[i]->name, "drop.example.com")) {
!evutil_ascii_strcasecmp(req->questions[i]->name, "drop.example.com")) {
if (evdns_server_request_drop(req)<0)
dns_ok = 0;
return;

View File

@ -304,20 +304,20 @@ test_evutil_snprintf(void *ptr)
static void
test_evutil_casecmp(void *ptr)
{
tt_int_op(evutil_strcasecmp("ABC", "ABC"), ==, 0);
tt_int_op(evutil_strcasecmp("ABC", "abc"), ==, 0);
tt_int_op(evutil_strcasecmp("ABC", "abcd"), <, 0);
tt_int_op(evutil_strcasecmp("ABC", "abb"), >, 0);
tt_int_op(evutil_strcasecmp("ABCd", "abc"), >, 0);
tt_int_op(evutil_ascii_strcasecmp("ABC", "ABC"), ==, 0);
tt_int_op(evutil_ascii_strcasecmp("ABC", "abc"), ==, 0);
tt_int_op(evutil_ascii_strcasecmp("ABC", "abcd"), <, 0);
tt_int_op(evutil_ascii_strcasecmp("ABC", "abb"), >, 0);
tt_int_op(evutil_ascii_strcasecmp("ABCd", "abc"), >, 0);
tt_int_op(evutil_strncasecmp("Libevent", "LibEvEnT", 100), ==, 0);
tt_int_op(evutil_strncasecmp("Libevent", "LibEvEnT", 4), ==, 0);
tt_int_op(evutil_strncasecmp("Libevent", "LibEXXXX", 4), ==, 0);
tt_int_op(evutil_strncasecmp("Libevent", "LibE", 4), ==, 0);
tt_int_op(evutil_strncasecmp("Libe", "LibEvEnT", 4), ==, 0);
tt_int_op(evutil_strncasecmp("Lib", "LibEvEnT", 4), <, 0);
tt_int_op(evutil_strncasecmp("abc", "def", 99), <, 0);
tt_int_op(evutil_strncasecmp("Z", "qrst", 1), >, 0);
tt_int_op(evutil_ascii_strncasecmp("Libevent", "LibEvEnT", 100), ==, 0);
tt_int_op(evutil_ascii_strncasecmp("Libevent", "LibEvEnT", 4), ==, 0);
tt_int_op(evutil_ascii_strncasecmp("Libevent", "LibEXXXX", 4), ==, 0);
tt_int_op(evutil_ascii_strncasecmp("Libevent", "LibE", 4), ==, 0);
tt_int_op(evutil_ascii_strncasecmp("Libe", "LibEvEnT", 4), ==, 0);
tt_int_op(evutil_ascii_strncasecmp("Lib", "LibEvEnT", 4), <, 0);
tt_int_op(evutil_ascii_strncasecmp("abc", "def", 99), <, 0);
tt_int_op(evutil_ascii_strncasecmp("Z", "qrst", 1), >, 0);
end:
;
}

View File

@ -108,8 +108,6 @@ extern const char EVUTIL_TOUPPER_TABLE[];
extern const char EVUTIL_TOLOWER_TABLE[];
#define EVUTIL_TOLOWER(c) (EVUTIL_TOLOWER_TABLE[(ev_uint8_t)c])
#define EVUTIL_TOUPPER(c) (EVUTIL_TOUPPER_TABLE[(ev_uint8_t)c])
int evutil_strcasecmp(const char *, const char *);
int evutil_strncasecmp(const char *, const char *, size_t);
/** Helper macro. If we know that a given pointer points to a field in a
structure, return a pointer to the structure itself. Used to implement