summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2019-10-04 19:18:45 +0200
committerantirez <antirez@gmail.com>2019-10-04 19:19:54 +0200
commitbd6044706641fa6370a90dc5347e6cd37f5930eb (patch)
tree53e3a3553eca9ea74514aa7a46d41322e7775787
parent9073d56eec0d37dda201b8aaa7995652fb8afc33 (diff)
downloadredis-bd6044706641fa6370a90dc5347e6cd37f5930eb.tar.gz
LOLWUT: ability to specify VERSION <ver> option.
-rw-r--r--src/lolwut.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/lolwut.c b/src/lolwut.c
index d3e8fbad5..7e2ceca78 100644
--- a/src/lolwut.c
+++ b/src/lolwut.c
@@ -50,16 +50,22 @@ void lolwutUnstableCommand(client *c) {
sdsfree(rendered);
}
-/* LOLWUT [<version>] */
+/* LOLWUT [VERSION <version>] [... version specific arguments ...] */
void lolwutCommand(client *c) {
char *v = REDIS_VERSION;
char verstr[64];
- if (c->argc == 2) {
+ if (c->argc >= 3 && !strcasecmp(c->argv[1]->ptr,"version")) {
long ver;
- if (getLongFromObjectOrReply(c,c->argv[1],&ver,NULL) != C_OK) return;
+ if (getLongFromObjectOrReply(c,c->argv[2],&ver,NULL) != C_OK) return;
snprintf(verstr,sizeof(verstr),"%u.0.0",(unsigned int)ver);
v = verstr;
+
+ /* Adjust argv/argc to filter the "VERSION ..." option, since the
+ * specific LOLWUT version implementations don't know about it
+ * and expect their arguments. */
+ c->argv += 2;
+ c->argc -= 2;
}
if ((v[0] == '5' && v[1] == '.' && v[2] != '9') ||
@@ -70,6 +76,12 @@ void lolwutCommand(client *c) {
lolwut6Command(c);
else
lolwutUnstableCommand(c);
+
+ /* Fix back argc/argv in case of VERSION argument. */
+ if (v == verstr) {
+ c->argv -= 2;
+ c->argc += 2;
+ }
}
/* ========================== LOLWUT Canvase ===============================