From 9ab8ab83cd87d3733674e8b483d823eab3ff531b Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Mon, 13 Jun 2011 16:47:43 -0400 Subject: [PATCH] Tweaks to return types with end-of-buf ptrs --- buffer.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/buffer.c b/buffer.c index 9d8820e0..6f80de03 100644 --- a/buffer.c +++ b/buffer.c @@ -1297,7 +1297,7 @@ evbuffer_strspn( size_t i = ptr->_internal.pos_in_chain; if (!chain) - return -1; + return 0; while (1) { 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) { struct evbuffer_chain *chain = it->_internal.chain; size_t off = it->_internal.pos_in_chain; 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 @@ -1352,6 +1352,8 @@ evbuffer_search_eol(struct evbuffer *buffer, /* Avoid locking in trivial edge cases */ if (start && start->_internal.chain == NULL) { it.pos = -1; + it._internal.chain = NULL; + it._internal.pos_in_chain = 0; if (eol_len_out) *eol_len_out = extra_drain; return it; @@ -2300,7 +2302,7 @@ evbuffer_ptr_subtract(struct evbuffer *buf, struct evbuffer_ptr *pos, { if (howfar > (size_t)pos->pos) 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->pos -= howfar; return 0; -- 2.50.1