diff --git a/unistd/file.c b/unistd/file.c index 9cd22d5d..e8485e7b 100644 --- a/unistd/file.c +++ b/unistd/file.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -35,11 +36,12 @@ extern int sys_open(const char *filename, int oflag, ...); extern int sys_mkfifo(const char *filename, mode_t mode); extern int sys_link(const char *path1, const char *path2); extern int sys_unlink(const char *path); +extern int sys_write(int fildes, const void *buf, size_t nbyte); extern int sys_pipe(int fildes[2]); extern int sys_fstat(int fd, struct stat *buf); WRAP_ERRNO_DEF(int, read, (int fildes, void *buf, size_t nbyte), (fildes, buf, nbyte)) -WRAP_ERRNO_DEF(int, write, (int fildes, const void *buf, size_t nbyte), (fildes, buf, nbyte)) +// WRAP_ERRNO_DEF(int, write, (int fildes, const void *buf, size_t nbyte), (fildes, buf, nbyte)) WRAP_ERRNO_DEF(int, close, (int fildes), (fildes)) WRAP_ERRNO_DEF(int, ftruncate, (int fildes, off_t length), (fildes, length)) WRAP_ERRNO_DEF(off_t, lseek, (int fildes, off_t offset, int whence), (fildes, offset, whence)) @@ -49,6 +51,17 @@ WRAP_ERRNO_DEF(int, dup2, (int fildes, int fildes2), (fildes, fildes2)) // WRAP_ERRNO_DEF(int, fstat, (int fd, struct stat *buf), (fd, buf)) +int write(int fildes, const void *buf, size_t nbyte) +{ + int err; + + if ((err = sys_write(fildes, buf, nbyte)) == -EPIPE) + raise(SIGPIPE); + + return SET_ERRNO(err); +} + + int pipe(int fildes[2]) { int err;