1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 14:28:12 +00:00

CIODevice: Add some basic output facilities: write() and printf().

Being able to do file.printf() is extremely comfy, I have to say. :^)
This commit is contained in:
Andreas Kling 2019-05-08 04:38:41 +02:00
parent b719bf7fde
commit 7ce3b10568
2 changed files with 27 additions and 0 deletions

View file

@ -2,6 +2,7 @@
#include <unistd.h>
#include <sys/select.h>
#include <stdio.h>
#include <AK/printf.cpp>
CIODevice::CIODevice(CObject* parent)
: CObject(parent)
@ -185,3 +186,25 @@ bool CIODevice::seek(signed_qword offset)
m_eof = false;
return true;
}
bool CIODevice::write(const byte* data, int size)
{
int rc = ::write(m_fd, data, size);
if (rc < 0) {
perror("CIODevice::write: write");
return false;
}
return rc == size;
}
int CIODevice::printf(const char* format, ...)
{
va_list ap;
va_start(ap, format);
// FIXME: We're not propagating write() failures to client here!
int ret = printf_internal([this] (char*&, char ch) {
write((const byte*)&ch, 1);
}, nullptr, format, ap);
va_end(ap);
return ret;
}