95 #ifdef STRCASECMP_IN_STRINGS_H
116 static char *get_dict_str(
const struct CFG_PARSER *parser,
117 const char *name,
const char *defval,
126 len = strlen(strval);
127 if (min && len < min)
128 msg_fatal(
"%s: bad string length %d < %d: %s = %s",
129 parser->
name, len, min, name, strval);
130 if (max && len > max)
131 msg_fatal(
"%s: bad string length %d > %d: %s = %s",
132 parser->
name, len, max, name, strval);
138 static char *get_main_str(
const struct CFG_PARSER *parser,
139 const char *name,
const char *defval,
152 static int get_dict_int(
const struct CFG_PARSER *parser,
153 const char *name,
int defval,
int min,
int max)
162 intval = longval = strtol(strval, &end, 10);
163 if (*strval == 0 || *end != 0 || errno == ERANGE || longval != intval)
164 msg_fatal(
"%s: bad numerical configuration: %s = %s",
165 parser->
name, name, strval);
168 if (min && intval < min)
169 msg_fatal(
"%s: invalid %s parameter value %d < %d",
170 parser->
name, name, intval, min);
171 if (max && intval > max)
172 msg_fatal(
"%s: invalid %s parameter value %d > %d",
173 parser->
name, name, intval, max);
179 static int get_main_int(
const struct CFG_PARSER *parser,
180 const char *name,
int defval,
int min,
int max)
192 static int get_dict_bool(
const struct CFG_PARSER *parser,
193 const char *name,
int defval)
204 msg_fatal(
"%s: bad boolean configuration: %s = %s",
205 parser->
name, name, strval);
214 static int get_main_bool(
const struct CFG_PARSER *parser,
215 const char *name,
int defval)
229 const char *myname =
"cfg_parser_alloc";
233 if (pname == 0 || *pname == 0)
234 msg_fatal(
"%s: null parser name", myname);
237 if (*parser->
name ==
'/' || *parser->
name ==
'.') {
243 parser->
get_str = get_dict_str;
244 parser->
get_int = get_dict_int;
248 parser->
get_str = get_main_str;
249 parser->
get_int = get_main_int;
254 msg_panic(
"%s: dict_handle failed", myname);
262 const char *defval,
int min,
int max)
264 const char *myname =
"cfg_get_str";
267 strval = parser->
get_str(parser, name, (defval ? defval :
""), min, max);
268 if (defval == 0 && *strval == 0) {
275 (strval ? strval :
"<NULL>"));
284 const char *myname =
"cfg_get_int";
287 intval = parser->
get_int(parser, name, defval, min, max);
289 msg_info(
"%s: %s: %s = %d", myname, parser->
name, name, intval);
297 const char *myname =
"cfg_get_bool";
300 intval = parser->
get_bool(parser, name, defval);
303 (intval ?
"on" :
"off"));
311 const char *myname =
"cfg_parser_free";
313 if (parser->
name == 0 || *parser->
name == 0)
314 msg_panic(
"%s: null parser name", myname);
315 if (*parser->
name ==
'/' || *parser->
name ==
'.') {
char * mystrdup(const char *str)
int dict_load_file_xt(const char *dict_name, const char *path)
NORETURN msg_panic(const char *fmt,...)
int get_mail_conf_bool(const char *, int)
int cfg_get_int(const CFG_PARSER *parser, const char *name, int defval, int min, int max)
int get_mail_conf_int(const char *, int, int, int)
void dict_unregister(const char *dict_name)
const char * dict_lookup(const char *dict_name, const char *member)
DICT * dict_handle(const char *dict_name)
int(* get_int)(const struct CFG_PARSER *, const char *, int, int, int)
VSTRING * vstring_alloc(ssize_t len)
VSTRING * vstring_sprintf(VSTRING *vp, const char *format,...)
NORETURN msg_fatal(const char *fmt,...)
char * cfg_get_str(const CFG_PARSER *parser, const char *name, const char *defval, int min, int max)
CFG_PARSER * cfg_parser_free(CFG_PARSER *parser)
int strcasecmp(const char *s1, const char *s2)
CFG_PARSER * cfg_parser_alloc(const char *pname)
char * get_mail_conf_str(const char *, const char *, int, int)
int(* get_bool)(const struct CFG_PARSER *, const char *, int)
int cfg_get_bool(const CFG_PARSER *parser, const char *name, int defval)
char *(* get_str)(const struct CFG_PARSER *, const char *, const char *, int, int)
void * mymalloc(ssize_t len)
void msg_info(const char *fmt,...)