From: Scott MacVicar Date: Fri, 21 Nov 2008 22:05:03 +0000 (+0000) Subject: MFH Add vasprintf() so the buffer can be automatically calculated, you need to efree... X-Git-Tag: php-5.3.0alpha2~105 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bfbe9a34ab0cc9c59e3c1a31317ad9fa44cd98c0;p=php MFH Add vasprintf() so the buffer can be automatically calculated, you need to efree this when done though! --- diff --git a/main/snprintf.c b/main/snprintf.c index 81998cf970..dbe7b10023 100644 --- a/main/snprintf.c +++ b/main/snprintf.c @@ -1268,6 +1268,30 @@ PHPAPI int ap_php_vsnprintf(char *buf, size_t len, const char *format, va_list a } /* }}} */ +PHPAPI int ap_php_vasprintf(char **buf, const char *format, va_list ap) /* {{{ */ +{ + va_list ap2; + int cc; + + va_copy(ap2, ap); + cc = ap_php_vsnprintf(NULL, 0, format, ap2); + va_end(ap2); + + *buf = NULL; + + if (cc >= 0) { + if ((*buf = emalloc(++cc)) != NULL) { + if ((cc = ap_php_vsnprintf(*buf, cc, format, ap)) < 0) { + efree(*buf); + *buf = NULL; + } + } + } + + return cc; +} +/* }}} */ + /* * Local variables: * tab-width: 4 diff --git a/main/snprintf.h b/main/snprintf.h index 3ba50259ff..c55d5cb35a 100644 --- a/main/snprintf.h +++ b/main/snprintf.h @@ -82,6 +82,7 @@ PHPAPI int ap_php_slprintf(char *buf, size_t len, const char *format,...); PHPAPI int ap_php_vslprintf(char *buf, size_t len, const char *format, va_list ap); PHPAPI int ap_php_snprintf(char *, size_t, const char *, ...); PHPAPI int ap_php_vsnprintf(char *, size_t, const char *, va_list ap); +PHPAPI int ap_php_vasprintf(char **buf, const char *format, va_list ap); PHPAPI int php_sprintf (char* s, const char* format, ...) PHP_ATTRIBUTE_FORMAT(printf, 2, 3); PHPAPI char * php_gcvt(double value, int ndigit, char dec_point, char exponent, char *buf); PHPAPI char * php_conv_fp(register char format, register double num, @@ -109,6 +110,11 @@ END_EXTERN_C() #endif #define vsnprintf ap_php_vsnprintf +#ifdef vasprintf +#undef vasprintf +#endif +#define vasprintf ap_php_vasprintf + #ifdef sprintf #undef sprintf #endif