From 575ddf671dd3bb7bcfc1157ed3383d782bf0bc96 Mon Sep 17 00:00:00 2001 From: Ricter Zheng Date: Tue, 9 Jul 2019 14:47:31 +0800 Subject: [PATCH] fix bug while no args --- src/module.c | 64 +++++++++++++++++++++++++++------------------------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/src/module.c b/src/module.c index 4027a3a..43e4893 100644 --- a/src/module.c +++ b/src/module.c @@ -1,42 +1,44 @@ #include "redismodule.h" -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include #include int DoCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { - if (argc == 2) { - size_t cmd_len; - size_t size = 1024; - char *cmd = RedisModule_StringPtrLen(argv[1], &cmd_len); + if (argc == 2) { + size_t cmd_len; + size_t size = 1024; + char *cmd = RedisModule_StringPtrLen(argv[1], &cmd_len); - FILE *fp = popen(cmd, "r"); - char *buf, *output; - buf = (char *)malloc(size); - output = (char *)malloc(size); - while ( fgets(buf, sizeof(buf), fp) != 0 ) { - if (strlen(buf) + strlen(output) >= size) { - output = realloc(output, size<<2); - size <<= 1; - } - strcat(output, buf); - } - RedisModuleString *ret = RedisModule_CreateString(ctx, output, strlen(output)); - RedisModule_ReplyWithString(ctx, ret); - pclose(fp); - } - return REDISMODULE_OK; + FILE *fp = popen(cmd, "r"); + char *buf, *output; + buf = (char *)malloc(size); + output = (char *)malloc(size); + while ( fgets(buf, sizeof(buf), fp) != 0 ) { + if (strlen(buf) + strlen(output) >= size) { + output = realloc(output, size<<2); + size <<= 1; + } + strcat(output, buf); + } + RedisModuleString *ret = RedisModule_CreateString(ctx, output, strlen(output)); + RedisModule_ReplyWithString(ctx, ret); + pclose(fp); + } else { + return RedisModule_WrongArity(ctx); + } + return REDISMODULE_OK; } int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { - if (RedisModule_Init(ctx,"system",1,REDISMODULE_APIVER_1) - == REDISMODULE_ERR) return REDISMODULE_ERR; + if (RedisModule_Init(ctx,"system",1,REDISMODULE_APIVER_1) + == REDISMODULE_ERR) return REDISMODULE_ERR; - if (RedisModule_CreateCommand(ctx, "system.exec", - DoCommand, "readonly", 1, 1, 1) == REDISMODULE_ERR) - return REDISMODULE_ERR; - return REDISMODULE_OK; + if (RedisModule_CreateCommand(ctx, "system.exec", + DoCommand, "readonly", 1, 1, 1) == REDISMODULE_ERR) + return REDISMODULE_ERR; + return REDISMODULE_OK; }