From d5a87e5906a5c85dbf1808272f4e2f4b7e4d131f Mon Sep 17 00:00:00 2001 From: Nicolas Williams Date: Thu, 8 Dec 2022 20:13:44 -0600 Subject: [PATCH] roken: Add easprintf() and evasprintf() utils Like emalloc() and ecalloc(): errx on ENOMEM. --- lib/roken/roken.h.in | 12 ++++++++++++ lib/roken/snprintf.c | 27 +++++++++++++++++++++++++++ lib/roken/version-script.map | 2 ++ 3 files changed, 41 insertions(+) diff --git a/lib/roken/roken.h.in b/lib/roken/roken.h.in index e1902f582..e09c4ee89 100644 --- a/lib/roken/roken.h.in +++ b/lib/roken/roken.h.in @@ -563,6 +563,18 @@ ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL __attribute__ ((__format__ (__printf__, 3, 0))); #endif +#if !defined(HAVE_EVASPRINTF) || defined(NEED_EVASPRINTF_PROTO) +#define evasprintf rk_evasprintf +ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL +rk_evasprintf(const char *format, va_list args); +#endif + +#if !defined(HAVE_EASPRINTF) || defined(NEED_EASPRINTF_PROTO) +#define easprintf rk_easprintf +ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL +rk_easprintf(const char *format, ...); +#endif + #ifndef HAVE_STRDUP #define strdup rk_strdup ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL strdup(const char *); diff --git a/lib/roken/snprintf.c b/lib/roken/snprintf.c index 928e4f4f3..0b99a4b6f 100644 --- a/lib/roken/snprintf.c +++ b/lib/roken/snprintf.c @@ -701,3 +701,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 diff --git a/lib/roken/version-script.map b/lib/roken/version-script.map index be1713e82..8bee12c01 100644 --- a/lib/roken/version-script.map +++ b/lib/roken/version-script.map @@ -52,12 +52,14 @@ HEIMDAL_ROKEN_2.0 { rk_dns_string_to_type; rk_dns_type_to_string; rk_dumpdata; + rk_easprintf; rk_ecalloc; rk_emalloc; rk_eread; rk_erealloc; rk_esetenv; rk_estrdup; + rk_evasprintf; rk_ewrite; rk_flock; rk_fnmatch;