inline static void
php_sprintf_appendstring(char **buffer, int *pos, int *size, char *add,
int min_width, int max_width, char padding,
- int alignment, int len)
+ int alignment, int len, int sign)
{
register int npad = min_width - MIN(len,(max_width?max_width:len));
*buffer = erealloc(*buffer, *size);
}
if (alignment == ALIGN_RIGHT) {
+ if (sign && padding=='0') { (*buffer)[(*pos)++] = '-'; add++; }
while (npad-- > 0) {
(*buffer)[(*pos)++] = padding;
}
magn = (unsigned int) number;
}
+ /* Can't right-pad 0's on integers */
+ if(alignment==0 && padding=='0') padding=' ';
+
numbuf[i] = '\0';
do {
PRINTF_DEBUG(("sprintf: appending %d as \"%s\", i=%d\n",
number, &numbuf[i], i));
php_sprintf_appendstring(buffer, pos, size, &numbuf[i], width, 0,
- padding, alignment, (NUM_BUF_SIZE - 1) - i);
+ padding, alignment, (NUM_BUF_SIZE - 1) - i, neg);
}
width += (precision + 1);
}
php_sprintf_appendstring(buffer, pos, size, numbuf, width, 0, padding,
- alignment, i);
+ alignment, i, sign);
}
numbuf[--i] = '-';
}
php_sprintf_appendstring(buffer, pos, size, &numbuf[i], width, 0,
- padding, alignment, (NUM_BUF_SIZE - 1) - i);
+ padding, alignment, (NUM_BUF_SIZE - 1) - i, neg);
}
args[currarg]->value.str.val,
width, precision, padding,
alignment,
- args[currarg]->value.str.len);
+ args[currarg]->value.str.len,0);
break;
case 'd':