summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/util.c18
-rw-r--r--src/util.h2
2 files changed, 20 insertions, 0 deletions
diff --git a/src/util.c b/src/util.c
index 7f59021826..4a735dba58 100644
--- a/src/util.c
+++ b/src/util.c
@@ -4437,6 +4437,24 @@ char* hostname_cleanup(char *s) {
return s;
}
+int pipe_eof(int fd) {
+ struct pollfd pollfd;
+ int r;
+
+ zero(pollfd);
+ pollfd.fd = fd;
+ pollfd.events = POLLIN|POLLHUP;
+
+ r = poll(&pollfd, 1, 0);
+ if (r < 0)
+ return -errno;
+
+ if (r == 0)
+ return 0;
+
+ return pollfd.revents & POLLHUP;
+}
+
int terminal_vhangup_fd(int fd) {
if (ioctl(fd, TIOCVHANGUP) < 0)
return -errno;
diff --git a/src/util.h b/src/util.h
index f2156afb60..6076e69dbb 100644
--- a/src/util.h
+++ b/src/util.h
@@ -357,6 +357,8 @@ int chmod_and_chown(const char *path, mode_t mode, uid_t uid, gid_t gid);
int rm_rf(const char *path, bool only_dirs, bool delete_root);
+int pipe_eof(int fd);
+
cpu_set_t* cpu_set_malloc(unsigned *ncpus);
void status_vprintf(const char *format, va_list ap);