diff --git a/daemon/cli.c b/daemon/cli.c index e5e9fa26a..3bc6749b4 100644 --- a/daemon/cli.c +++ b/daemon/cli.c @@ -307,9 +307,9 @@ static void cli_incoming_set_maxopenfiles(char* buffer, int len, struct callmast static void cli_incoming_set_maxsessions(char* buffer, int len, struct callmaster* m, char* replybuffer, const char* outbufend) { int printlen = 0; int maxsessions_num; - int err = 0x80000000; int disabled = -1; str maxsessions; + char *endptr; if (len <= 1) { printlen = snprintf(replybuffer,(outbufend-replybuffer), "%s\n", "More parameters required."); @@ -320,11 +320,16 @@ static void cli_incoming_set_maxsessions(char* buffer, int len, struct callmaste ++buffer; --len; // one space maxsessions.s = buffer; maxsessions.len = len; - maxsessions_num = str_to_i(&maxsessions, err); + maxsessions_num = strtol(maxsessions.s, &endptr, 10); - if (maxsessions_num == err) { - printlen = snprintf (replybuffer,(outbufend-replybuffer), "Fail setting maxsessions to %.*s; not an integer\n", maxsessions.len, maxsessions.s); + if ((errno == ERANGE && (maxsessions_num == LONG_MAX || maxsessions_num == LONG_MIN)) || (errno != 0 && maxsessions_num == 0)) { + printlen = snprintf (replybuffer,(outbufend-replybuffer), "Fail setting maxsessions to %.*s; errno=%d\n", maxsessions.len, maxsessions.s, errno); + ADJUSTLEN(printlen,outbufend,replybuffer); + return; + } else if (endptr == maxsessions.s) { + printlen = snprintf (replybuffer,(outbufend-replybuffer), "Fail setting maxsessions to %.*s; no digists found\n", maxsessions.len, maxsessions.s); ADJUSTLEN(printlen,outbufend,replybuffer); + return; } else if (maxsessions_num < disabled) { printlen = snprintf (replybuffer,(outbufend-replybuffer), "Fail setting maxsessions to %d; either positive or -1 values allowed\n", maxsessions_num); ADJUSTLEN(printlen,outbufend,replybuffer);