diff --git a/src/db.c b/src/db.c index b4788e93..df1b1951 100644 --- a/src/db.c +++ b/src/db.c @@ -1133,7 +1133,7 @@ int *sortGetKeys(struct redisCommand *cmd, robj **argv, int argc, int *numkeys) int *migrateGetKeys(struct redisCommand *cmd, robj **argv, int argc, int *numkeys) { int i, num, first, *keys; - UNUSED(cmd); + REDIS_NOTUSED(cmd); /* Assume the obvious form. */ first = 3; diff --git a/src/networking.c b/src/networking.c index acffd537..6d9cb936 100644 --- a/src/networking.c +++ b/src/networking.c @@ -1527,6 +1527,16 @@ void rewriteClientCommandVector(redisClient *c, int argc, ...) { va_end(ap); } +/* Completely replace the client command vector with the provided one. */ +void replaceClientCommandVector(redisClient *c, int argc, robj **argv) { + freeClientArgv(c); + zfree(c->argv); + c->argv = argv; + c->argc = argc; + c->cmd = lookupCommandOrOriginal(c->argv[0]->ptr); + redisAssertWithInfo(c,NULL,c->cmd != NULL); +} + /* Rewrite a single item in the command vector. * The new val ref count is incremented, and the old decremented. * diff --git a/src/redis.h b/src/redis.h index 76a707c1..6eb3ee8e 100644 --- a/src/redis.h +++ b/src/redis.h @@ -1071,6 +1071,7 @@ sds catClientInfoString(sds s, redisClient *client); sds getAllClientsInfoString(void); void rewriteClientCommandVector(redisClient *c, int argc, ...); void rewriteClientCommandArgument(redisClient *c, int i, robj *newval); +void replaceClientCommandVector(redisClient *c, int argc, robj **argv); unsigned long getClientOutputBufferMemoryUsage(redisClient *c); void freeClientsInAsyncFreeQueue(void); void asyncCloseClientOnOutputBufferLimitReached(redisClient *c);