mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-24 01:40:12 -05:00
Add xsnprintf() and remove some unnecessary strlen(3) calls
This commit is contained in:
parent
b25b8a78a9
commit
3f4cfa338b
8 changed files with 86 additions and 36 deletions
36
xsnprintf.c
Normal file
36
xsnprintf.c
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
#include "xsnprintf.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <limits.h>
|
||||
#include <stdio.h>
|
||||
|
||||
size_t
|
||||
xvsnprintf(char *buf, size_t n, const char *format, va_list ap)
|
||||
{
|
||||
assert(n <= INT_MAX);
|
||||
int len = vsnprintf(buf, n, format, ap);
|
||||
|
||||
/*
|
||||
* ISO C11 §7.21.6.5 states:
|
||||
* "The snprintf function returns the number of characters that
|
||||
* would have been written had n been sufficiently large, not
|
||||
* counting the terminating null character, or a negative value
|
||||
* if an encoding error occurred. Thus, the null-terminated output
|
||||
* has been completely written if and only if the returned value
|
||||
* is nonnegative and less than n."
|
||||
*/
|
||||
assert(len >= 0);
|
||||
assert(len < (int)n);
|
||||
|
||||
return (size_t)len;
|
||||
}
|
||||
|
||||
size_t
|
||||
xsnprintf(char *buf, size_t n, const char *format, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start(ap, format);
|
||||
size_t len = xvsnprintf(buf, n, format, ap);
|
||||
va_end(ap);
|
||||
return len;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue