mirror of
https://github.com/godotengine/godot.git
synced 2025-11-01 14:11:15 +00:00
Implement get_length() for pipes.
This commit is contained in:
parent
f60f69aa57
commit
e6e108d091
6 changed files with 21 additions and 4 deletions
|
|
@ -451,7 +451,7 @@ String FileAccess::get_line() const {
|
||||||
uint8_t c = get_8();
|
uint8_t c = get_8();
|
||||||
|
|
||||||
while (!eof_reached()) {
|
while (!eof_reached()) {
|
||||||
if (c == '\n' || c == '\0') {
|
if (c == '\n' || c == '\0' || get_error() != OK) {
|
||||||
line.push_back(0);
|
line.push_back(0);
|
||||||
return String::utf8(line.get_data());
|
return String::utf8(line.get_data());
|
||||||
} else if (c != '\r') {
|
} else if (c != '\r') {
|
||||||
|
|
|
||||||
|
|
@ -204,7 +204,7 @@
|
||||||
<method name="get_length" qualifiers="const">
|
<method name="get_length" qualifiers="const">
|
||||||
<return type="int" />
|
<return type="int" />
|
||||||
<description>
|
<description>
|
||||||
Returns the size of the file in bytes.
|
Returns the size of the file in bytes. For a pipe, returns the number of bytes available for reading from the pipe.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_line" qualifiers="const">
|
<method name="get_line" qualifiers="const">
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
@ -132,6 +133,14 @@ String FileAccessUnixPipe::get_path_absolute() const {
|
||||||
return path_src;
|
return path_src;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint64_t FileAccessUnixPipe::get_length() const {
|
||||||
|
ERR_FAIL_COND_V_MSG(fd[0] < 0, 0, "Pipe must be opened before use.");
|
||||||
|
|
||||||
|
int buf_rem = 0;
|
||||||
|
ERR_FAIL_COND_V(ioctl(fd[0], FIONREAD, &buf_rem) != 0, 0);
|
||||||
|
return buf_rem;
|
||||||
|
}
|
||||||
|
|
||||||
uint64_t FileAccessUnixPipe::get_buffer(uint8_t *p_dst, uint64_t p_length) const {
|
uint64_t FileAccessUnixPipe::get_buffer(uint8_t *p_dst, uint64_t p_length) const {
|
||||||
ERR_FAIL_COND_V_MSG(fd[0] < 0, -1, "Pipe must be opened before use.");
|
ERR_FAIL_COND_V_MSG(fd[0] < 0, -1, "Pipe must be opened before use.");
|
||||||
ERR_FAIL_COND_V(!p_dst && p_length > 0, -1);
|
ERR_FAIL_COND_V(!p_dst && p_length > 0, -1);
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ public:
|
||||||
virtual void seek(uint64_t p_position) override {}
|
virtual void seek(uint64_t p_position) override {}
|
||||||
virtual void seek_end(int64_t p_position = 0) override {}
|
virtual void seek_end(int64_t p_position = 0) override {}
|
||||||
virtual uint64_t get_position() const override { return 0; }
|
virtual uint64_t get_position() const override { return 0; }
|
||||||
virtual uint64_t get_length() const override { return 0; }
|
virtual uint64_t get_length() const override;
|
||||||
|
|
||||||
virtual bool eof_reached() const override { return false; }
|
virtual bool eof_reached() const override { return false; }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -102,6 +102,14 @@ String FileAccessWindowsPipe::get_path_absolute() const {
|
||||||
return path_src;
|
return path_src;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint64_t FileAccessWindowsPipe::get_length() const {
|
||||||
|
ERR_FAIL_COND_V_MSG(fd[0] == nullptr, -1, "Pipe must be opened before use.");
|
||||||
|
|
||||||
|
DWORD buf_rem = 0;
|
||||||
|
ERR_FAIL_COND_V(!PeekNamedPipe(fd[0], nullptr, 0, nullptr, &buf_rem, nullptr), 0);
|
||||||
|
return buf_rem;
|
||||||
|
}
|
||||||
|
|
||||||
uint64_t FileAccessWindowsPipe::get_buffer(uint8_t *p_dst, uint64_t p_length) const {
|
uint64_t FileAccessWindowsPipe::get_buffer(uint8_t *p_dst, uint64_t p_length) const {
|
||||||
ERR_FAIL_COND_V_MSG(fd[0] == nullptr, -1, "Pipe must be opened before use.");
|
ERR_FAIL_COND_V_MSG(fd[0] == nullptr, -1, "Pipe must be opened before use.");
|
||||||
ERR_FAIL_COND_V(!p_dst && p_length > 0, -1);
|
ERR_FAIL_COND_V(!p_dst && p_length > 0, -1);
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@ public:
|
||||||
virtual void seek(uint64_t p_position) override {}
|
virtual void seek(uint64_t p_position) override {}
|
||||||
virtual void seek_end(int64_t p_position = 0) override {}
|
virtual void seek_end(int64_t p_position = 0) override {}
|
||||||
virtual uint64_t get_position() const override { return 0; }
|
virtual uint64_t get_position() const override { return 0; }
|
||||||
virtual uint64_t get_length() const override { return 0; }
|
virtual uint64_t get_length() const override;
|
||||||
|
|
||||||
virtual bool eof_reached() const override { return false; }
|
virtual bool eof_reached() const override { return false; }
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue