|
@@ -32,20 +32,20 @@ void set_close_on_exec(unsigned int fd, int flag)
|
|
|
spin_lock(&files->file_lock);
|
|
|
fdt = files_fdtable(files);
|
|
|
if (flag)
|
|
|
- FD_SET(fd, fdt->close_on_exec);
|
|
|
+ __set_close_on_exec(fd, fdt);
|
|
|
else
|
|
|
- FD_CLR(fd, fdt->close_on_exec);
|
|
|
+ __clear_close_on_exec(fd, fdt);
|
|
|
spin_unlock(&files->file_lock);
|
|
|
}
|
|
|
|
|
|
-static int get_close_on_exec(unsigned int fd)
|
|
|
+static bool get_close_on_exec(unsigned int fd)
|
|
|
{
|
|
|
struct files_struct *files = current->files;
|
|
|
struct fdtable *fdt;
|
|
|
- int res;
|
|
|
+ bool res;
|
|
|
rcu_read_lock();
|
|
|
fdt = files_fdtable(files);
|
|
|
- res = FD_ISSET(fd, fdt->close_on_exec);
|
|
|
+ res = close_on_exec(fd, fdt);
|
|
|
rcu_read_unlock();
|
|
|
return res;
|
|
|
}
|
|
@@ -90,15 +90,15 @@ SYSCALL_DEFINE3(dup3, unsigned int, oldfd, unsigned int, newfd, int, flags)
|
|
|
err = -EBUSY;
|
|
|
fdt = files_fdtable(files);
|
|
|
tofree = fdt->fd[newfd];
|
|
|
- if (!tofree && FD_ISSET(newfd, fdt->open_fds))
|
|
|
+ if (!tofree && fd_is_open(newfd, fdt))
|
|
|
goto out_unlock;
|
|
|
get_file(file);
|
|
|
rcu_assign_pointer(fdt->fd[newfd], file);
|
|
|
- FD_SET(newfd, fdt->open_fds);
|
|
|
+ __set_open_fd(newfd, fdt);
|
|
|
if (flags & O_CLOEXEC)
|
|
|
- FD_SET(newfd, fdt->close_on_exec);
|
|
|
+ __set_close_on_exec(newfd, fdt);
|
|
|
else
|
|
|
- FD_CLR(newfd, fdt->close_on_exec);
|
|
|
+ __clear_close_on_exec(newfd, fdt);
|
|
|
spin_unlock(&files->file_lock);
|
|
|
|
|
|
if (tofree)
|