dbus: fix serialization of calendar timers

This commit is contained in:
Lennart Poettering 2013-01-08 20:00:01 +01:00
parent 788f75a0e7
commit 3761902e2e

View file

@ -69,13 +69,14 @@ static int bus_timer_append_timers(DBusMessageIter *i, const char *property, voi
return -ENOMEM; return -ENOMEM;
LIST_FOREACH(value, k, p->values) { LIST_FOREACH(value, k, p->values) {
char *buf; _cleanup_free_ char *buf = NULL;
const char *t; const char *t;
size_t l; size_t l;
bool b; bool b;
t = timer_base_to_string(k->base); t = timer_base_to_string(k->base);
assert(endswith(t, "Sec"));
if (endswith(t, "Sec")) {
/* s/Sec/USec/ */ /* s/Sec/USec/ */
l = strlen(t); l = strlen(t);
@ -85,6 +86,11 @@ static int bus_timer_append_timers(DBusMessageIter *i, const char *property, voi
memcpy(buf, t, l-3); memcpy(buf, t, l-3);
memcpy(buf+l-3, "USec", 5); memcpy(buf+l-3, "USec", 5);
} else {
buf = strdup(t);
if (!buf)
return -ENOMEM;
}
b = dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) && b = dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) &&
dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &buf) && dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &buf) &&
@ -92,7 +98,6 @@ static int bus_timer_append_timers(DBusMessageIter *i, const char *property, voi
dbus_message_iter_append_basic(&sub2, DBUS_TYPE_UINT64, &k->next_elapse) && dbus_message_iter_append_basic(&sub2, DBUS_TYPE_UINT64, &k->next_elapse) &&
dbus_message_iter_close_container(&sub, &sub2); dbus_message_iter_close_container(&sub, &sub2);
free(buf);
if (!b) if (!b)
return -ENOMEM; return -ENOMEM;
} }