mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-12-29 06:02:07 +03:00
LibCore+cat: Switch Core::System::read/write to take a Span of bytes
In the spirit of the Core::System name space having "modern" facades for classically C functions / Kernel interfaces, it seems appropriate that we should take Span's of data instead of raw pointer + length arguments.
This commit is contained in:
parent
eb896aa33e
commit
fcc00c9a27
Notes:
sideshowbarker
2024-07-18 00:36:40 +09:00
Author: https://github.com/bgianfo Commit: https://github.com/SerenityOS/serenity/commit/fcc00c9a276 Pull-request: https://github.com/SerenityOS/serenity/pull/11106
@ -157,17 +157,17 @@ ErrorOr<struct stat> stat(StringView path)
|
||||
#endif
|
||||
}
|
||||
|
||||
ErrorOr<ssize_t> read(int fd, void* buffer, size_t buffer_size)
|
||||
ErrorOr<ssize_t> read(int fd, Bytes buffer)
|
||||
{
|
||||
ssize_t rc = ::read(fd, buffer, buffer_size);
|
||||
ssize_t rc = ::read(fd, buffer.data(), buffer.size());
|
||||
if (rc < 0)
|
||||
return Error::from_syscall("read"sv, -errno);
|
||||
return rc;
|
||||
}
|
||||
|
||||
ErrorOr<ssize_t> write(int fd, void const* data, size_t data_size)
|
||||
ErrorOr<ssize_t> write(int fd, ReadonlyBytes buffer)
|
||||
{
|
||||
ssize_t rc = ::write(fd, data, data_size);
|
||||
ssize_t rc = ::write(fd, buffer.data(), buffer.size());
|
||||
if (rc < 0)
|
||||
return Error::from_syscall("write"sv, -errno);
|
||||
return rc;
|
||||
|
@ -27,8 +27,8 @@ ErrorOr<int> open(StringView path, int options, ...);
|
||||
ErrorOr<void> close(int fd);
|
||||
ErrorOr<void> ftruncate(int fd, off_t length);
|
||||
ErrorOr<struct stat> stat(StringView path);
|
||||
ErrorOr<ssize_t> read(int fd, void* buffer, size_t buffer_size);
|
||||
ErrorOr<ssize_t> write(int fd, void const* data, size_t data_size);
|
||||
ErrorOr<ssize_t> read(int fd, Bytes buffer);
|
||||
ErrorOr<ssize_t> write(int fd, ReadonlyBytes buffer);
|
||||
ErrorOr<void> kill(pid_t, int signal);
|
||||
ErrorOr<int> dup2(int source_fd, int destination_fd);
|
||||
ErrorOr<String> ptsname(int fd);
|
||||
|
@ -45,15 +45,18 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
||||
|
||||
TRY(Core::System::pledge("stdio", nullptr));
|
||||
|
||||
Array<u8, 32768> buffer;
|
||||
for (auto& fd : fds) {
|
||||
for (;;) {
|
||||
char buffer[32768];
|
||||
auto nread = TRY(Core::System::read(fd, buffer, sizeof(buffer)));
|
||||
auto buffer_span = buffer.span();
|
||||
auto nread = TRY(Core::System::read(fd, buffer_span));
|
||||
if (nread == 0)
|
||||
break;
|
||||
ssize_t already_written = 0;
|
||||
while (already_written < nread)
|
||||
already_written += TRY(Core::System::write(STDOUT_FILENO, buffer + already_written, nread - already_written));
|
||||
buffer_span = buffer_span.trim(nread);
|
||||
while (!buffer_span.is_empty()) {
|
||||
auto already_written = TRY(Core::System::write(STDOUT_FILENO, buffer_span));
|
||||
buffer_span = buffer_span.slice(already_written);
|
||||
}
|
||||
}
|
||||
TRY(Core::System::close(fd));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user