#include #include #include #include #include FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); /** * Write a formatted string to newly allocated memory. * * @v strp Pointer to hold allocated string * @v fmt Format string * @v args Arguments corresponding to the format string * @ret len Length of formatted string */ int vasprintf ( char **strp, const char *fmt, va_list args ) { size_t len; va_list args_tmp; /* Calculate length needed for string */ va_copy ( args_tmp, args ); len = ( vsnprintf ( NULL, 0, fmt, args_tmp ) + 1 ); va_end ( args_tmp ); /* Allocate and fill string */ *strp = malloc ( len ); if ( ! *strp ) return -ENOMEM; return vsnprintf ( *strp, len, fmt, args ); } /** * Write a formatted string to newly allocated memory. * * @v strp Pointer to hold allocated string * @v fmt Format string * @v ... Arguments corresponding to the format string * @ret len Length of formatted string */ int asprintf ( char **strp, const char *fmt, ... ) { va_list args; int len; va_start ( args, fmt ); len = vasprintf ( strp, fmt, args ); va_end ( args ); return len; }