diff options
Diffstat (limited to 'src/fd.c')
-rw-r--r-- | src/fd.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/fd.c b/src/fd.c new file mode 100644 index 0000000..c3cc0f7 --- /dev/null +++ b/src/fd.c @@ -0,0 +1,33 @@ +#include <fcntl.h> +#include "fd.h" + +/** + * @file fd.c + * @autor djb + * @ref 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); +} |