From 2e78aa9988425d540a572535fa2e3d68ff519316 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 15 Sep 2010 14:37:16 +0200 Subject: [PATCH] util: introduce waitpid_loop() --- fixme | 14 ++++++++++---- src/kmod-setup.c | 13 ++----------- src/util.c | 32 +++++++++++++++++++++++++------- src/util.h | 2 ++ 4 files changed, 39 insertions(+), 22 deletions(-) diff --git a/fixme b/fixme index 2e7cd3b10..bce501c13 100644 --- a/fixme +++ b/fixme @@ -3,8 +3,6 @@ * read /etc/locale, and export LANG= and friends to started services allow overwrite of setting by kernel commandline: locale.LANG=, ... -* ABI: tcpwrap "legacy", disable D-Bus export if not compiled-in - * oneshot services which do not remain: 'exited' instead of 'dead'? it should be visible in 'systemctl' that they have been run @@ -88,6 +86,16 @@ * support dbus introspection in mid-level object paths, i.e. in /org/freedesktop/systemd/units/. +* default.target auch in /lib linken + +* systemctl auto-pager a la git + +* console setup + +* fsck setup + +* merge CK + External: * place /etc/inittab with explaining blurb. @@ -100,8 +108,6 @@ External: * make sysinit honour forcefsck/fastboot from the kernel command line fsck.mode=auto|force|skip -* ck logging, ssd readahead - * pam: fix double sudo session cleanup: http://www.gratisoft.us/bugzilla/show_bug.cgi?id=421 diff --git a/src/kmod-setup.c b/src/kmod-setup.c index e614295f3..0bcad3ceb 100644 --- a/src/kmod-setup.c +++ b/src/kmod-setup.c @@ -76,17 +76,8 @@ int kmod_setup(void) { if (r < 0) return r; - for (;;) { - if (waitpid(pid, &status, 0) < 0) { - - if (errno == EINTR) - continue; - - return -errno; - } - - break; - } + if ((r = waitpid_loop(pid, &status)) < 0) + return -errno; if (WIFEXITED(status)) { if (WEXITSTATUS(status) != 0) { diff --git a/src/util.c b/src/util.c index 48cdb19ef..805d47afb 100644 --- a/src/util.c +++ b/src/util.c @@ -49,6 +49,7 @@ #include #include #include +#include #include "macro.h" #include "util.h" @@ -2849,18 +2850,18 @@ void status_welcome(void) { free(r); #elif defined(TARGET_DEBIAN) - char *r; + char *r; - if (read_one_line_file("/etc/debian_version", &r) < 0) - return; + if (read_one_line_file("/etc/debian_version", &r) < 0) + return; - truncate_nl(r); + truncate_nl(r); - status_printf("Welcome to Debian \x1B[1;31m%s\x1B[0m!\n", r); /* Light Red for Debian */ + status_printf("Welcome to Debian \x1B[1;31m%s\x1B[0m!\n", r); /* Light Red for Debian */ - free(r); + free(r); #elif defined(TARGET_ARCH) - status_printf("Welcome to \x1B[1;36mArch Linux\x1B[0m!\n"); /* Cyan for Arch */ + status_printf("Welcome to \x1B[1;36mArch Linux\x1B[0m!\n"); /* Cyan for Arch */ #else #warning "You probably should add a welcome text logic here." #endif @@ -3100,6 +3101,23 @@ char *unquote(const char *s, const char quote) { return strdup(s); } +int waitpid_loop(pid_t pid, int *status) { + assert(pid >= 1); + assert(status); + + for (;;) { + if (waitpid(pid, status, 0) < 0) { + + if (errno == EINTR) + continue; + + return -errno; + } + + return 0; + } +} + static const char *const ioprio_class_table[] = { [IOPRIO_CLASS_NONE] = "none", [IOPRIO_CLASS_RT] = "realtime", diff --git a/src/util.h b/src/util.h index 3a7ac29fc..4bea1ecc0 100644 --- a/src/util.h +++ b/src/util.h @@ -345,6 +345,8 @@ int touch(const char *path); char *unquote(const char *s, const char quote); +int waitpid_loop(pid_t pid, int *status); + #define NULSTR_FOREACH(i, l) \ for ((i) = (l); (i) && *(i); (i) = strchr((i), 0)+1) -- 2.30.2