diff options
Diffstat (limited to 'lib/roken/snprintf.c')
| -rw-r--r-- | lib/roken/snprintf.c | 40 |
1 files changed, 33 insertions, 7 deletions
diff --git a/lib/roken/snprintf.c b/lib/roken/snprintf.c index 9f6d3ca0412f..54018bae7982 100644 --- a/lib/roken/snprintf.c +++ b/lib/roken/snprintf.c @@ -309,7 +309,7 @@ append_char(struct snprintf_state *state, (*state->append_char) (state, ' '); ++len; } - return 0; + return len; } /* @@ -437,8 +437,7 @@ xyzprintf (struct snprintf_state *state, const char *char_format, va_list ap) switch (c) { case 'c' : - append_char(state, va_arg(ap, int), width, flags); - ++len; + len += append_char(state, va_arg(ap, int), width, flags); break; case 's' : len += append_string(state, @@ -518,7 +517,7 @@ xyzprintf (struct snprintf_state *state, const char *char_format, va_list ap) } case '\0' : --format; - /* FALLTHROUGH */ + HEIM_FALLTHROUGH; case '%' : (*state->append_char)(state, c); ++len; @@ -560,7 +559,7 @@ rk_snprintf (char *str, size_t sz, const char *format, ...) va_start(args, format); ret2 = vsprintf (tmp, format, args); va_end(args); - if (ret != ret2 || strcmp(str, tmp)) + if (ret != ret2 || strcmp(str, tmp) != 0) abort (); free (tmp); } @@ -592,7 +591,7 @@ rk_asprintf (char **ret, const char *format, ...) va_start(args, format); ret2 = vsprintf (tmp, format, args); va_end(args); - if (val != ret2 || strcmp(*ret, tmp)) + if (val != ret2 || strcmp(*ret, tmp) != 0) abort (); free (tmp); } @@ -621,7 +620,7 @@ rk_asnprintf (char **ret, size_t max_sz, const char *format, ...) abort (); ret2 = vsprintf (tmp, format, args); - if (val != ret2 || strcmp(*ret, tmp)) + if (val != ret2 || strcmp(*ret, tmp) != 0) abort (); free (tmp); } @@ -701,3 +700,30 @@ rk_vsnprintf (char *str, size_t sz, const char *format, va_list args) return ret; } #endif + +#if !defined(HAVE_EVASPRINTF) || defined(TEST_SNPRINTF) +ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL +rk_evasprintf(const char *format, va_list args) +{ + char *s = NULL; + + if (vasprintf(&s, format, args) == -1 || s == NULL) + errx(1, "Out of memory"); + return s; +} +#endif + +#if !defined(HAVE_EASPRINTF) || defined(TEST_SNPRINTF) +ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL +rk_easprintf(const char *format, ...) +{ + va_list args; + char *s = NULL; + + va_start(args, format); + if (vasprintf(&s, format, args) == -1 || s == NULL) + errx(1, "Out of memory"); + va_end(args); + return s; +} +#endif |
