mirror of https://mirror.osredm.com/root/redis.git
Merge branch 'unstable' of github.com:/antirez/redis into unstable
This commit is contained in:
commit
694145bd74
|
@ -39,7 +39,7 @@ endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# To get ARM stack traces if Redis crashes we need a special C flag.
|
# To get ARM stack traces if Redis crashes we need a special C flag.
|
||||||
ifneq (,$(findstring armv,$(uname_M)))
|
ifneq (,$(filter aarch64 armv,$(uname_M)))
|
||||||
CFLAGS+=-funwind-tables
|
CFLAGS+=-funwind-tables
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
|
@ -688,6 +688,8 @@ static void *getMcontextEip(ucontext_t *uc) {
|
||||||
return (void*) uc->uc_mcontext.sc_ip;
|
return (void*) uc->uc_mcontext.sc_ip;
|
||||||
#elif defined(__arm__) /* Linux ARM */
|
#elif defined(__arm__) /* Linux ARM */
|
||||||
return (void*) uc->uc_mcontext.arm_pc;
|
return (void*) uc->uc_mcontext.arm_pc;
|
||||||
|
#elif defined(__aarch64__) /* Linux AArch64 */
|
||||||
|
return (void*) uc->uc_mcontext.pc;
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -1058,7 +1058,7 @@ static int cliReadReply(int output_raw_strings) {
|
||||||
return REDIS_OK;
|
return REDIS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cliSendCommand(int argc, char **argv, int repeat) {
|
static int cliSendCommand(int argc, char **argv, long repeat) {
|
||||||
char *command = argv[0];
|
char *command = argv[0];
|
||||||
size_t *argvlen;
|
size_t *argvlen;
|
||||||
int j, output_raw;
|
int j, output_raw;
|
||||||
|
@ -1121,7 +1121,7 @@ static int cliSendCommand(int argc, char **argv, int repeat) {
|
||||||
for (j = 0; j < argc; j++)
|
for (j = 0; j < argc; j++)
|
||||||
argvlen[j] = sdslen(argv[j]);
|
argvlen[j] = sdslen(argv[j]);
|
||||||
|
|
||||||
while(repeat--) {
|
while(repeat-- > 0) {
|
||||||
redisAppendCommandArgv(context,argc,(const char**)argv,argvlen);
|
redisAppendCommandArgv(context,argc,(const char**)argv,argvlen);
|
||||||
while (config.monitor_mode) {
|
while (config.monitor_mode) {
|
||||||
if (cliReadReply(output_raw) != REDIS_OK) exit(1);
|
if (cliReadReply(output_raw) != REDIS_OK) exit(1);
|
||||||
|
@ -1229,6 +1229,7 @@ static int parseOptions(int argc, char **argv) {
|
||||||
} else if (!strcmp(argv[i],"-n") && !lastarg) {
|
} else if (!strcmp(argv[i],"-n") && !lastarg) {
|
||||||
config.dbnum = atoi(argv[++i]);
|
config.dbnum = atoi(argv[++i]);
|
||||||
} else if (!strcmp(argv[i],"-a") && !lastarg) {
|
} else if (!strcmp(argv[i],"-a") && !lastarg) {
|
||||||
|
fputs("Warning: Using a password with '-a' option on the command line interface may not be safe.\n", stderr);
|
||||||
config.auth = argv[++i];
|
config.auth = argv[++i];
|
||||||
} else if (!strcmp(argv[i],"-u") && !lastarg) {
|
} else if (!strcmp(argv[i],"-u") && !lastarg) {
|
||||||
parseRedisUri(argv[++i]);
|
parseRedisUri(argv[++i]);
|
||||||
|
@ -1621,9 +1622,35 @@ static void repl(void) {
|
||||||
cliRefreshPrompt();
|
cliRefreshPrompt();
|
||||||
while((line = linenoise(context ? config.prompt : "not connected> ")) != NULL) {
|
while((line = linenoise(context ? config.prompt : "not connected> ")) != NULL) {
|
||||||
if (line[0] != '\0') {
|
if (line[0] != '\0') {
|
||||||
|
long repeat = 1;
|
||||||
|
int skipargs = 0;
|
||||||
|
char *endptr = NULL;
|
||||||
|
|
||||||
argv = cliSplitArgs(line,&argc);
|
argv = cliSplitArgs(line,&argc);
|
||||||
|
|
||||||
|
/* check if we have a repeat command option and
|
||||||
|
* need to skip the first arg */
|
||||||
|
if (argv && argc > 0) {
|
||||||
|
errno = 0;
|
||||||
|
repeat = strtol(argv[0], &endptr, 10);
|
||||||
|
if (argc > 1 && *endptr == '\0') {
|
||||||
|
if (errno == ERANGE || errno == EINVAL || repeat <= 0) {
|
||||||
|
fputs("Invalid redis-cli repeat command option value.\n", stdout);
|
||||||
|
sdsfreesplitres(argv, argc);
|
||||||
|
linenoiseFree(line);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
skipargs = 1;
|
||||||
|
} else {
|
||||||
|
repeat = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Won't save auth command in history file */
|
||||||
|
if (!(argv && argc > 0 && !strcasecmp(argv[0+skipargs], "auth"))) {
|
||||||
if (history) linenoiseHistoryAdd(line);
|
if (history) linenoiseHistoryAdd(line);
|
||||||
if (historyfile) linenoiseHistorySave(historyfile);
|
if (historyfile) linenoiseHistorySave(historyfile);
|
||||||
|
}
|
||||||
|
|
||||||
if (argv == NULL) {
|
if (argv == NULL) {
|
||||||
printf("Invalid argument(s)\n");
|
printf("Invalid argument(s)\n");
|
||||||
|
@ -1636,6 +1663,8 @@ static void repl(void) {
|
||||||
exit(0);
|
exit(0);
|
||||||
} else if (argv[0][0] == ':') {
|
} else if (argv[0][0] == ':') {
|
||||||
cliSetPreferences(argv,argc,1);
|
cliSetPreferences(argv,argc,1);
|
||||||
|
sdsfreesplitres(argv,argc);
|
||||||
|
linenoiseFree(line);
|
||||||
continue;
|
continue;
|
||||||
} else if (strcasecmp(argv[0],"restart") == 0) {
|
} else if (strcasecmp(argv[0],"restart") == 0) {
|
||||||
if (config.eval) {
|
if (config.eval) {
|
||||||
|
@ -1655,15 +1684,6 @@ static void repl(void) {
|
||||||
linenoiseClearScreen();
|
linenoiseClearScreen();
|
||||||
} else {
|
} else {
|
||||||
long long start_time = mstime(), elapsed;
|
long long start_time = mstime(), elapsed;
|
||||||
int repeat, skipargs = 0;
|
|
||||||
char *endptr;
|
|
||||||
|
|
||||||
repeat = strtol(argv[0], &endptr, 10);
|
|
||||||
if (argc > 1 && *endptr == '\0' && repeat) {
|
|
||||||
skipargs = 1;
|
|
||||||
} else {
|
|
||||||
repeat = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
issueCommandRepeat(argc-skipargs, argv+skipargs, repeat);
|
issueCommandRepeat(argc-skipargs, argv+skipargs, repeat);
|
||||||
|
|
||||||
|
|
|
@ -1073,7 +1073,7 @@ void xaddCommand(client *c) {
|
||||||
int field_pos = i+1;
|
int field_pos = i+1;
|
||||||
|
|
||||||
/* Check arity. */
|
/* Check arity. */
|
||||||
if ((c->argc - field_pos) < 2 || (c->argc-field_pos % 2) == 1) {
|
if ((c->argc - field_pos) < 2 || ((c->argc-field_pos) % 2) == 1) {
|
||||||
addReplyError(c,"wrong number of arguments for XADD");
|
addReplyError(c,"wrong number of arguments for XADD");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue