93 static const char myname[] =
"attr_override";
104 va_start(ap, parens);
109 msg_panic(
"%s: multiple ATTR_OVER_INT_TABLE", myname);
114 msg_panic(
"%s: multiple ATTR_OVER_STR_TABLE", myname);
119 msg_panic(
"%s: multiple ATTR_OVER_TIME_TABLE", myname);
123 msg_panic(
"%s: unknown argument type: %d", myname, idx);
131 while ((nameval =
mystrtokq(&cp, sep, parens)) != 0) {
148 if (*nameval == parens[0]
152 msg_fatal(
"malformed option: %s: \"...%s...\"", err, nameval);
157 for (sp = str_table; sp != 0 && found == 0 && sp->
name != 0; sp++) {
158 if (strcmp(sp->
name, key) != 0)
164 for (ip = int_table; ip != 0 && found == 0 && ip->
name != 0; ip++) {
165 if (strcmp(ip->
name, key) != 0)
169 int_val = longval = strtol(value, &end, 10);
170 if (*value == 0 || *end != 0 || errno == ERANGE
171 || longval != int_val)
172 msg_fatal(
"bad numerical configuration: %s = %s", key, value);
177 for (tp = time_table; tp != 0 && found == 0 && tp->
name != 0; tp++) {
178 if (strcmp(tp->
name, key) != 0)
180 def_unit = tp->
defval[strspn(tp->
defval,
"0123456789")];
181 if (
conv_time(value, &int_val, def_unit) == 0)
182 msg_fatal(
"%s: bad time value or unit: %s", key, value);
188 msg_fatal(
"unknown option: \"%s = %s\"", key, value);
char * extpar(char **bp, const char *parens, int flags)
NORETURN msg_panic(const char *fmt,...)
void attr_override(char *cp, const char *sep, const char *parens,...)
int conv_time(const char *strval, int *timval, int def_unit)
char * mystrtokq(char **src, const char *sep, const char *parens)
#define ATTR_OVER_STR_TABLE
const char * split_nameval(char *buf, char **name, char **value)
void check_mail_conf_str(const char *, const char *, int, int)
NORETURN msg_fatal(const char *fmt,...)
void check_mail_conf_int(const char *, int, int, int)
#define ATTR_OVER_TIME_TABLE
void check_mail_conf_time(const char *, int, int, int)
#define ATTR_OVER_INT_TABLE