From: Baptiste Daroussin Date: Tue, 2 Nov 2021 17:25:01 +0000 (+0100) Subject: controls: add a helper for conversion to long X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4aa0bdf01bd8bf3c988202a970fc478e23f88273;p=thirdparty%2Fmlmmj.git controls: add a helper for conversion to long --- diff --git a/include/controls.h b/include/controls.h index 2f563d2a..a5b56d9b 100644 --- a/include/controls.h +++ b/include/controls.h @@ -31,5 +31,8 @@ char *ctrlcontent(struct mlmmj_list *list, const char *ctrlstr); char *textcontent(struct mlmmj_list *list, const char *ctrlstr); struct strlist *ctrlvalues(struct mlmmj_list *list, const char *ctrlstr); time_t ctrltimet(struct mlmmj_list *list, const char *ctrlstr); +long ctrllong(struct mlmmj_list *list, const char *ctrlstr); +int ctrlint(struct mlmmj_list *list, const char *ctrlstr); +size_t ctrlsizet(struct mlmmj_list *list, const char *ctrlstr); #endif /* STATCTRL_H */ diff --git a/src/Makefile.am b/src/Makefile.am index 3080418d..23fb1b65 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -27,7 +27,7 @@ mlmmj_process_SOURCES = mlmmj.c mlmmj-process.c find_email_adr.c \ mylocking.c listcontrol.c random-int.c strgen.c \ print-version.c send_help.c prepstdreply.c \ do_all_the_voodoo_here.c mygetline.c gethdrline.c \ - log_error.c controls.c dumpfd2fd.c utils.c \ + log_error.c controls.c dumpfd2fd.c \ subscriberfuncs.c memory.c log_oper.c \ send_list.c readn.c getlistdelim.c unistr.c diff --git a/src/controls.c b/src/controls.c index 07e7e15d..750df087 100644 --- a/src/controls.c +++ b/src/controls.c @@ -21,6 +21,8 @@ * IN THE SOFTWARE. */ +#include + #include #include #include @@ -176,9 +178,67 @@ ctrltimet(struct mlmmj_list *list, const char *ctrlstr) char *val = ctrlvalue(list, ctrlstr); time_t ret; + if (val == NULL) + return (0); + ret = strtotimet(val, &errstr); if (errstr != NULL) { log_error(LOG_ARGS, "Invalid value for '%s': %s", ctrlstr, errstr); } + myfree(val); + return (ret); +} + +long +ctrllong(struct mlmmj_list *list, const char *ctrlstr) +{ + const char *errstr; + char *val = ctrlvalue(list, ctrlstr); + long ret; + + if (val == NULL) + return (0); + + ret = strtoim(val, LONG_MIN, LONG_MAX, &errstr); + if (errstr != NULL) { + log_error(LOG_ARGS, "Invalid value for '%s': %s", ctrlstr, errstr); + } + myfree(val); + return (ret); +} + +int +ctrlint(struct mlmmj_list *list, const char *ctrlstr) +{ + const char *errstr; + char *val = ctrlvalue(list, ctrlstr); + int ret; + + if (val == NULL) + return (0); + + ret = strtoim(val, INT_MIN, INT_MAX, &errstr); + if (errstr != NULL) { + log_error(LOG_ARGS, "Invalid value for '%s': %s", ctrlstr, errstr); + } + myfree(val); + return (ret); +} + +size_t +ctrlsizet(struct mlmmj_list *list, const char *ctrlstr) +{ + const char *errstr; + char *val = ctrlvalue(list, ctrlstr); + size_t ret; + + if (val == NULL) + return (0); + + ret = strtoim(val, 0, SIZE_T_MAX, &errstr); + if (errstr != NULL) { + log_error(LOG_ARGS, "Invalid value for '%s': %s", ctrlstr, errstr); + } + myfree(val); return (ret); }