#include /* size_t */ #include /* 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; size_t 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; }