LOLWUT: ability to specify VERSION <ver> option.

This commit is contained in:
antirez 2019-10-04 19:18:45 +02:00
parent 9073d56eec
commit bd60447066

View File

@ -50,16 +50,22 @@ void lolwutUnstableCommand(client *c) {
sdsfree(rendered); sdsfree(rendered);
} }
/* LOLWUT [<version>] */ /* LOLWUT [VERSION <version>] [... version specific arguments ...] */
void lolwutCommand(client *c) { void lolwutCommand(client *c) {
char *v = REDIS_VERSION; char *v = REDIS_VERSION;
char verstr[64]; char verstr[64];
if (c->argc == 2) { if (c->argc >= 3 && !strcasecmp(c->argv[1]->ptr,"version")) {
long ver; 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); snprintf(verstr,sizeof(verstr),"%u.0.0",(unsigned int)ver);
v = verstr; 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') || if ((v[0] == '5' && v[1] == '.' && v[2] != '9') ||
@ -70,6 +76,12 @@ void lolwutCommand(client *c) {
lolwut6Command(c); lolwut6Command(c);
else else
lolwutUnstableCommand(c); lolwutUnstableCommand(c);
/* Fix back argc/argv in case of VERSION argument. */
if (v == verstr) {
c->argv -= 2;
c->argc += 2;
}
} }
/* ========================== LOLWUT Canvase =============================== /* ========================== LOLWUT Canvase ===============================