sam7fc/src/stdio/printf.c

62 lines
988 B
C

#include <stddef.h> /* size_t */
#include <stdarg.h> /* va_list */
#include "_putf.h"
#include "at91_dbgu.h"
int printf(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
int rc = _putf(at91_dbgu_write, NULL, fmt, ap);
va_end(ap);
return rc;
}
int inline puts(const char *p)
{
at91_dbgu_puts(p);
return 0;
}
int inline putchar(int c)
{
at91_dbgu_putc(c);
return 0;
}
struct snprintf_data {
char *bufstart;
size_t buflen;
int pos;
};
int snprintf_helper(void *base, const char *buf, size_t len)
{
struct snprintf_data *data = (struct snprintf_data *)base;
int count = 0;
while (len-- && (data->pos < data->buflen))
data->bufstart[data->pos++] = *buf++;
return count;
}
int snprintf(char *buf, size_t len, const char *fmt, ...)
{
struct snprintf_data data = {
.bufstart = buf,
.buflen = len,
.pos = 0,
};
va_list ap;
va_start(ap, fmt);
int rc = _putf(snprintf_helper, (void *)&data, fmt, ap);
va_end(ap);
buf[data.pos] = '\0';
return rc;
}