diff --git a/cpu/native/async_read.c b/cpu/native/async_read.c index d2d25802ef1070e81cd6e8e90660be5a700d1cee..2b517a9d515ffc183ca44a70ffce8557b585ab40 100644 --- a/cpu/native/async_read.c +++ b/cpu/native/async_read.c @@ -103,11 +103,11 @@ void native_async_read_add_handler(int fd, void *arg, native_async_read_callback _sigio_child(_next_index); #else /* configure fds to send signals on io */ - if (fcntl(fd, F_SETOWN, _native_pid) == -1) { + if (real_fcntl(fd, F_SETOWN, _native_pid) == -1) { err(EXIT_FAILURE, "native_async_read_add_handler(): fcntl(F_SETOWN)"); } /* set file access mode to non-blocking */ - if (fcntl(fd, F_SETFL, O_NONBLOCK | O_ASYNC) == -1) { + if (real_fcntl(fd, F_SETFL, O_NONBLOCK | O_ASYNC) == -1) { err(EXIT_FAILURE, "native_async_read_add_handler(): fcntl(F_SETFL)"); } #endif /* not OSX */ diff --git a/cpu/native/include/native_internal.h b/cpu/native/include/native_internal.h index 961b2d2227012fe5d53e423d9b4307bca222c6a2..d93d740f08141bc28d551bf6cd89c4515d49d3d1 100644 --- a/cpu/native/include/native_internal.h +++ b/cpu/native/include/native_internal.h @@ -96,6 +96,7 @@ extern int (*real_accept)(int socket, ...); extern int (*real_bind)(int socket, ...); extern int (*real_chdir)(const char *path); extern int (*real_close)(int); +extern int (*real_fcntl)(int, int, ...); /* The ... is a hack to save includes: */ extern int (*real_creat)(const char *path, ...); extern int (*real_dup2)(int, int); diff --git a/cpu/native/syscalls.c b/cpu/native/syscalls.c index db568d09a6ce7aaea2b35760151f55d8dc814f82..c4417153c10fe4fa4a5f9c50f803834f93da9d35 100644 --- a/cpu/native/syscalls.c +++ b/cpu/native/syscalls.c @@ -68,6 +68,7 @@ int (*real_getifaddrs)(struct ifaddrs **ifap); int (*real_getpid)(void); int (*real_chdir)(const char *path); int (*real_close)(int); +int (*real_fcntl)(int, int, ...); int (*real_creat)(const char *path, ...); int (*real_dup2)(int, int); int (*real_execve)(const char *, char *const[], char *const[]); @@ -454,6 +455,7 @@ void _native_init_syscalls(void) *(void **)(&real_pipe) = dlsym(RTLD_NEXT, "pipe"); *(void **)(&real_chdir) = dlsym(RTLD_NEXT, "chdir"); *(void **)(&real_close) = dlsym(RTLD_NEXT, "close"); + *(void **)(&real_fcntl) = dlsym(RTLD_NEXT, "fcntl"); *(void **)(&real_creat) = dlsym(RTLD_NEXT, "creat"); *(void **)(&real_fork) = dlsym(RTLD_NEXT, "fork"); *(void **)(&real_dup2) = dlsym(RTLD_NEXT, "dup2");