[Libsysio-commit] HEAD: libsysio/drivers/native fs_native.c
Brought to you by:
lward
From: Lee W. <lw...@us...> - 2004-02-08 23:51:58
|
Update of /cvsroot/libsysio/libsysio/drivers/native In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14749/drivers/native Modified Files: fs_native.c Log Message: This driver was nearly perfectly forgetting to pass the error number on failure. Fixed -- I think. Index: fs_native.c =================================================================== RCS file: /cvsroot/libsysio/libsysio/drivers/native/fs_native.c,v retrieving revision 1.30 retrieving revision 1.31 diff -u -w -b -B -p -r1.30 -r1.31 --- fs_native.c 6 Feb 2004 20:07:29 -0000 1.30 +++ fs_native.c 8 Feb 2004 23:48:51 -0000 1.31 @@ -745,6 +745,8 @@ native_inop_setattr(struct pnode *pno, fd < 0 ? syscall(SYS_chmod, path, mode) : syscall(SYS_fchmod, fd, mode); + if (err) + err = -errno; } if (err) mask &= ~SETATTR_MODE; @@ -761,6 +763,8 @@ native_inop_setattr(struct pnode *pno, if (mask & SETATTR_ATIME) ut.actime = stbuf->st_atime; err = syscall(__SYS_UTIME, path, &ut); + if (err) + err = -errno; } if (err) mask &= ~(SETATTR_MTIME|SETATTR_ATIME); @@ -787,6 +791,8 @@ native_inop_setattr(struct pnode *pno, mask & SETATTR_GID ? stbuf->st_gid : (gid_t )-1); + if (err) + err = -errno; } if (err) mask &= ~(SETATTR_UID|SETATTR_GID); @@ -933,6 +939,8 @@ native_inop_mkdir(struct pnode *pno, mod return -ENOMEM; err = syscall(SYS_mkdir, path, mode); + if (err != 0) + err = -errno; free(path); return err; } @@ -948,6 +956,8 @@ native_inop_rmdir(struct pnode *pno) return -ENOMEM; err = syscall(SYS_rmdir, path); + if (err != 0) + err = -errno; free(path); return err; } @@ -963,6 +973,8 @@ native_inop_symlink(struct pnode *pno, c return -ENOMEM; err = syscall(SYS_symlink, data, path); + if (err != 0) + err = -errno; free(path); return err; } @@ -1110,6 +1122,8 @@ native_inop_link(struct pnode *old, stru } err = syscall(SYS_link, opath, npath); + if (err != 0) + err = -errno; out: if (opath) @@ -1162,6 +1176,8 @@ native_inop_rename(struct pnode *old, st } err = syscall(SYS_rename, opath, npath); + if (err != 0) + err = -errno; out: if (opath) @@ -1249,6 +1265,8 @@ doiov(const struct iovec *iov, nio); if (cc > 0) nio->nio_nino->ni_fpos += cc; + else + cc = -errno; return cc; #if !(defined(REDSTORM) || defined(MAX_IOVEC)) @@ -1412,6 +1430,7 @@ native_inop_fcntl(struct inode *ino, { struct native_inode *nino = I2NI(ino); long arg; + int err; if (nino->ni_fd < 0) abort(); @@ -1420,7 +1439,9 @@ native_inop_fcntl(struct inode *ino, case F_GETFD: case F_GETFL: case F_GETOWN: - return syscall(SYS_fcntl, nino->ni_fd, cmd); + err = syscall(SYS_fcntl, nino->ni_fd, cmd); + if (err < 0) + err = -errno; case F_DUPFD: case F_SETFD: case F_SETFL: @@ -1429,11 +1450,13 @@ native_inop_fcntl(struct inode *ino, case F_SETLKW: case F_SETOWN: arg = va_arg(ap, long); - return syscall(SYS_fcntl, nino->ni_fd, cmd, arg); + err = syscall(SYS_fcntl, nino->ni_fd, cmd, arg); + if (err) + err = -errno; default: - break; + err = -EINVAL; } - return -EINVAL; + return err; } static int @@ -1496,26 +1519,34 @@ native_inop_statvfs(struct pnode *pno, static int native_inop_sync(struct inode *ino) { + int err; assert(I2NI(ino)->ni_fd >= 0); - return syscall(SYS_fsync, I2NI(ino)->ni_fd); + err = syscall(SYS_fsync, I2NI(ino)->ni_fd); + if (err) + err = -errno; + return err; } static int native_inop_datasync(struct inode *ino) { + int err; assert(I2NI(ino)->ni_fd >= 0); #ifdef NATIVE_FDATASYNC - return syscall(NATIVE_FDATASYNC, I2NI(ino)->ni_fd); + err = syscall(NATIVE_FDATASYNC, I2NI(ino)->ni_fd); #else #if 0 #warning No fdatasync system call -- Using fsync instead! #endif - return syscall(SYS_fsync, I2NI(ino)->ni_fd); + err = syscall(SYS_fsync, I2NI(ino)->ni_fd); #endif + if (err) + err = -errno; + return err; } static int |