]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: Split off event_import_field()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 16 Mar 2021 17:19:43 +0000 (19:19 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Wed, 29 Sep 2021 10:09:58 +0000 (10:09 +0000)
src/lib/lib-event.c

index cb2d663a9242d35076785f1a502f51b61a9edf25..cfe2bf34adc4964b1047aa1d6897c30caa0f9694 100644 (file)
@@ -1137,6 +1137,59 @@ static bool event_import_tv(const char *arg_secs, const char *arg_usecs,
        return TRUE;
 }
 
+static bool
+event_import_field(struct event *event, enum event_code code, const char *arg,
+                  const char *const **_args, const char **error_r)
+{
+       const char *const *args = *_args;
+       const char *error;
+
+       if (*arg == '\0') {
+               *error_r = "Field name is missing";
+               return FALSE;
+       }
+       struct event_field *field = event_get_field(event, arg);
+       if (args[0] == NULL) {
+               *error_r = "Field value is missing";
+               return FALSE;
+       }
+       i_zero(&field->value);
+       switch (code) {
+       case EVENT_CODE_FIELD_INTMAX:
+               field->value_type = EVENT_FIELD_VALUE_TYPE_INTMAX;
+               if (str_to_intmax(*args, &field->value.intmax) < 0) {
+                       *error_r = t_strdup_printf(
+                               "Invalid field value '%s' number for '%s'",
+                               *args, field->key);
+                       return FALSE;
+               }
+               break;
+       case EVENT_CODE_FIELD_STR:
+               if (field->value_type == EVENT_FIELD_VALUE_TYPE_STR &&
+                   null_strcmp(field->value.str, *args) == 0) {
+                       /* already identical value */
+                       break;
+               }
+               field->value_type = EVENT_FIELD_VALUE_TYPE_STR;
+               field->value.str = p_strdup(event->pool, *args);
+               break;
+       case EVENT_CODE_FIELD_TIMEVAL:
+               field->value_type = EVENT_FIELD_VALUE_TYPE_TIMEVAL;
+               if (!event_import_tv(args[0], args[1],
+                                    &field->value.timeval, &error)) {
+                       *error_r = t_strdup_printf("Field '%s' value '%s': %s",
+                                                  field->key, args[1], error);
+                       return FALSE;
+               }
+               args++;
+               break;
+       default:
+               i_unreached();
+       }
+       *_args = args;
+       return TRUE;
+}
+
 bool event_import_unescaped(struct event *event, const char *const *args,
                            const char **error_r)
 {
@@ -1214,51 +1267,9 @@ bool event_import_unescaped(struct event *event, const char *const *args,
                case EVENT_CODE_FIELD_INTMAX:
                case EVENT_CODE_FIELD_STR:
                case EVENT_CODE_FIELD_TIMEVAL: {
-                       if (*arg == '\0') {
-                               *error_r = "Field name is missing";
-                               return FALSE;
-                       }
-                       struct event_field *field =
-                               event_get_field(event, arg);
-                       if (args[1] == NULL) {
-                               *error_r = "Field value is missing";
-                               return FALSE;
-                       }
                        args++;
-                       i_zero(&field->value);
-                       switch (code) {
-                       case EVENT_CODE_FIELD_INTMAX:
-                               field->value_type = EVENT_FIELD_VALUE_TYPE_INTMAX;
-                               if (str_to_intmax(*args, &field->value.intmax) < 0) {
-                                       *error_r = t_strdup_printf(
-                                               "Invalid field value '%s' number for '%s'",
-                                               *args, field->key);
-                                       return FALSE;
-                               }
-                               break;
-                       case EVENT_CODE_FIELD_STR:
-                               if (field->value_type == EVENT_FIELD_VALUE_TYPE_STR &&
-                                   null_strcmp(field->value.str, *args) == 0) {
-                                       /* already identical value */
-                                       break;
-                               }
-                               field->value_type = EVENT_FIELD_VALUE_TYPE_STR;
-                               field->value.str = p_strdup(event->pool, *args);
-                               break;
-                       case EVENT_CODE_FIELD_TIMEVAL:
-                               field->value_type = EVENT_FIELD_VALUE_TYPE_TIMEVAL;
-                               if (!event_import_tv(args[0], args[1],
-                                                    &field->value.timeval, &error)) {
-                                       *error_r = t_strdup_printf(
-                                               "Field '%s' value '%s': %s",
-                                               field->key, args[1], error);
-                                       return FALSE;
-                               }
-                               args++;
-                               break;
-                       default:
-                               i_unreached();
-                       }
+                       if (!event_import_field(event, code, arg, &args, error_r))
+                               return FALSE;
                        break;
                }
                }