提交 0a6649a7 编写于 作者: A antirez

COMMAND: fix argument parsing.

This fixes detection of wrong subcommand (that resulted in the default
all-commands output instead) and allows COMMAND INFO to be called
without arguments (resulting into an empty array) which is useful in
programmtically generated calls like the following (in Ruby):

    redis.commands("command","info",*mycommands)

Note: mycommands may be empty.
上级 53377f8c
......@@ -2267,6 +2267,7 @@ void timeCommand(redisClient *c) {
}
/* Helper function for addReplyCommand() to output flags. */
int addReplyCommandFlag(redisClient *c, struct redisCommand *cmd, int f, char *reply) {
if (cmd->flags & f) {
addReplyStatus(c, reply);
......@@ -2275,6 +2276,7 @@ int addReplyCommandFlag(redisClient *c, struct redisCommand *cmd, int f, char *r
return 0;
}
/* Output the representation of a Redis command. Used by the COMMAND command. */
void addReplyCommand(redisClient *c, struct redisCommand *cmd) {
if (!cmd) {
addReply(c, shared.nullbulk);
......@@ -2310,26 +2312,27 @@ void addReplyCommand(redisClient *c, struct redisCommand *cmd) {
}
}
/* COMMAND <subcommand> <args> */
void commandCommand(redisClient *c) {
dictIterator *di;
dictEntry *de;
if (c->argc > 2 && !strcasecmp(c->argv[1]->ptr, "info")) {
if (c->argc == 1) {
addReplyMultiBulkLen(c, dictSize(server.commands));
di = dictGetIterator(server.commands);
while ((de = dictNext(di)) != NULL) {
addReplyCommand(c, dictGetVal(de));
}
dictReleaseIterator(di);
} else if (!strcasecmp(c->argv[1]->ptr, "info")) {
int i;
addReplyMultiBulkLen(c, c->argc-2);
for (i = 2; i < c->argc; i++) {
addReplyCommand(c, dictFetchValue(server.commands, c->argv[i]->ptr));
}
} else if (c->argc > 2) {
} else {
addReplyError(c, "Unknown subcommand.");
return;
} else {
addReplyMultiBulkLen(c, dictSize(server.commands));
di = dictGetIterator(server.commands);
while ((de = dictNext(di)) != NULL) {
addReplyCommand(c, dictGetVal(de));
}
dictReleaseIterator(di);
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册