Support more human friendly k/d/x-line duration format

This commit is contained in:
David Schultz 2021-04-07 22:41:52 +01:00 committed by Ed Kellett
parent 22ebfd257e
commit 93035e75d9

View file

@ -685,23 +685,43 @@ time_t
valid_temp_time(const char *p) valid_temp_time(const char *p)
{ {
time_t result = 0; time_t result = 0;
long current = 0;
char *ch = strdup(p), *och;
while(*p) while (*ch) {
{ och = ch;
if(IsDigit(*p)) current = strtol(ch, &ch, 10);
{ if (errno == ERANGE)
result *= 10;
result += ((*p) & 0xF);
p++;
}
else
return -1; return -1;
if (och == ch)
/* No numbers were given so return invalid */
return -1;
if (current) {
switch (*ch) {
case '\0': /* No unit was given so send it back as minutes */
case 'm':
result += (current * 60);
break;
case 'h':
result += (current * 3600);
break;
case 'd':
result += (current * 86400);
break;
case 'w':
result += (current * 604800);
break;
default:
/* Bad time unit was given */
return -1;
}
if (*ch++ == '\0')
break;
}
} }
if(result > (60 * 60 * 24 * 7 * 52))
if(result > (60 * 24 * 7 * 52)) result = (60 * 60 * 24 * 7 * 52);
result = (60 * 24 * 7 * 52); return result;
return(result * 60);
} }
/* Propagated bans are expired elsewhere. */ /* Propagated bans are expired elsewhere. */