]> git.ipfire.org Git - thirdparty/mlmmj.git/commitdiff
controls: add a helper for conversion to long
authorBaptiste Daroussin <bapt@FreeBSD.org>
Tue, 2 Nov 2021 17:25:01 +0000 (18:25 +0100)
committerBaptiste Daroussin <bapt@FreeBSD.org>
Wed, 3 Nov 2021 13:10:28 +0000 (14:10 +0100)
include/controls.h
src/Makefile.am
src/controls.c

index 2f563d2a0b1e3c1bc57d635b5f5866d193c3ff31..a5b56d9bc09b29c50aee6d1670b3026ee0e75b6b 100644 (file)
@@ -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 */
index 3080418ddbea2b5774c1e5d23307a2694bfd27db..23fb1b6549b5b64f36b28eb65d0419ccdda8637c 100644 (file)
@@ -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
 
index 07e7e15d35b717271878fae54572b23e30b80683..750df0874cd1a2194e0e68310493a13f5c8db7db 100644 (file)
@@ -21,6 +21,8 @@
  * IN THE SOFTWARE.
  */
 
+#include <sys/limits.h>
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <errno.h>
@@ -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);
 }