2023-01-06 19:15:43 +00:00
|
|
|
#define _LUNA_SYSTEM_ERROR_EXTENSIONS
|
2023-01-06 16:35:07 +00:00
|
|
|
#include <bits/errno-return.h>
|
2023-01-06 19:15:43 +00:00
|
|
|
#include <luna/Format.h>
|
2023-01-06 12:31:14 +00:00
|
|
|
#include <stdio.h>
|
2023-01-07 00:49:26 +00:00
|
|
|
#include <string.h>
|
2023-01-06 12:31:14 +00:00
|
|
|
#include <sys/syscall.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
|
2023-01-06 16:35:07 +00:00
|
|
|
FILE* stderr = nullptr;
|
|
|
|
|
2023-01-06 12:31:14 +00:00
|
|
|
extern "C"
|
|
|
|
{
|
2023-01-07 00:49:26 +00:00
|
|
|
int console_write(const char* str, size_t size)
|
2023-01-06 12:31:14 +00:00
|
|
|
{
|
2023-01-07 00:49:26 +00:00
|
|
|
long rc = syscall(SYS_console_write, str, size);
|
2023-01-06 16:35:07 +00:00
|
|
|
__errno_return(rc, int);
|
2023-01-06 12:31:14 +00:00
|
|
|
}
|
2023-01-06 19:15:43 +00:00
|
|
|
|
|
|
|
int vsnprintf(char* buf, size_t max, const char* format, va_list ap)
|
|
|
|
{
|
|
|
|
return (int)vstring_format(buf, max, format, ap);
|
|
|
|
}
|
|
|
|
|
|
|
|
int snprintf(char* buf, size_t max, const char* format, ...)
|
|
|
|
{
|
|
|
|
va_list ap;
|
|
|
|
va_start(ap, format);
|
|
|
|
|
|
|
|
int rc = vsnprintf(buf, max, format, ap);
|
|
|
|
|
|
|
|
va_end(ap);
|
|
|
|
|
|
|
|
return rc;
|
|
|
|
}
|
|
|
|
|
|
|
|
int vsprintf(char* buf, const char* format, va_list ap)
|
|
|
|
{
|
|
|
|
return vsnprintf(buf, (size_t)-1, format, ap);
|
|
|
|
}
|
|
|
|
|
|
|
|
int sprintf(char* buf, const char* format, ...)
|
|
|
|
{
|
|
|
|
va_list ap;
|
|
|
|
va_start(ap, format);
|
|
|
|
|
|
|
|
int rc = vsnprintf(buf, (size_t)-1, format, ap);
|
|
|
|
|
|
|
|
va_end(ap);
|
|
|
|
|
|
|
|
return rc;
|
|
|
|
}
|
2023-01-07 00:49:26 +00:00
|
|
|
|
|
|
|
int printf(const char* format, ...)
|
|
|
|
{
|
|
|
|
va_list ap;
|
|
|
|
va_start(ap, format);
|
|
|
|
|
|
|
|
int rc = (int)pure_cstyle_format(
|
|
|
|
format, [](char c, void*) { console_write(&c, 1); }, nullptr, ap);
|
|
|
|
|
|
|
|
va_end(ap);
|
|
|
|
|
|
|
|
return rc;
|
|
|
|
}
|
|
|
|
|
|
|
|
int puts(const char* s)
|
|
|
|
{
|
|
|
|
if (console_write(s, strlen(s)) < 0) return -1;
|
|
|
|
if (console_write("\n", 1) < 0) return -1;
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
2023-01-06 12:31:14 +00:00
|
|
|
}
|
2023-01-13 19:00:20 +00:00
|
|
|
|
|
|
|
void debug_log_impl(const char* format, va_list ap)
|
|
|
|
{
|
|
|
|
pure_cstyle_format(
|
|
|
|
format, [](char c, void*) { console_write(&c, 1); }, nullptr, ap);
|
|
|
|
}
|