From 84c270d45ec47f2e42c4e2780ad94f51e70b0ae8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Mon, 11 Jan 2016 17:19:25 -0500 Subject: [PATCH] sd-event: check clock argument to sd_event_now() sd_event_now() is a public function, so we must check all arguments for validity. Update man page and add tests. Sample debug message: Assertion 'IN_SET(clock, CLOCK_REALTIME, CLOCK_REALTIME_ALARM, CLOCK_MONOTONIC, CLOCK_BOOTTIME, CLOCK_BOOTTIME_ALARM)' failed at src/libelogind/sd-event/sd-event.c:2719, function sd_event_now(). Ignoring. --- man/sd_event_now.xml | 8 +++++++- src/libelogind/sd-event/sd-event.c | 9 +++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/man/sd_event_now.xml b/man/sd_event_now.xml index 4491677c9..578213cd7 100644 --- a/man/sd_event_now.xml +++ b/man/sd_event_now.xml @@ -114,13 +114,19 @@ + + -EOPNOTSUPP + + Unsupported clock type. + + + -ECHILD The event loop object was created in a different process. - diff --git a/src/libelogind/sd-event/sd-event.c b/src/libelogind/sd-event/sd-event.c index 79788ea3f..4d7f46206 100644 --- a/src/libelogind/sd-event/sd-event.c +++ b/src/libelogind/sd-event/sd-event.c @@ -2771,6 +2771,12 @@ _public_ int sd_event_now(sd_event *e, clockid_t clock, uint64_t *usec) { assert_return(e, -EINVAL); assert_return(usec, -EINVAL); assert_return(!event_pid_changed(e), -ECHILD); + assert_return(IN_SET(clock, + CLOCK_REALTIME, + CLOCK_REALTIME_ALARM, + CLOCK_MONOTONIC, + CLOCK_BOOTTIME, + CLOCK_BOOTTIME_ALARM), -EOPNOTSUPP); if (!dual_timestamp_is_set(&e->timestamp)) { /* Implicitly fall back to now() if we never ran @@ -2790,8 +2796,7 @@ _public_ int sd_event_now(sd_event *e, clockid_t clock, uint64_t *usec) { *usec = e->timestamp.monotonic; break; - case CLOCK_BOOTTIME: - case CLOCK_BOOTTIME_ALARM: + default: *usec = e->timestamp_boottime; break; } -- 2.30.2