kprintf args count check
This commit is contained in:
parent
9bc2a8587b
commit
0e370b31ba
@ -45,13 +45,17 @@ WORD unixColorToWin(u8 c){
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
i32 kprintf(const char* format, ...){
|
i32 _kprintf(const char* format, const i32 args_count, ...){
|
||||||
va_list vl;
|
va_list vl;
|
||||||
va_start(vl, format);
|
va_start(vl, args_count);
|
||||||
i32 i = 0;
|
i32 i = 0;
|
||||||
|
i32 args_left = args_count;
|
||||||
for(char c = format[i++]; c != 0; c = format[i++]){
|
for(char c = format[i++]; c != 0; c = format[i++]){
|
||||||
// value format specifiers
|
// value format specifiers
|
||||||
if(c == '%'){
|
if(c == '%'){
|
||||||
|
if(args_left-- == 0)
|
||||||
|
return kprintf_NOT_ENOUGH_ARGUMENTS;
|
||||||
|
|
||||||
char* argstr = NULL;
|
char* argstr = NULL;
|
||||||
bool l = false;
|
bool l = false;
|
||||||
c = format[i++];
|
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)
|
if(buffer == NULL)
|
||||||
return kprintf_BUFFER_IS_NULL;
|
return kprintf_BUFFER_IS_NULL;
|
||||||
|
|
||||||
va_list vl;
|
va_list vl;
|
||||||
va_start(vl, format);
|
va_start(vl, args_count);
|
||||||
i32 i = 0;
|
i32 i = 0;
|
||||||
i32 written = 0;
|
i32 written = 0;
|
||||||
|
i32 args_left = args_count;
|
||||||
for(char c = format[i++]; c != 0; c = format[i++]){
|
for(char c = format[i++]; c != 0; c = format[i++]){
|
||||||
// value format specifiers
|
// value format specifiers
|
||||||
if(c == '%'){
|
if(c == '%'){
|
||||||
|
if(args_left-- == 0)
|
||||||
|
return kprintf_NOT_ENOUGH_ARGUMENTS;
|
||||||
|
|
||||||
char* argstr = NULL;
|
char* argstr = NULL;
|
||||||
bool l = false;
|
bool l = false;
|
||||||
c = format[i++];
|
c = format[i++];
|
||||||
|
|||||||
@ -7,15 +7,18 @@ extern "C" {
|
|||||||
#include "../base/type_system/base_toString.h"
|
#include "../base/type_system/base_toString.h"
|
||||||
|
|
||||||
#define kprintf_INVALID_FORMAT -1
|
#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_TOO_SMALL -3
|
||||||
|
#define kprintf_BUFFER_IS_NULL -4
|
||||||
|
|
||||||
/// cross-platform printf analog
|
/// cross-platform printf analog
|
||||||
///@return number of processed format string characters or error code
|
///@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
|
/// @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
|
// printf format terminal color sequence
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user