int __wrap_accept(int fd, struct sockaddr *addr, socklen_t * addrlen) { if (fd >= __pse51_rtdm_fd_start) { struct _rtdm_getsockaddr_args args = { addr, addrlen }; int oldtype; pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype); fd = XENOMAI_SKINCALL3(__pse51_rtdm_muxid, __rtdm_ioctl, fd - __pse51_rtdm_fd_start, _RTIOC_ACCEPT, &args); pthread_setcanceltype(oldtype, NULL); if (fd < 0) return set_errno(fd); return fd + __pse51_rtdm_fd_start; } else { fd = __real_accept(fd, addr, addrlen); if (fd >= __pse51_rtdm_fd_start) { __real_close(fd); errno = EMFILE; fd = -1; } return fd; } }
int __wrap_open64(const char *path, int oflag, ...) { int ret = sys_rtdm_open(path, oflag); if (ret >= 0) return ret; #ifdef HAVE_OPEN64 else if (ret == -ENODEV || ret == -ENOSYS) { va_list ap; va_start(ap, oflag); ret = __real_open64(path, oflag, va_arg(ap, mode_t)); va_end(ap); if (ret >= __pse51_rtdm_fd_start) { __real_close(ret); errno = EMFILE; ret = -1; } #endif } else { errno = -ret; ret = -1; } return ret; }
int __wrap_close(int fd) { extern int __shm_close(int fd); int ret; if (fd >= __pse51_rtdm_fd_start) { int oldtype; pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype); ret = set_errno(XENOMAI_SKINCALL1(__pse51_rtdm_muxid, __rtdm_close, fd - __pse51_rtdm_fd_start)); pthread_setcanceltype(oldtype, NULL); return ret; } else ret = __shm_close(fd); if (ret == -1 && (errno == EBADF || errno == ENOSYS)) return __real_close(fd); return ret; }
int __wrap_socket(int protocol_family, int socket_type, int protocol) { int ret; ret = XENOMAI_SKINCALL3(__pse51_rtdm_muxid, __rtdm_socket, protocol_family, socket_type, protocol); if (ret >= 0) ret += __pse51_rtdm_fd_start; else if (ret == -EAFNOSUPPORT || ret == -EPROTONOSUPPORT || ret == -ENOSYS) { ret = __real_socket(protocol_family, socket_type, protocol); if (ret >= __pse51_rtdm_fd_start) { __real_close(ret); errno = -EMFILE; ret = -1; } } else { errno = -ret; ret = -1; } return ret; }
static int __map_queue_memory(RT_QUEUE *q, RT_QUEUE_PLACEHOLDER * php) { int err, heapfd; /* Open the heap device to share the message pool memory with the in-kernel skin and bound clients. */ heapfd = __real_open(XNHEAP_DEV_NAME, O_RDWR); if (heapfd < 0) return -ENOENT; /* Bind this file instance to the shared heap. */ err = __real_ioctl(heapfd, 0, php->opaque2); if (err) goto close_and_exit; /* Map the heap memory into our address space. */ php->mapbase = (caddr_t) __real_mmap(NULL, php->mapsize, PROT_READ | PROT_WRITE, MAP_SHARED, heapfd, 0L); if (php->mapbase != MAP_FAILED) /* Copy back a complete placeholder only if all is ok. */ *q = *php; else err = -ENOMEM; close_and_exit: __real_close(heapfd); return err; }
int __wrap_open(const char *path, int oflag, ...) { int ret, oldtype; const char *rtdm_path = path; pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype); /* skip path prefix for RTDM invocation */ if (strncmp(path, "/dev/", 5) == 0) rtdm_path += 5; ret = XENOMAI_SKINCALL2(__rtdm_muxid, __rtdm_open, rtdm_path, oflag); pthread_setcanceltype(oldtype, NULL); if (ret >= 0) ret += __rtdm_fd_start; else if (ret == -ENODEV || ret == -ENOSYS) { va_list ap; va_start(ap, oflag); ret = __real_open(path, oflag, va_arg(ap, mode_t)); va_end(ap); if (ret >= __rtdm_fd_start) { __real_close(ret); errno = EMFILE; ret = -1; } } else { errno = -ret; ret = -1; } return ret; }
__attribute__((always_inline)) int __wrap_close(int fd) { delete_fake_fd(fd); __real_close(fd); }
int __wrap_close(int fd) { if(!win32_rm_dirpath(fd)) __real_close(fd); return 0; }