fix F_GETOWN return value handling
authorRich Felker <dalias@aerifal.cx>
Mon, 10 Oct 2011 02:51:03 +0000 (22:51 -0400)
committerRich Felker <dalias@aerifal.cx>
Mon, 10 Oct 2011 02:51:03 +0000 (22:51 -0400)
the fcntl syscall can return a negative value when the command is
F_GETOWN, and this is not an error code but an actual value. thus we
must special-case it and avoid calling __syscall_ret to set errno.
this fix is better than the glibc fix (using F_GETOWN_EX) which only
works on newer kernels and is more complex.

src/fcntl/fcntl.c

index 2c9fb6f..cc3d6cc 100644 (file)
@@ -13,6 +13,7 @@ int fcntl(int fd, int cmd, ...)
        va_end(ap);
        if (cmd == F_SETFL) arg |= O_LARGEFILE;
        if (cmd == F_SETLKW) return syscall_cp(SYS_fcntl, fd, cmd, arg);
+       if (cmd == F_GETOWN) return __syscall(SYS_fcntl, fd, cmd, arg);
        return syscall(SYS_fcntl, fd, cmd, arg);
 }