1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 00:02:20 +01:00

MFH Add vasprintf() so the buffer can be automatically calculated, you need to efree this when done though!

This commit is contained in:
Scott MacVicar
2008-11-21 22:05:03 +00:00
parent a7dc862b6d
commit bfbe9a34ab
2 changed files with 30 additions and 0 deletions

View File

@@ -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

View File

@@ -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