]> git.saurik.com Git - redis.git/commitdiff
Update hiredis
authorPieter Noordhuis <pcnoordhuis@gmail.com>
Fri, 5 Nov 2010 16:24:48 +0000 (17:24 +0100)
committerPieter Noordhuis <pcnoordhuis@gmail.com>
Fri, 5 Nov 2010 16:24:48 +0000 (17:24 +0100)
deps/hiredis/hiredis.c
deps/hiredis/hiredis.h
deps/hiredis/test.c

index 66789d0f7102895b1420dfdf698ee81e1bf65911..f0d78a0dac06c3466a762674d75442624f6580bc 100644 (file)
@@ -164,8 +164,17 @@ static char *readBytes(redisReader *r, unsigned int bytes) {
 
 static char *seekNewline(char *s) {
     /* Find pointer to \r\n without strstr */
-    while(s != NULL && s[0] != '\r' && s[1] != '\n')
+    while (s != NULL) {
         s = strchr(s,'\r');
+        if (s != NULL) {
+            if (s[1] == '\n')
+                break;
+            else
+                s++;
+        } else {
+            break;
+        }
+    }
     return s;
 }
 
@@ -424,7 +433,7 @@ char *redisReplyReaderGetError(void *reader) {
     return r->error;
 }
 
-void redisReplyReaderFeed(void *reader, char *buf, int len) {
+void redisReplyReaderFeed(void *reader, char *buf, size_t len) {
     redisReader *r = reader;
 
     /* Copy the provided buffer. */
index 0a6a9a10b8b35042982bd7d87b165a29cac56855..cb25b363f96f22a0a794d0221501d806ecd91bea 100644 (file)
@@ -115,7 +115,7 @@ int redisReplyReaderSetReplyObjectFunctions(void *reader, redisReplyObjectFuncti
 void *redisReplyReaderGetObject(void *reader);
 char *redisReplyReaderGetError(void *reader);
 void redisReplyReaderFree(void *ptr);
-void redisReplyReaderFeed(void *reader, char *buf, int len);
+void redisReplyReaderFeed(void *reader, char *buf, size_t len);
 int redisReplyReaderGetReply(void *reader, void **reply);
 
 /* Functions to format a command according to the protocol. */
index 995456ed39d255752e19f987e8830c8cb82638ce..d23bc188a03ebf88dc039347e006126aeceea5b9 100644 (file)
@@ -5,6 +5,7 @@
 #include <sys/time.h>
 #include <assert.h>
 #include <unistd.h>
+#include <signal.h>
 
 #include "hiredis.h"
 
@@ -219,6 +220,17 @@ static void test_reply_reader() {
     ret = redisReplyReaderGetReply(reader,&reply);
     test_cond(ret == REDIS_OK && reply == (void*)REDIS_REPLY_STATUS);
     redisReplyReaderFree(reader);
+
+    test("Works when a single newline (\\r\\n) covers two calls to feed: ");
+    reader = redisReplyReaderCreate();
+    redisReplyReaderSetReplyObjectFunctions(reader,NULL);
+    redisReplyReaderFeed(reader,(char*)"+OK\r",4);
+    ret = redisReplyReaderGetReply(reader,&reply);
+    assert(ret == REDIS_OK && reply == NULL);
+    redisReplyReaderFeed(reader,(char*)"\n",1);
+    ret = redisReplyReaderGetReply(reader,&reply);
+    test_cond(ret == REDIS_OK && reply == (void*)REDIS_REPLY_STATUS);
+    redisReplyReaderFree(reader);
 }
 
 static void test_throughput() {