diff --git a/src/confd/configure.ac b/src/confd/configure.ac index fe2923ee..110e15a0 100644 --- a/src/confd/configure.ac +++ b/src/confd/configure.ac @@ -15,6 +15,10 @@ AC_CONFIG_FILES([ AC_PROG_CC AC_PROG_INSTALL +AC_CONFIG_LIBOBJ_DIR(lib) +AC_REPLACE_FUNCS(vasprintf) +AC_REPLACE_FUNCS(asprintf) + # Check for pkg-config first, warn if it's not installed PKG_PROG_PKG_CONFIG diff --git a/src/confd/lib/asprintf.c b/src/confd/lib/asprintf.c new file mode 100644 index 00000000..18b4fe34 --- /dev/null +++ b/src/confd/lib/asprintf.c @@ -0,0 +1,18 @@ +#include +#include +#include + +#ifndef HAVE_VASPRINTF +int vasprintf(char **strp, const char *fmt, va_list ap); +#endif + +int asprintf(char **strp, const char *fmt, ...) +{ + va_list ap; + int len; + + va_start(ap, fmt); + len = vasprintf(strp, fmt, ap); + va_end(ap); + return len; +} diff --git a/src/confd/lib/vasprintf.c b/src/confd/lib/vasprintf.c new file mode 100644 index 00000000..b79bdfc1 --- /dev/null +++ b/src/confd/lib/vasprintf.c @@ -0,0 +1,25 @@ +#include +#include +#include + +int vasprintf(char **strp, const char *fmt, va_list ap) +{ + va_list apdup; + char *str; + int len; + + va_copy(apdup, ap); + len = vsnprintf(0, 0, fmt, apdup); + va_end(apdup); + + if (len < 0) + return -1; + + len++; + str = malloc(len); + if (!str) + return -1; + + *strp = str; + return vsnprintf(str, len, fmt, ap); +} diff --git a/src/confd/src/Makefile.am b/src/confd/src/Makefile.am index 49083c9a..6813923f 100644 --- a/src/confd/src/Makefile.am +++ b/src/confd/src/Makefile.am @@ -1,5 +1,5 @@ CFLAGS = -Wall -Wextra -Werror -Wno-unused-parameter -AM_CPPFLAGS = -D_DEFAULT_SOURCE -D_XOPEN_SOURCE -DYANG_PATH_=\"$(YANGDIR)/\" +AM_CPPFLAGS = -D_DEFAULT_SOURCE -D_XOPEN_SOURCE -D_GNU_SOURCE -DYANG_PATH_=\"$(YANGDIR)/\" plugindir = $(srpdplugindir) plugin_LTLIBRARIES = confd-plugin.la diff --git a/src/confd/src/core.h b/src/confd/src/core.h index 4dd130fc..cbe9d517 100644 --- a/src/confd/src/core.h +++ b/src/confd/src/core.h @@ -17,6 +17,12 @@ #include #include +#ifndef HAVE_VASPRINTF +int vasprintf(char **strp, const char *fmt, va_list ap); +#endif +#ifndef HAVE_ASPRINTF +int asprintf(char **strp, const char *fmt, ...); +#endif #define NELEMS(arr) (sizeof(arr) / sizeof(arr[0]))