]> git.saurik.com Git - redis.git/blobdiff - redis-cli.c
Fixed redis-cli readLine loop to correctly handle EOF.
[redis.git] / redis-cli.c
index 5444ac00ce3d31ba7471ae1d08a806ea69579746..cd106684fbca6152a4fac051e4f048456d710dcd 100644 (file)
@@ -103,7 +103,8 @@ static struct redisCommand cmdTable[] = {
     {"flushdb",1,REDIS_CMD_INLINE|REDIS_CMD_RETCODEREPLY},
     {"flushall",1,REDIS_CMD_INLINE|REDIS_CMD_RETCODEREPLY},
     {"sort",-2,REDIS_CMD_INLINE|REDIS_CMD_MULTIBULKREPLY},
-    {"version",1,REDIS_CMD_INLINE|REDIS_CMD_SINGLELINEREPLY},
+    {"info",1,REDIS_CMD_INLINE|REDIS_CMD_BULKREPLY},
+    {"mget",-2,REDIS_CMD_INLINE|REDIS_CMD_MULTIBULKREPLY},
     {NULL,0,0}
 };
 
@@ -134,11 +135,13 @@ static sds cliReadLine(int fd) {
 
     while(1) {
         char c;
+        ssize_t ret;
 
-        if (read(fd,&c,1) == -1) {
+        ret = read(fd,&c,1);
+        if (ret == -1) {
             sdsfree(line);
             return NULL;
-        } else if (c == '\n') {
+        } else if ((ret == 0) || (c == '\n')) {
             break;
         } else {
             line = sdscatlen(line,&c,1);
@@ -223,7 +226,7 @@ static int cliSendCommand(int argc, char **argv) {
     }
 
     if ((rc->arity > 0 && argc != rc->arity) ||
-        (rc->arity < 0 && argc < rc->arity)) {
+        (rc->arity < 0 && argc < -rc->arity)) {
             fprintf(stderr,"Wrong number of arguments for '%s'\n",rc->name);
             return 1;
     }