}
static struct event_field *
-event_get_field(struct event *event, const char *key)
+event_get_field(struct event *event, const char *key, bool clear)
{
struct event_field *field;
p_array_init(&event->fields, event->pool, 8);
field = array_append_space(&event->fields);
field->key = p_strdup(event->pool, key);
+ } else if (clear) {
+ i_zero(&field->value);
}
event_set_changed(event);
return field;
return event;
}
- field = event_get_field(event, key);
+ field = event_get_field(event, key, TRUE);
field->value_type = EVENT_FIELD_VALUE_TYPE_STR;
- i_zero(&field->value);
field->value.str = p_strdup(event->pool, value);
return event;
}
struct event *
event_strlist_append(struct event *event, const char *key, const char *value)
{
- struct event_field *field = event_get_field(event, key);
+ struct event_field *field = event_get_field(event, key, FALSE);
if (field->value_type != EVENT_FIELD_VALUE_TYPE_STRLIST)
i_zero(&field->value);
event_strlist_replace(struct event *event, const char *key,
const char *const *values, unsigned int count)
{
- struct event_field *field = event_get_field(event, key);
- i_zero(&field->value);
+ struct event_field *field = event_get_field(event, key, TRUE);
field->value_type = EVENT_FIELD_VALUE_TYPE_STRLIST;
for (unsigned int i = 0; i < count; i++)
const char *key)
{
event_strlist_append(dest, key, NULL);
- struct event_field *field = event_get_field(dest, key);
+ struct event_field *field = event_get_field(dest, key, FALSE);
i_assert(field != NULL);
event_get_recursive_strlist(src, dest->pool, key,
&field->value.strlist);
{
struct event_field *field;
- field = event_get_field(event, key);
+ field = event_get_field(event, key, TRUE);
field->value_type = EVENT_FIELD_VALUE_TYPE_INTMAX;
- i_zero(&field->value);
field->value.intmax = num;
return event;
}
{
struct event_field *field;
- field = event_get_field(event, key);
+ field = event_get_field(event, key, TRUE);
field->value_type = EVENT_FIELD_VALUE_TYPE_TIMEVAL;
- i_zero(&field->value);
field->value.timeval = *tv;
return event;
}
*error_r = "Field name is missing";
return FALSE;
}
- struct event_field *field = event_get_field(event, arg);
+ struct event_field *field = event_get_field(event, arg, TRUE);
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;