asprintf.c

asprintf polyfill, regardless of _GNU_SOURCE
git clone git://git.finwo.net/lib/asprintf.c
Log | Files | Refs

commit e5fc661626336e227e0cedde8abb154549370b6b
Author: finwo <finwo@pm.me>
Date:   Tue, 24 Oct 2023 00:32:09 +0200

Project init

Diffstat:
Aconfig.mk | 1+
Apackage.ini | 6++++++
Asrc/asprintf.c | 16++++++++++++++++
Asrc/asprintf.h | 5+++++
4 files changed, 28 insertions(+), 0 deletions(-)

diff --git a/config.mk b/config.mk @@ -0,0 +1 @@ +SRC+=__DIRNAME/src/asprintf.c diff --git a/package.ini b/package.ini @@ -0,0 +1,6 @@ +[export] +config.mk=config.mk +include/finwo/asprintf.h=src/asprintf.h + +[package] +name=finwo/asprintf.h diff --git a/src/asprintf.c b/src/asprintf.c @@ -0,0 +1,16 @@ +#ifndef _GNU_SOURCE +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> + +// Polyfill asprintf, comes from stdio when _GNU_SOURCE is defined +char * asprintf(char **restrict strp, const char *restrict fmt, ...) { + va_list argptr; + va_start(argptr, fmt); + int size = vsnprintf(NULL, 0, fmt, argptr); + char *output = calloc(1, size + 1); + vsnprintf(output, size + 1, fmt, argptr); + va_end(argptr); + return output; +} +#endif diff --git a/src/asprintf.h b/src/asprintf.h @@ -0,0 +1,5 @@ +#ifdef _GNU_SOURCE +#include <stdio.h> +#else +char * asprintf(char **restrict strp, const char *restrict fmt, ...); +#endif