[Libsysio-commit] HEAD: libsysio/src fcntl.c
Brought to you by:
lward
From: Lee W. <lw...@us...> - 2004-07-26 17:07:58
|
Update of /cvsroot/libsysio/libsysio/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16218 Modified Files: fcntl.c Log Message: Inconsistencies for WITH_LUSTRE_HACK. Implemented the way the drivers are expected to do it now. Index: fcntl.c =================================================================== RCS file: /cvsroot/libsysio/libsysio/src/fcntl.c,v retrieving revision 1.17 retrieving revision 1.18 diff -u -w -b -B -p -r1.17 -r1.18 --- fcntl.c 26 Jul 2004 16:37:18 -0000 1.17 +++ fcntl.c 26 Jul 2004 17:07:49 -0000 1.18 @@ -58,16 +58,16 @@ #include <syscall.h> static int -_sysio_fcntl(int fd, int cmd, va_list ap) +_sysio_fcntl(int fd, int cmd, va_list ap, int *rtn) { - int err; long arg; switch (cmd) { case F_GETFD: case F_GETFL: case F_GETOWN: - return syscall(SYS_fcntl, fd, cmd); + *rtn = syscall(SYS_fcntl, fd, cmd); + break; case F_DUPFD: case F_SETFD: case F_SETFL: @@ -76,11 +76,14 @@ _sysio_fcntl(int fd, int cmd, va_list ap case F_SETLKW: case F_SETOWN: arg = va_arg(ap, long); - return syscall(SYS_fcntl, fd, cmd, arg); + *rtn = syscall(SYS_fcntl, fd, cmd, arg); + break; + default: + *rtn = -1; + errno = EINVAL; } - errno = ENOSYS; - return -1; + return *rtn == -1 ? -errno : 0; } #endif @@ -99,12 +102,12 @@ SYSIO_INTERFACE_NAME(fcntl)(int fd, int if (!fil) { #ifdef HAVE_LUSTRE_HACK va_start(ap, cmd); - err = _sysio_fcntl(fd, cmd, ap); + err = _sysio_fcntl(fd, cmd, ap, &rtn); va_end(ap); - if (err == -1) - err = -errno; goto out; #else + + rtn = -1; err = -EBADF; goto out; #endif @@ -120,10 +123,12 @@ SYSIO_INTERFACE_NAME(fcntl)(int fd, int newfd = va_arg(ap, long); va_end(ap); if (newfd != (int )newfd || newfd < 0) { + rtn = -1; err = -EBADF; goto out; } err = _sysio_fd_dup2(fd, (int )newfd); + rtn = !err ? (int )newfd : -1; } break; default: |