diff options
author | Yuqian Yang <crupest@crupest.life> | 2025-09-02 22:29:11 +0800 |
---|---|---|
committer | Yuqian Yang <crupest@crupest.life> | 2025-09-03 01:52:38 +0800 |
commit | 545a638929218a83d194402b3d52f5bffd87d9eb (patch) | |
tree | f659f671fec17f3ef7dced31f3a1f59673d18690 /src/base/platform/unix/UnixFileStream.cpp | |
parent | 5035f18f44f675af2faa4019b6de14b3f3aab270 (diff) | |
download | cru-545a638929218a83d194402b3d52f5bffd87d9eb.tar.gz cru-545a638929218a83d194402b3d52f5bffd87d9eb.tar.bz2 cru-545a638929218a83d194402b3d52f5bffd87d9eb.zip |
UnixFileDescriptor.
Diffstat (limited to 'src/base/platform/unix/UnixFileStream.cpp')
-rw-r--r-- | src/base/platform/unix/UnixFileStream.cpp | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/src/base/platform/unix/UnixFileStream.cpp b/src/base/platform/unix/UnixFileStream.cpp index 6d8bab25..e1a6080b 100644 --- a/src/base/platform/unix/UnixFileStream.cpp +++ b/src/base/platform/unix/UnixFileStream.cpp @@ -2,12 +2,10 @@ #include "cru/base/Exception.h" #include "cru/base/Format.h" #include "cru/base/io/Stream.h" -#include "cru/base/log/Logger.h" #include <fcntl.h> #include <sys/fcntl.h> #include <unistd.h> -#include <cerrno> namespace cru::platform::unix { using namespace cru::io; @@ -41,7 +39,7 @@ int MapSeekOrigin(Stream::SeekOrigin origin) { } // namespace UnixFileStream::UnixFileStream(const char *path, int oflag, mode_t mode) { - file_descriptor_ = ::open(path, oflag, mode); + file_descriptor_ = UnixFileDescriptor(::open(path, oflag, mode)); if (file_descriptor_ == -1) { throw ErrnoException( Format(u"Failed to open file {} with oflag {}, mode {}.", @@ -50,16 +48,11 @@ UnixFileStream::UnixFileStream(const char *path, int oflag, mode_t mode) { SetSupportedOperations( {OflagCanSeek(oflag), OflagCanRead(oflag), OflagCanWrite(oflag)}); - - auto_close_ = true; } -UnixFileStream::UnixFileStream(int fd, bool can_seek, bool can_read, - bool can_write, bool auto_close) - : Stream(can_seek, can_read, can_write) { - file_descriptor_ = fd; - auto_close_ = auto_close; -} +UnixFileStream::UnixFileStream(UnixFileDescriptor fd, bool can_seek, + bool can_read, bool can_write) + : Stream(can_seek, can_read, can_write), file_descriptor_(std::move(fd)) {} UnixFileStream::~UnixFileStream() { DoClose(); } @@ -90,9 +83,8 @@ Index UnixFileStream::DoWrite(const std::byte *buffer, Index offset, void UnixFileStream::DoClose() { CRU_STREAM_BEGIN_CLOSE - if (auto_close_ && ::close(file_descriptor_) == -1) { - throw ErrnoException(u"Failed to close file."); + if (file_descriptor_) { + file_descriptor_ = {}; } - file_descriptor_ = -1; } } // namespace cru::platform::unix |