summaryrefslogtreecommitdiffstats
path: root/drivers/unix
diff options
context:
space:
mode:
authorbruvzg <7645683+bruvzg@users.noreply.github.com>2024-04-08 22:09:34 +0300
committerbruvzg <7645683+bruvzg@users.noreply.github.com>2024-04-12 19:20:49 +0300
commit88b3e68f93fad5681b27b11ddacc562b03d5ef45 (patch)
tree03f57722ab74282b862a5aba5433ff928bfdd972 /drivers/unix
parent029aadef563fb69cf49aa9795b62f27171f8c3f4 (diff)
downloadredot-engine-88b3e68f93fad5681b27b11ddacc562b03d5ef45.tar.gz
[FileAccess] Implement `resize` method.
Diffstat (limited to 'drivers/unix')
-rw-r--r--drivers/unix/file_access_unix.cpp17
-rw-r--r--drivers/unix/file_access_unix.h1
-rw-r--r--drivers/unix/file_access_unix_pipe.h1
3 files changed, 19 insertions, 0 deletions
diff --git a/drivers/unix/file_access_unix.cpp b/drivers/unix/file_access_unix.cpp
index a35d8bfdde..210507c2c6 100644
--- a/drivers/unix/file_access_unix.cpp
+++ b/drivers/unix/file_access_unix.cpp
@@ -286,6 +286,23 @@ Error FileAccessUnix::get_error() const {
return last_error;
}
+Error FileAccessUnix::resize(int64_t p_length) {
+ ERR_FAIL_NULL_V_MSG(f, FAILED, "File must be opened before use.");
+ int res = ::ftruncate(fileno(f), p_length);
+ switch (res) {
+ case 0:
+ return OK;
+ case EBADF:
+ return ERR_FILE_CANT_OPEN;
+ case EFBIG:
+ return ERR_OUT_OF_MEMORY;
+ case EINVAL:
+ return ERR_INVALID_PARAMETER;
+ default:
+ return FAILED;
+ }
+}
+
void FileAccessUnix::flush() {
ERR_FAIL_NULL_MSG(f, "File must be opened before use.");
fflush(f);
diff --git a/drivers/unix/file_access_unix.h b/drivers/unix/file_access_unix.h
index 553fbcf355..c0286dbff3 100644
--- a/drivers/unix/file_access_unix.h
+++ b/drivers/unix/file_access_unix.h
@@ -75,6 +75,7 @@ public:
virtual Error get_error() const override; ///< get last error
+ virtual Error resize(int64_t p_length) override;
virtual void flush() override;
virtual void store_8(uint8_t p_dest) override; ///< store a byte
virtual void store_16(uint16_t p_dest) override;
diff --git a/drivers/unix/file_access_unix_pipe.h b/drivers/unix/file_access_unix_pipe.h
index d14f897d8f..8e7988791b 100644
--- a/drivers/unix/file_access_unix_pipe.h
+++ b/drivers/unix/file_access_unix_pipe.h
@@ -70,6 +70,7 @@ public:
virtual Error get_error() const override; ///< get last error
+ virtual Error resize(int64_t p_length) override { return ERR_UNAVAILABLE; }
virtual void flush() override {}
virtual void store_8(uint8_t p_src) override; ///< store a byte
virtual void store_buffer(const uint8_t *p_src, uint64_t p_length) override; ///< store an array of bytes