kprintf args count check

This commit is contained in:
Timerix22 2024-03-23 01:42:15 +05:00
parent 9bc2a8587b
commit 0e370b31ba
2 changed files with 18 additions and 7 deletions

View File

@ -45,13 +45,17 @@ WORD unixColorToWin(u8 c){
}
#endif
i32 kprintf(const char* format, ...){
i32 _kprintf(const char* format, const i32 args_count, ...){
va_list vl;
va_start(vl, format);
va_start(vl, args_count);
i32 i = 0;
i32 args_left = args_count;
for(char c = format[i++]; c != 0; c = format[i++]){
// value format specifiers
if(c == '%'){
if(args_left-- == 0)
return kprintf_NOT_ENOUGH_ARGUMENTS;
char* argstr = NULL;
bool l = false;
c = format[i++];
@ -152,17 +156,21 @@ i32 kprintf(const char* format, ...){
}
i32 ksprintf(char* buffer, i32 buffer_size, const char* format, ...){
i32 _ksprintf(char* buffer, i32 buffer_size, const char* format, const i32 args_count, ...){
if(buffer == NULL)
return kprintf_BUFFER_IS_NULL;
va_list vl;
va_start(vl, format);
va_start(vl, args_count);
i32 i = 0;
i32 written = 0;
i32 args_left = args_count;
for(char c = format[i++]; c != 0; c = format[i++]){
// value format specifiers
if(c == '%'){
if(args_left-- == 0)
return kprintf_NOT_ENOUGH_ARGUMENTS;
char* argstr = NULL;
bool l = false;
c = format[i++];

View File

@ -7,15 +7,18 @@ extern "C" {
#include "../base/type_system/base_toString.h"
#define kprintf_INVALID_FORMAT -1
#define kprintf_BUFFER_IS_NULL -2
#define kprintf_NOT_ENOUGH_ARGUMENTS -2
#define kprintf_BUFFER_IS_TOO_SMALL -3
#define kprintf_BUFFER_IS_NULL -4
/// cross-platform printf analog
///@return number of processed format string characters or error code
i32 kprintf(const char* format, ...);
i32 _kprintf(const char* format, const i32 args_count, ...);
#define kprintf(FORMAT, ARGS... ) _kprintf(FORMAT, count_args(ARGS) ,##ARGS)
/// @return number of processed format string characters or error code
i32 ksprintf(char* buffer, i32 buffer_size, const char* format, ...);
i32 _ksprintf(char* buffer, i32 buffer_size, const char* format, const i32 args_count, ...);
#define ksprintf(BUFFER, BUFFER_SIZE, FORMAT, ARGS... ) _ksprintf(BUFFER, BUFFER_SIZE, FORMAT, count_args(ARGS) ,##ARGS)
// printf format terminal color sequence