X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=util.c;h=f7d538aaacf87496367661ba3822bc2f44cb6070;hb=136337ff74f05be3d42a769d9f0cb99716c5c40f;hp=8042214c8fae7fdd40494691d216624a26cfeee8;hpb=3177a7fa12247d30b854fcb7697cd578b9086bf5;p=elogind.git diff --git a/util.c b/util.c index 8042214c8..f7d538aaa 100644 --- a/util.c +++ b/util.c @@ -1359,7 +1359,9 @@ bool fstype_is_network(const char *fstype) { "smbfs", "ncpfs", "nfs", - "nfs4" + "nfs4", + "gfs", + "gfs2" }; unsigned i; @@ -1597,7 +1599,7 @@ int flush_fd(int fd) { } int acquire_terminal(const char *name, bool fail, bool force) { - int fd = -1, notify = -1, r, wd; + int fd = -1, notify = -1, r, wd = -1; assert(name); @@ -1627,8 +1629,9 @@ int acquire_terminal(const char *name, bool fail, bool force) { } for (;;) { - if ((r = flush_fd(notify)) < 0) - goto fail; + if (notify >= 0) + if ((r = flush_fd(notify)) < 0) + goto fail; /* We pass here O_NOCTTY only so that we can check the return * value TIOCSCTTY and have a reliable way to figure out if we @@ -1889,6 +1892,51 @@ int parse_usec(const char *t, usec_t *usec) { return 0; } +int make_stdio(int fd) { + int r, s, t; + + assert(fd >= 0); + + r = dup2(fd, STDIN_FILENO); + s = dup2(fd, STDOUT_FILENO); + t = dup2(fd, STDERR_FILENO); + + if (fd >= 3) + close_nointr_nofail(fd); + + if (r < 0 || s < 0 || t < 0) + return -errno; + + return 0; +} + +bool is_clean_exit(int code, int status) { + + if (code == CLD_EXITED) + return status == 0; + + /* If a daemon does not implement handlers for some of the + * signals that's not considered an unclean shutdown */ + if (code == CLD_KILLED) + return + status == SIGHUP || + status == SIGINT || + status == SIGTERM || + status == SIGPIPE; + + return false; +} + +bool is_device_path(const char *path) { + + /* Returns true on paths that refer to a device, either in + * sysfs or in /dev */ + + return + path_startswith(path, "/dev/") || + path_startswith(path, "/sys/"); +} + static const char *const ioprio_class_table[] = { [IOPRIO_CLASS_NONE] = "none", [IOPRIO_CLASS_RT] = "realtime",