Ver Fonte

fix F_GETOWN return value handling

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.
Rich Felker há 13 anos atrás
pai
commit
8e8ddeff7e
1 ficheiros alterados com 1 adições e 0 exclusões
  1. 1 0
      src/fcntl/fcntl.c

+ 1 - 0
src/fcntl/fcntl.c

@@ -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);
 }