summaryrefslogtreecommitdiff
path: root/ext/standard/formatted_print.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/standard/formatted_print.c')
-rw-r--r--ext/standard/formatted_print.c106
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);
}
/* }}} */