mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 12:28:12 +00:00
Kernel: Make fcntl(F_SETFL) actually update the append/blocking flags.
This commit is contained in:
parent
7710863e3c
commit
8fe72d7b3c
3 changed files with 11 additions and 6 deletions
|
@ -328,3 +328,10 @@ const Socket* FileDescriptor::socket() const
|
|||
return nullptr;
|
||||
return static_cast<const Socket*>(m_file.ptr());
|
||||
}
|
||||
|
||||
void FileDescriptor::set_file_flags(dword flags)
|
||||
{
|
||||
m_is_blocking = !(flags & O_NONBLOCK);
|
||||
m_should_append = flags & O_APPEND;
|
||||
m_file_flags = flags;
|
||||
}
|
||||
|
|
|
@ -72,7 +72,7 @@ public:
|
|||
void set_should_append(bool s) { m_should_append = s; }
|
||||
|
||||
dword file_flags() const { return m_file_flags; }
|
||||
void set_file_flags(dword flags) { m_file_flags = flags; }
|
||||
void set_file_flags(dword);
|
||||
|
||||
bool is_socket() const;
|
||||
Socket* socket();
|
||||
|
|
|
@ -1012,7 +1012,6 @@ int Process::sys$fcntl(int fd, int cmd, dword arg)
|
|||
case F_GETFL:
|
||||
return descriptor->file_flags();
|
||||
case F_SETFL:
|
||||
// FIXME: Support changing O_NONBLOCK
|
||||
descriptor->set_file_flags(arg);
|
||||
break;
|
||||
default:
|
||||
|
@ -1125,10 +1124,9 @@ int Process::sys$open(const char* path, int options, mode_t mode)
|
|||
auto descriptor = result.value();
|
||||
if (options & O_DIRECTORY && !descriptor->is_directory())
|
||||
return -ENOTDIR; // FIXME: This should be handled by VFS::open.
|
||||
descriptor->set_blocking(!(options & O_NONBLOCK));
|
||||
descriptor->set_should_append(options & O_APPEND);
|
||||
dword flags = (options & O_CLOEXEC) ? FD_CLOEXEC : 0;
|
||||
m_fds[fd].set(move(descriptor), flags);
|
||||
descriptor->set_file_flags(options);
|
||||
dword fd_flags = (options & O_CLOEXEC) ? FD_CLOEXEC : 0;
|
||||
m_fds[fd].set(move(descriptor), fd_flags);
|
||||
return fd;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue