Our close-on-exec flag handling was broken: it's supposed to be specified per slot, not
per file descriptor (a descriptor can be shared among several slots). There is now a second table in the io_context structure that contains that information in a bitmap. There are now two new (private) functions to control the close-on-exec flag, fd_close_on_exec(), and fd_set_close_on_exec(). F_DUPFD, dup(), and dup2() are supposed to clear the close-on-exec flag on the duplicated slot - this fixes bug #57 (no output after a redirect of a shell builtin). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14313 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -74,6 +74,9 @@ extern status_t select_fd(int fd, uint8 event, uint32 ref, struct select_sync *s
|
||||
extern status_t deselect_fd(int fd, uint8 event, struct select_sync *sync, bool kernel);
|
||||
extern bool fd_is_valid(int fd, bool kernel);
|
||||
|
||||
extern bool fd_close_on_exec(struct io_context *context, int fd);
|
||||
extern void fd_set_close_on_exec(struct io_context *context, int fd, bool closeFD);
|
||||
|
||||
static struct io_context *get_current_io_context(bool kernel);
|
||||
|
||||
/* The prototypes of the (sys|user)_ functions are currently defined in vfs.h */
|
||||
|
||||
Reference in New Issue
Block a user