diff options
Diffstat (limited to 'ext/standard/formatted_print.c')
-rw-r--r-- | ext/standard/formatted_print.c | 106 |
1 files changed, 52 insertions, 54 deletions
diff --git a/ext/standard/formatted_print.c b/ext/standard/formatted_print.c index edd704b068..3c570d32ee 100644 --- a/ext/standard/formatted_print.c +++ b/ext/standard/formatted_print.c @@ -52,7 +52,7 @@ static char HEXCHARS[] = "0123456789ABCDEF"; /* php_spintf_appendchar() {{{ */ inline static void -php_sprintf_appendchar(zend_string **buffer, int *pos, char add TSRMLS_DC) +php_sprintf_appendchar(zend_string **buffer, php_size_t *pos, char add TSRMLS_DC) { if (!*buffer || (*pos + 1) >= (*buffer)->len) { PRINTF_DEBUG(("%s(): ereallocing buffer to %d bytes\n", get_active_function_name(TSRMLS_C), (*buffer)->len)); @@ -65,22 +65,18 @@ php_sprintf_appendchar(zend_string **buffer, int *pos, char add TSRMLS_DC) /* php_spintf_appendstring() {{{ */ inline static void -php_sprintf_appendstring(zend_string **buffer, int *pos, char *add, - int min_width, int max_width, char padding, - int alignment, int len, int neg, int expprec, int always_sign) +php_sprintf_appendstring(zend_string **buffer, php_size_t *pos, char *add, + php_size_t min_width, php_size_t max_width, char padding, + php_size_t alignment, php_size_t len, int neg, int expprec, int always_sign) { - register int npad; - int req_size; - int copy_len; - int m_width; + register php_size_t npad; + php_size_t req_size; + php_size_t copy_len; + php_size_t m_width; copy_len = (expprec ? MIN(max_width, len) : len); - npad = min_width - copy_len; + npad = (min_width < copy_len) ? 0 : min_width - copy_len; - if (npad < 0) { - npad = 0; - } - PRINTF_DEBUG(("sprintf: appendstring(%x, %d, %d, \"%s\", %d, '%c', %d)\n", *buffer, *pos, (*buffer)->len, add, min_width, padding, alignment)); m_width = MAX(min_width, copy_len); @@ -92,10 +88,10 @@ php_sprintf_appendstring(zend_string **buffer, int *pos, char *add, req_size = *pos + m_width + 1; if (!*buffer || req_size > (*buffer)->len) { - int size = (*buffer)->len; + zend_size_t size = (*buffer)->len; while (req_size > size) { - if (size > INT_MAX/2) { - zend_error_noreturn(E_ERROR, "Field width %d is too long", req_size); + if (size > ZEND_SIZE_MAX/2) { + zend_error_noreturn(E_ERROR, "Field width %zd is too long", req_size); } size <<= 1; } @@ -126,21 +122,21 @@ php_sprintf_appendstring(zend_string **buffer, int *pos, char *add, /* php_spintf_appendint() {{{ */ inline static void -php_sprintf_appendint(zend_string **buffer, int *pos, long number, - int width, char padding, int alignment, +php_sprintf_appendint(zend_string **buffer, php_size_t *pos, php_int_t number, + php_size_t width, char padding, php_size_t alignment, int always_sign) { char numbuf[NUM_BUF_SIZE]; - register unsigned long magn, nmagn; + register php_uint_t magn, nmagn; register unsigned int i = NUM_BUF_SIZE - 1, neg = 0; PRINTF_DEBUG(("sprintf: appendint(%x, %x, %x, %d, %d, '%c', %d)\n", *buffer, pos, &(*buffer)->len, number, width, padding, alignment)); if (number < 0) { neg = 1; - magn = ((unsigned long) -(number + 1)) + 1; + magn = ((php_uint_t) -(number + 1)) + 1; } else { - magn = (unsigned long) number; + magn = (php_uint_t) number; } /* Can't right-pad 0's on integers */ @@ -170,17 +166,17 @@ php_sprintf_appendint(zend_string **buffer, int *pos, long number, /* php_spintf_appenduint() {{{ */ inline static void -php_sprintf_appenduint(zend_string **buffer, int *pos, - unsigned long number, - int width, char padding, int alignment) +php_sprintf_appenduint(zend_string **buffer, php_size_t *pos, + php_uint_t number, + php_size_t width, char padding, php_size_t alignment) { char numbuf[NUM_BUF_SIZE]; - register unsigned long magn, nmagn; + register php_uint_t magn, nmagn; register unsigned int i = NUM_BUF_SIZE - 1; PRINTF_DEBUG(("sprintf: appenduint(%x, %x, %x, %d, %d, '%c', %d)\n", *buffer, pos, &(*buffer)->len, number, width, padding, alignment)); - magn = (unsigned long) number; + magn = (php_uint_t) number; /* Can't right-pad 0's on integers */ if (alignment == 0 && padding == '0') padding = ' '; @@ -202,17 +198,18 @@ php_sprintf_appenduint(zend_string **buffer, int *pos, /* php_spintf_appenddouble() {{{ */ inline static void -php_sprintf_appenddouble(zend_string **buffer, int *pos, +php_sprintf_appenddouble(zend_string **buffer, php_size_t *pos, double number, - int width, char padding, - int alignment, int precision, + php_size_t width, char padding, + php_size_t alignment, int precision, int adjust, char fmt, int always_sign TSRMLS_DC) { char num_buf[NUM_BUF_SIZE]; char *s = NULL; - int s_len = 0, is_negative = 0; + php_size_t s_len = 0; + int is_negative = 0; #ifdef HAVE_LOCALE_H struct lconv *lconv; #endif @@ -293,13 +290,13 @@ php_sprintf_appenddouble(zend_string **buffer, int *pos, /* php_spintf_appendd2n() {{{ */ inline static void -php_sprintf_append2n(zend_string **buffer, int *pos, long number, - int width, char padding, int alignment, int n, +php_sprintf_append2n(zend_string **buffer, php_size_t *pos, php_int_t number, + php_size_t width, char padding, php_size_t alignment, int n, char *chartable, int expprec) { char numbuf[NUM_BUF_SIZE]; - register unsigned long num; - register unsigned int i = NUM_BUF_SIZE - 1; + register php_uint_t num; + register php_uint_t i = NUM_BUF_SIZE - 1; register int andbits = (1 << n) - 1; PRINTF_DEBUG(("sprintf: append2n(%x, %x, %x, %d, %d, '%c', %d, %d, %x)\n", @@ -307,7 +304,7 @@ php_sprintf_append2n(zend_string **buffer, int *pos, long number, chartable)); PRINTF_DEBUG(("sprintf: append2n 2^%d andbits=%x\n", n, andbits)); - num = (unsigned long) number; + num = (php_uint_t) number; numbuf[i] = '\0'; do { @@ -324,11 +321,11 @@ php_sprintf_append2n(zend_string **buffer, int *pos, long number, /* php_spintf_getnumber() {{{ */ inline static int -php_sprintf_getnumber(char *buffer, int *pos) +php_sprintf_getnumber(char *buffer, php_size_t *pos) { char *endptr; - register long num = strtol(&buffer[*pos], &endptr, 10); - register int i = 0; + register php_int_t num = ZEND_STRTOI(&buffer[*pos], &endptr, 10); + register php_size_t i = 0; if (endptr != NULL) { i = (endptr - &buffer[*pos]); @@ -373,7 +370,8 @@ php_formatted_print(int param_count, int use_array, int format_offset TSRMLS_DC) { zval *newargs = NULL; zval *args, *z_format; - int argc, size = 240, inpos = 0, outpos = 0, temppos; + int argc; + php_size_t size = 240, inpos = 0, outpos = 0, temppos; int alignment, currarg, adjusting, argnum, width, precision; char *format, padding; zend_string *result; @@ -416,12 +414,12 @@ php_formatted_print(int param_count, int use_array, int format_offset TSRMLS_DC) } format = Z_STRVAL(args[format_offset]); - format_len = Z_STRLEN(args[format_offset]); + format_len = Z_STRSIZE(args[format_offset]); result = STR_ALLOC(size, 0); currarg = 1; - while (inpos < Z_STRLEN(args[format_offset])) { + while (inpos < Z_STRSIZE(args[format_offset])) { int expprec = 0; zval *tmp; @@ -569,14 +567,14 @@ php_formatted_print(int param_count, int use_array, int format_offset TSRMLS_DC) case 'd': php_sprintf_appendint(&result, &outpos, - zval_get_long(tmp), + zval_get_int(tmp), width, padding, alignment, always_sign); break; case 'u': php_sprintf_appenduint(&result, &outpos, - zval_get_long(tmp), + zval_get_int(tmp), width, padding, alignment); break; @@ -596,33 +594,33 @@ php_formatted_print(int param_count, int use_array, int format_offset TSRMLS_DC) case 'c': php_sprintf_appendchar(&result, &outpos, - (char) zval_get_long(tmp) TSRMLS_CC); + (char) zval_get_int(tmp) TSRMLS_CC); break; case 'o': php_sprintf_append2n(&result, &outpos, - zval_get_long(tmp), + zval_get_int(tmp), width, padding, alignment, 3, hexchars, expprec); break; case 'x': php_sprintf_append2n(&result, &outpos, - zval_get_long(tmp), + zval_get_int(tmp), width, padding, alignment, 4, hexchars, expprec); break; case 'X': php_sprintf_append2n(&result, &outpos, - zval_get_long(tmp), + zval_get_int(tmp), width, padding, alignment, 4, HEXCHARS, expprec); break; case 'b': php_sprintf_append2n(&result, &outpos, - zval_get_long(tmp), + zval_get_int(tmp), width, padding, alignment, 1, hexchars, expprec); break; @@ -680,14 +678,14 @@ PHP_FUNCTION(vsprintf) PHP_FUNCTION(user_printf) { zend_string *result; - int rlen; + php_size_t rlen; if ((result=php_formatted_print(ZEND_NUM_ARGS(), 0, 0 TSRMLS_CC))==NULL) { RETURN_FALSE; } rlen = PHPWRITE(result->val, result->len); STR_FREE(result); - RETURN_LONG(rlen); + RETURN_INT(rlen); } /* }}} */ @@ -696,14 +694,14 @@ PHP_FUNCTION(user_printf) PHP_FUNCTION(vprintf) { zend_string *result; - int rlen; + php_size_t rlen; if ((result=php_formatted_print(ZEND_NUM_ARGS(), 1, 0 TSRMLS_CC))==NULL) { RETURN_FALSE; } rlen = PHPWRITE(result->val, result->len); STR_FREE(result); - RETURN_LONG(rlen); + RETURN_INT(rlen); } /* }}} */ @@ -731,7 +729,7 @@ PHP_FUNCTION(fprintf) php_stream_write(stream, result->val, result->len); - RETVAL_LONG(result->len); + RETVAL_INT(result->len); STR_FREE(result); } /* }}} */ @@ -760,7 +758,7 @@ PHP_FUNCTION(vfprintf) php_stream_write(stream, result->val, result->len); - RETVAL_LONG(result->len); + RETVAL_INT(result->len); STR_FREE(result); } /* }}} */ |