int fcntl(int fd, int cmd, long arg) { if (smbw_fd(fd)) { return smbw_fcntl(fd, cmd, arg); } return real_fcntl(fd, cmd, arg); }
int fcntl(int fd, int cmd, long extra) { wlog("fcntl(%d, %d, %ld)", fd, cmd, extra); // Track close-on-exec flag if (cmd == F_SETFD) fd_map_set_cloexec(fd, extra & 1); return real_fcntl(fd, cmd, extra); }
__attribute__ ((visibility("default"))) int fcntl(int fd, int cmd, ...) { va_list ap; void *arg; wrapped_calls_fcntl++; if (fall_back && (cmd == F_DUPFD_CLOEXEC)) { errno = EINVAL; return -1; } va_start(ap, cmd); arg = va_arg(ap, void*); va_end(ap); return real_fcntl(fd, cmd, arg); }
/* * Copyright (c) 2011 Wind River Systems; see * guts/COPYRIGHT for information. * * int fcntl(int fd, int cmd, ... { struct flock *lock }) * int rc = -1; */ int save_errno; long long flag = 0; void *ptr = 0; off_t off = 0; va_start(ap, cmd); flag = va_arg(ap, long long); va_end(ap); rc = real_fcntl(fd, cmd, flag); switch (cmd) { case F_DUPFD: #ifdef F_DUPFD_CLOEXEC /* it doesn't exist now, but if I take this out they'll add it * just to mess with me. */ case F_DUPFD_CLOEXEC: #endif /* actually do something */ save_errno = errno; if (rc != -1) { pseudo_debug(2, "fcntl_dup: %d->%d\n", fd, rc); pseudo_client_op(OP_DUP, 0, fd, rc, 0, 0); }