1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-24 23:17:44 +00:00

LibC: Add vsnprintf(), snprintf(), execvp() and abs().

This commit is contained in:
Andreas Kling 2019-01-23 06:35:34 +01:00
parent db35d59994
commit 69a3aecf6b
6 changed files with 41 additions and 0 deletions

View file

@ -296,6 +296,33 @@ int sprintf(char* buffer, const char* fmt, ...)
return ret;
}
static size_t __vsnprintf_space_remaining;
static void sized_buffer_putch(char*& bufptr, char ch)
{
if (__vsnprintf_space_remaining) {
*bufptr++ = ch;
--__vsnprintf_space_remaining;
}
}
int vsnprintf(char* buffer, size_t size, const char* fmt, va_list ap)
{
__vsnprintf_space_remaining = size;
int ret = printfInternal(sized_buffer_putch, buffer, fmt, ap);
buffer[ret] = '\0';
return ret;
}
int snprintf(char* buffer, size_t size, const char* fmt, ...)
{
va_list ap;
va_start(ap, fmt);
int ret = vsnprintf(buffer, size, fmt, ap);
buffer[ret] = '\0';
va_end(ap);
return ret;
}
void perror(const char* s)
{
fprintf(stderr, "%s: %s\n", s, strerror(errno));