helly Sat Feb 24 18:24:06 2007 UTC Modified files: /php-src/main snprintf.c snprintf.h Log: - Add [v]slprintf http://cvs.php.net/viewvc.cgi/php-src/main/snprintf.c?r1=1.49&r2=1.50&diff_format=u Index: php-src/main/snprintf.c diff -u php-src/main/snprintf.c:1.49 php-src/main/snprintf.c:1.50 --- php-src/main/snprintf.c:1.49 Mon Jan 1 09:29:35 2007 +++ php-src/main/snprintf.c Sat Feb 24 18:24:06 2007 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: snprintf.c,v 1.49 2007/01/01 09:29:35 sebastian Exp $ */ +/* $Id: snprintf.c,v 1.50 2007/02/24 18:24:06 helly Exp $ */ #include "php.h" @@ -1160,6 +1160,34 @@ } +PHPAPI int ap_php_slprintf(char *buf, size_t len, const char *format,...) +{ + int cc; + va_list ap; + + va_start(ap, format); + strx_printv(&cc, buf, len, format, ap); + va_end(ap); + if (cc >= len) { + cc = len -1; + buf[cc] = '\0'; + } + return cc; +} + + +PHPAPI int ap_php_vslprintf(char *buf, size_t len, const char *format, va_list ap) +{ + int cc; + + strx_printv(&cc, buf, len, format, ap); + if (cc >= len) { + cc = len -1; + buf[cc] = '\0'; + } + return cc; +} + PHPAPI int ap_php_snprintf(char *buf, size_t len, const char *format,...) { int cc; http://cvs.php.net/viewvc.cgi/php-src/main/snprintf.h?r1=1.38&r2=1.39&diff_format=u Index: php-src/main/snprintf.h diff -u php-src/main/snprintf.h:1.38 php-src/main/snprintf.h:1.39 --- php-src/main/snprintf.h:1.38 Mon Jan 1 09:29:35 2007 +++ php-src/main/snprintf.h Sat Feb 24 18:24:06 2007 @@ -17,11 +17,11 @@ +----------------------------------------------------------------------+ */ -/* $Id: snprintf.h,v 1.38 2007/01/01 09:29:35 sebastian Exp $ */ +/* $Id: snprintf.h,v 1.39 2007/02/24 18:24:06 helly Exp $ */ /* -Comparing: sprintf, snprintf, spprintf +Comparing: sprintf, snprintf, slprintf, spprintf sprintf offers the ability to make a lot of failures since it does not know the size of the buffer it uses. Therefore usage of sprintf often @@ -36,6 +36,11 @@ A bad thing is having a big maximum while in most cases you would only need a small buffer. If the size of the resulting string is longer or equal to the buffer size than the buffer is not terminated. + The function also returns the number of chars not including the + terminating \0 that were needed to fully comply to the print request. + +slprintf same as snprintf with the difference that it actually returns the + length printed not including the terminating \0. spprintf is the dynamical version of snprintf. It allocates the buffer in size as needed and allows a maximum setting as snprintf (turn this feature @@ -71,15 +76,29 @@ NO = 0, YES = 1 } boolean_e; + BEGIN_EXTERN_C() +PHPAPI int ap_php_slprintf(char *buf, size_t len, const char *format,...) PHP_ATTRIBUTE_FORMAT(printf, 3, 4); +PHPAPI int ap_php_vslprintf(char *buf, size_t len, const char *format, va_list ap) PHP_ATTRIBUTE_FORMAT(printf, 3, 0); PHPAPI int ap_php_snprintf(char *, size_t, const char *, ...) PHP_ATTRIBUTE_FORMAT(printf, 3, 4); PHPAPI int ap_php_vsnprintf(char *, size_t, const char *, va_list ap) PHP_ATTRIBUTE_FORMAT(printf, 3, 0); 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, boolean_e add_dp, int precision, char dec_point, bool_int * is_negative, char *buf, int *len); + END_EXTERN_C() +#ifdef slprintf +#undef slprintf +#endif +#define slprintf ap_php_slprintf + +#ifdef vslprintf +#undef vslprintf +#endif +#define vslprintf ap_php_vslprintf + #ifdef snprintf #undef snprintf #endif
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php