sinfo->str++;
}
-void
+// Build a formatted string. Note, this function returns the actual
+// number of bytes used (not including null) even in the overflow
+// case.
+int
snprintf(char *str, size_t size, const char *fmt, ...)
{
ASSERT32();
if (!size)
- return;
+ return 0;
struct snprintfinfo sinfo = { { putc_str }, str, str + size };
va_list args;
va_start(args, fmt);
va_end(args);
char *end = sinfo.str;
if (end >= sinfo.end)
- end--;
+ end = sinfo.end - 1;
*end = '\0';
+ return end - str;
}
__attribute__ ((format (printf, 1, 2)));
void __dprintf(const char *fmt, ...)
__attribute__ ((format (printf, 1, 2)));
-void snprintf(char *str, size_t size, const char *fmt, ...)
+int snprintf(char *str, size_t size, const char *fmt, ...)
__attribute__ ((format (printf, 3, 4)));
#define dprintf(lvl, fmt, args...) do { \
if (CONFIG_DEBUG_LEVEL && (lvl) <= CONFIG_DEBUG_LEVEL) \