summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2014-05-06 13:07:15 +0200
committerLennart Poettering <lennart@poettering.net>2014-05-06 13:07:15 +0200
commit376cd3b89c62f580a6f576cecfbbb28d3944118f (patch)
treeb3c38305268bf87703884743a3c04b302fbecb15
parent2db3e2023d1af9eab6ebecddbf64812be2b104f5 (diff)
list: make LIST_FIND_TAIL work for empty lists
-rw-r--r--src/shared/list.h22
-rw-r--r--src/timesync/timesyncd.c9
2 files changed, 17 insertions, 14 deletions
diff --git a/src/shared/list.h b/src/shared/list.h
index e55b91cea4..c020f7e936 100644
--- a/src/shared/list.h
+++ b/src/shared/list.h
@@ -75,20 +75,26 @@
#define LIST_FIND_HEAD(name,item,head) \
do { \
typeof(*(item)) *_item = (item); \
- assert(_item); \
- while (_item->name##_prev) \
- _item = _item->name##_prev; \
- (head) = _item; \
+ if (!_item) \
+ (head) = NULL; \
+ else { \
+ while (_item->name##_prev) \
+ _item = _item->name##_prev; \
+ (head) = _item; \
+ } \
} while (false)
/* Find the tail of the list */
#define LIST_FIND_TAIL(name,item,tail) \
do { \
typeof(*(item)) *_item = (item); \
- assert(_item); \
- while (_item->name##_next) \
- _item = _item->name##_next; \
- (tail) = _item; \
+ if (!_item) \
+ (tail) = NULL; \
+ else { \
+ while (_item->name##_next) \
+ _item = _item->name##_next; \
+ (tail) = _item; \
+ } \
} while (false)
/* Insert an item after another one (a = where, b = what) */
diff --git a/src/timesync/timesyncd.c b/src/timesync/timesyncd.c
index 1c0f113778..fa9671da1d 100644
--- a/src/timesync/timesyncd.c
+++ b/src/timesync/timesyncd.c
@@ -335,7 +335,7 @@ static int manager_clock_watch_setup(Manager *m) {
assert(m);
m->event_clock_watch = sd_event_source_unref(m->event_clock_watch);
- m->clock_watch_fd = safe_close(m->clock_watch_fd);
+ safe_close(m->clock_watch_fd);
m->clock_watch_fd = timerfd_create(CLOCK_REALTIME, TFD_NONBLOCK|TFD_CLOEXEC);
if (m->clock_watch_fd < 0) {
@@ -950,11 +950,8 @@ static int manager_add_server(Manager *m, const char *server) {
return -ENOMEM;
}
- if (m->servers) {
- LIST_FIND_TAIL(names, m->servers, tail);
- LIST_INSERT_AFTER(names, m->servers, tail, n);
- } else
- LIST_PREPEND(names, m->servers, n);
+ LIST_FIND_TAIL(names, m->servers, tail);
+ LIST_INSERT_AFTER(names, m->servers, tail, n);
return 0;
}