summaryrefslogtreecommitdiff
path: root/src/fd.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fd.c')
-rw-r--r--src/fd.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/fd.c b/src/fd.c
new file mode 100644
index 0000000..776575c
--- /dev/null
+++ b/src/fd.c
@@ -0,0 +1,30 @@
+#include <fcntl.h>
+#include "fd.h"
+
+/**
+ @file fd.c
+ @autor djb
+ @source qmail
+ @brief file descriptor manipulation
+*/
+
+int close(int __fd); /* we won't use unistd.h here */
+
+int fd_copy(int to,int from)
+{
+ if (to == from) return 0;
+ if (fcntl(from,F_GETFL,0) == -1) return -1;
+ close(to);
+ if (fcntl(from,F_DUPFD,to) == -1) return -1;
+ return 0;
+}
+
+int fd_move(int to,int from)
+{
+ if (to == from) return 0;
+ if (fd_copy(to,from) == -1) return -1;
+ close(from);
+ return 0;
+}
+
+int fd_coe(int fd) {return fcntl(fd,F_SETFD,1); }