• D
    Wrap accesses to the fd_sets in struct fdtable · 1dce27c5
    David Howells 提交于
    Wrap accesses to the fd_sets in struct fdtable (for recording open files and
    close-on-exec flags) so that we can move away from using fd_sets since we
    abuse the fd_set structs by not allocating the full-sized structure under
    normal circumstances and by non-core code looking at the internals of the
    fd_sets.
    
    The first abuse means that use of FD_ZERO() on these fd_sets is not permitted,
    since that cannot be told about their abnormal lengths.
    
    This introduces six wrapper functions for setting, clearing and testing
    close-on-exec flags and fd-is-open flags:
    
    	void __set_close_on_exec(int fd, struct fdtable *fdt);
    	void __clear_close_on_exec(int fd, struct fdtable *fdt);
    	bool close_on_exec(int fd, const struct fdtable *fdt);
    	void __set_open_fd(int fd, struct fdtable *fdt);
    	void __clear_open_fd(int fd, struct fdtable *fdt);
    	bool fd_is_open(int fd, const struct fdtable *fdt);
    
    Note that I've prepended '__' to the names of the set/clear functions because
    they require the caller to hold a lock to use them.
    
    Note also that I haven't added wrappers for looking behind the scenes at the
    the array.  Possibly that should exist too.
    Signed-off-by: NDavid Howells <dhowells@redhat.com>
    Link: http://lkml.kernel.org/r/20120216174942.23314.1364.stgit@warthog.procyon.org.ukSigned-off-by: NH. Peter Anvin <hpa@zytor.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    1dce27c5
fcntl.c 18.7 KB