Tweaks to return types with end-of-buf ptrs

This commit is contained in:
Nick Mathewson 2011-06-13 16:47:43 -04:00
parent 7aeb2fd4ca
commit 9ab8ab83cd

View File

@ -1297,7 +1297,7 @@ evbuffer_strspn(
size_t i = ptr->_internal.pos_in_chain; size_t i = ptr->_internal.pos_in_chain;
if (!chain) if (!chain)
return -1; return 0;
while (1) { while (1) {
char *buffer = (char *)chain->buffer + chain->misalign; char *buffer = (char *)chain->buffer + chain->misalign;
@ -1328,16 +1328,16 @@ evbuffer_strspn(
} }
static inline char static inline int
evbuffer_getchr(struct evbuffer_ptr *it) evbuffer_getchr(struct evbuffer_ptr *it)
{ {
struct evbuffer_chain *chain = it->_internal.chain; struct evbuffer_chain *chain = it->_internal.chain;
size_t off = it->_internal.pos_in_chain; size_t off = it->_internal.pos_in_chain;
if (chain == NULL) if (chain == NULL)
return -1; /* XXX Better invalid char value? */ return -1;
return chain->buffer[chain->misalign + off]; return (unsigned char)chain->buffer[chain->misalign + off];
} }
struct evbuffer_ptr struct evbuffer_ptr
@ -1352,6 +1352,8 @@ evbuffer_search_eol(struct evbuffer *buffer,
/* Avoid locking in trivial edge cases */ /* Avoid locking in trivial edge cases */
if (start && start->_internal.chain == NULL) { if (start && start->_internal.chain == NULL) {
it.pos = -1; it.pos = -1;
it._internal.chain = NULL;
it._internal.pos_in_chain = 0;
if (eol_len_out) if (eol_len_out)
*eol_len_out = extra_drain; *eol_len_out = extra_drain;
return it; return it;
@ -2300,7 +2302,7 @@ evbuffer_ptr_subtract(struct evbuffer *buf, struct evbuffer_ptr *pos,
{ {
if (howfar > (size_t)pos->pos) if (howfar > (size_t)pos->pos)
return -1; return -1;
if (howfar <= pos->_internal.pos_in_chain) { if (pos->_internal.chain && howfar <= pos->_internal.pos_in_chain) {
pos->_internal.pos_in_chain -= howfar; pos->_internal.pos_in_chain -= howfar;
pos->pos -= howfar; pos->pos -= howfar;
return 0; return 0;