nes-proj/arch/cpu/arm/common/dbg-io/dbg-snprintf.c

52 lines
1.4 KiB
C
Raw Normal View History

2017-11-22 00:53:42 +00:00
/*---------------------------------------------------------------------------*/
#include <stdio.h>
#include <strformat.h>
#include <string.h>
2017-11-22 00:53:42 +00:00
/*---------------------------------------------------------------------------*/
2017-11-22 00:58:50 +00:00
struct FmtBuffer {
char *pos;
size_t left;
};
2017-11-22 00:53:42 +00:00
/*---------------------------------------------------------------------------*/
static StrFormatResult
buffer_str(void *user_data, const char *data, unsigned int len)
{
2017-11-22 00:58:50 +00:00
struct FmtBuffer *buffer = (struct FmtBuffer *)user_data;
if(len >= buffer->left) {
len = buffer->left;
len--;
}
2017-11-22 00:58:50 +00:00
memcpy(buffer->pos, data, len);
buffer->pos += len;
buffer->left -= len;
return STRFORMAT_OK;
}
2017-11-22 00:53:42 +00:00
/*---------------------------------------------------------------------------*/
2017-11-22 00:58:50 +00:00
int
snprintf(char *str, size_t size, const char *format, ...)
{
int res;
va_list ap;
va_start(ap, format);
res = vsnprintf(str, size, format, ap);
va_end(ap);
return res;
}
2017-11-22 00:53:42 +00:00
/*---------------------------------------------------------------------------*/
2017-11-22 00:58:50 +00:00
int
vsnprintf(char *str, size_t size, const char *format, va_list ap)
{
struct FmtBuffer buffer;
StrFormatContext ctxt;
int res;
ctxt.write_str = buffer_str;
ctxt.user_data = &buffer;
buffer.pos = str;
buffer.left = size;
res = format_str_v(&ctxt, format, ap);
*buffer.pos = '\0';
return res;
}
2017-11-22 00:53:42 +00:00
/*---------------------------------------------------------------------------*/