aboutsummaryrefslogtreecommitdiff
path: root/src/base/platform/unix/UnixFileStream.cpp
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-09-02 22:29:11 +0800
committerYuqian Yang <crupest@crupest.life>2025-09-03 01:52:38 +0800
commit545a638929218a83d194402b3d52f5bffd87d9eb (patch)
treef659f671fec17f3ef7dced31f3a1f59673d18690 /src/base/platform/unix/UnixFileStream.cpp
parent5035f18f44f675af2faa4019b6de14b3f3aab270 (diff)
downloadcru-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.cpp20
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