diff options
| -rw-r--r-- | src/fcntl/fcntl.c | 15 | 
1 files changed, 12 insertions, 3 deletions
| diff --git a/src/fcntl/fcntl.c b/src/fcntl/fcntl.c index 4c34ba04..4a713fd4 100644 --- a/src/fcntl/fcntl.c +++ b/src/fcntl/fcntl.c @@ -13,11 +13,11 @@ int fcntl(int fd, int cmd, ...)  	arg = va_arg(ap, long);  	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_SETLKW) return syscall_cp(SYS_fcntl, fd, cmd, (void *)arg);  	if (cmd == F_GETOWN) {  		struct f_owner_ex ex;  		int ret = __syscall(SYS_fcntl, fd, F_GETOWN_EX, &ex); -		if (ret == -EINVAL) return __syscall(SYS_fcntl, fd, cmd, arg); +		if (ret == -EINVAL) return __syscall(SYS_fcntl, fd, cmd, (void *)arg);  		if (ret) return __syscall_ret(ret);  		return ex.type == F_OWNER_PGRP ? -ex.pid : ex.pid;  	} @@ -37,5 +37,14 @@ int fcntl(int fd, int cmd, ...)  		if (ret >= 0) __syscall(SYS_fcntl, ret, F_SETFD, FD_CLOEXEC);  		return __syscall_ret(ret);  	} -	return syscall(SYS_fcntl, fd, cmd, arg); +	switch (cmd) { +	case F_SETLK: +	case F_SETLKW: +	case F_GETLK: +	case F_GETOWN_EX: +	case F_SETOWN_EX: +		return syscall(SYS_fcntl, fd, cmd, (void *)arg); +	default: +		return syscall(SYS_fcntl, fd, cmd, arg); +	}  } | 
