summaryrefslogtreecommitdiffstats
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/main.c b/main.c
index 70f4d8b..f77d787 100644
--- a/main.c
+++ b/main.c
@@ -61,6 +61,28 @@
#include <unistd.h>
/**
+ * Check if a file descriptor is open.
+ */
+static bool isopen(int fd) {
+ return fcntl(fd, F_GETFD) >= 0 || errno != EBADF;
+}
+
+/**
+ * Open a file and redirect it to a particular descriptor.
+ */
+static int redirect(int fd, const char *path, int flags) {
+ int ret = open(path, flags);
+
+ if (ret >= 0 && ret != fd) {
+ int orig = ret;
+ ret = dup2(orig, fd);
+ close(orig);
+ }
+
+ return ret;
+}
+
+/**
* Make sure the standard streams std{in,out,err} are open. If they are not,
* future open() calls may use those file descriptors, and std{in,out,err} will
* use them unintentionally.