diff options
author | Lennart Poettering <lennart@poettering.net> | 2010-09-15 14:37:16 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2010-09-15 14:37:45 +0200 |
commit | 2e78aa9988425d540a572535fa2e3d68ff519316 (patch) | |
tree | 33d1d0a9bd0bd7adc59336137c544a86e3070b9c | |
parent | b036fc0050b21fb0d284a11019ea0a77be264296 (diff) |
util: introduce waitpid_loop()
-rw-r--r-- | fixme | 14 | ||||
-rw-r--r-- | src/kmod-setup.c | 13 | ||||
-rw-r--r-- | src/util.c | 32 | ||||
-rw-r--r-- | src/util.h | 2 |
4 files changed, 39 insertions, 22 deletions
@@ -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 e614295f37..0bcad3ceb4 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 48cdb19ef1..805d47afb4 100644 --- a/src/util.c +++ b/src/util.c @@ -49,6 +49,7 @@ #include <netinet/ip.h> #include <linux/kd.h> #include <dlfcn.h> +#include <sys/wait.h> #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 3a7ac29fca..4bea1ecc04 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) |