Commit 397fe263 authored by Alex Smith's avatar Alex Smith Committed by michael-grunder
Browse files

read: Use memchr() in seekNewline() instead of looping over entire string

parent 81c48a98
...@@ -123,29 +123,22 @@ static char *readBytes(redisReader *r, unsigned int bytes) { ...@@ -123,29 +123,22 @@ static char *readBytes(redisReader *r, unsigned int bytes) {
/* Find pointer to \r\n. */ /* Find pointer to \r\n. */
static char *seekNewline(char *s, size_t len) { static char *seekNewline(char *s, size_t len) {
int pos = 0; char *_s = s, *ret;
int _len = len-1; int _len = len-1;
/* Position should be < len-1 because the character at "pos" should be /* Exclude the last character from the searched length because the found
* followed by a \n. Note that strchr cannot be used because it doesn't * '\r' should be followed by a '\n' */
* allow to search a limited length and the buffer that is being searched while ((ret = memchr(_s, '\r', _len)) != NULL) {
* might not have a trailing NULL character. */ if (ret[1] == '\n') {
while (pos < _len) { /* Found. */
while(pos < _len && s[pos] != '\r') pos++; break;
if (pos==_len) {
/* Not found. */
return NULL;
} else {
if (s[pos+1] == '\n') {
/* Found. */
return s+pos;
} else {
/* Continue searching. */
pos++;
}
} }
/* Continue searching. */
ret++;
_len -= ret - _s;
_s = ret;
} }
return NULL; return ret;
} }
/* Convert a string into a long long. Returns REDIS_OK if the string could be /* Convert a string into a long long. Returns REDIS_OK if the string could be
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment