62 lines
988 B
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;
|
||
|
}
|