char *cvt;
register int i = 0, j = 0;
int sign, decpt, cvt_len;
+ char decimal_point = '.';
#ifdef HAVE_LOCALE_H
struct lconv lc;
- char decimal_point;
+ char locale_decimal_point;
localeconv_r(&lc);
- decimal_point = (lc.decimal_point)[0];
+ locale_decimal_point = (lc.decimal_point)[0];
#else
- char decimal_point = '.';
+ char locale_decimal_point = '.';
#endif
PRINTF_DEBUG(("sprintf: appenddouble(%x, %x, %x, %f, %d, '%c', %d, %c)\n",
numbuf[i++] = '+';
}
- if (fmt == 'f') {
+ if (fmt == 'f' || fmt == 'F') {
if (decpt <= 0) {
numbuf[i++] = '0';
if (precision > 0) {
int k = precision;
- numbuf[i++] = decimal_point;
+ numbuf[i++] = fmt == 'F' ? decimal_point : locale_decimal_point;
while ((decpt++ < 0) && k--) {
numbuf[i++] = '0';
}
numbuf[i++] = j < cvt_len ? cvt[j++] : '0';
}
if (precision > 0) {
- numbuf[i++] = decimal_point;
+ numbuf[i++] = fmt == 'F' ? decimal_point : locale_decimal_point;
while (precision-- > 0) {
numbuf[i++] = j < cvt_len ? cvt[j++] : '0';
}
* "b" integer argument is printed as binary
* "c" integer argument is printed as a single character
* "d" argument is an integer
- * "f" the argument is a float
+ * "f" the argument is a float, the decimal separator is locale-aware
+ * "F" the argument is a float, but the decimal separator is always "."
* "o" integer argument is printed as octal
* "s" argument is a string
* "x" integer argument is printed as lowercase hexadecimal
case 'e':
case 'f':
+ case 'F':
/* XXX not done */
convert_to_double(tmp);
php_sprintf_appenddouble(&result, &outpos, &size,
-/* Generated by re2c 0.9.4 on Fri Sep 24 23:45:23 2004 */
-#line 1 "/usr/src/PHP_4_3_0/ext/standard/var_unserializer.re"
+/* Generated by re2c 0.5 on Thu Nov 4 01:10:35 2004 */
+#line 1 "/dat/dev/php/php-4.3dev/ext/standard/var_unserializer.re"
/*
+----------------------------------------------------------------------+
| PHP Version 4 |
#define YYMARKER marker
-#line 118 "/usr/src/PHP_4_3_0/ext/standard/var_unserializer.re"
+#line 118
-
-#line 7 "<stdout>"
{
YYCTYPE yych;
unsigned int yyaccept;
goto yy15;
} else {
if(yych <= '}') goto yy13;
- if(yych <= 0xBF) goto yy15;
+ if(yych <= '\277') goto yy15;
goto yy2;
}
}
if(yych == ':') goto yy80;
goto yy4;
yy4:
-#line 511 "/usr/src/PHP_4_3_0/ext/standard/var_unserializer.re"
-{ return 0; }
-#line 101 "<stdout>"
+#line 511
+ { return 0; }
yy5: yych = *++YYCURSOR;
if(yych == ';') goto yy78;
goto yy4;
yych = *(YYMARKER = ++YYCURSOR);
if(yych == ':') goto yy16;
goto yy4;
-yy13: ++YYCURSOR;
+yy13: yych = *++YYCURSOR;
goto yy14;
yy14:
-#line 505 "/usr/src/PHP_4_3_0/ext/standard/var_unserializer.re"
-{
+#line 505
+ {
/* this is the case where we have less data than planned */
php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unexpected end of serialized data");
return 0; /* not sure if it should be 0 or 1 here? */
}
-#line 142 "<stdout>"
yy15: yych = *++YYCURSOR;
goto yy4;
yy16: yych = *++YYCURSOR;
yy20: yych = *++YYCURSOR;
if(yych != '"') goto yy2;
goto yy21;
-yy21: ++YYCURSOR;
+yy21: yych = *++YYCURSOR;
goto yy22;
yy22:
-#line 424 "/usr/src/PHP_4_3_0/ext/standard/var_unserializer.re"
-{
+#line 424
+ {
size_t len, len2, maxlen;
int elements;
char *class_name;
return object_common2(UNSERIALIZE_PASSTHRU, elements);
}
-#line 247 "<stdout>"
yy23: yych = *++YYCURSOR;
if(yych <= ','){
if(yych != '+') goto yy2;
yy27: yych = *++YYCURSOR;
if(yych != '"') goto yy2;
goto yy28;
-yy28: ++YYCURSOR;
+yy28: yych = *++YYCURSOR;
goto yy29;
yy29:
-#line 416 "/usr/src/PHP_4_3_0/ext/standard/var_unserializer.re"
-{
+#line 416
+ {
INIT_PZVAL(*rval);
return object_common2(UNSERIALIZE_PASSTHRU,
object_common1(UNSERIALIZE_PASSTHRU, ZEND_STANDARD_CLASS_DEF_PTR));
}
-#line 285 "<stdout>"
yy30: yych = *++YYCURSOR;
if(yych == '+') goto yy31;
if(yych <= '/') goto yy2;
yy34: yych = *++YYCURSOR;
if(yych != '{') goto yy2;
goto yy35;
-yy35: ++YYCURSOR;
+yy35: yych = *++YYCURSOR;
goto yy36;
yy36:
-#line 398 "/usr/src/PHP_4_3_0/ext/standard/var_unserializer.re"
-{
+#line 398
+ {
int elements = parse_iv(start + 2);
*p = YYCURSOR;
return finish_nested_data(UNSERIALIZE_PASSTHRU);
}
-#line 328 "<stdout>"
yy37: yych = *++YYCURSOR;
if(yych == '+') goto yy38;
if(yych <= '/') goto yy2;
yy41: yych = *++YYCURSOR;
if(yych != '"') goto yy2;
goto yy42;
-yy42: ++YYCURSOR;
+yy42: yych = *++YYCURSOR;
goto yy43;
yy43:
-#line 370 "/usr/src/PHP_4_3_0/ext/standard/var_unserializer.re"
-{
+#line 370
+ {
size_t len, maxlen;
char *str;
ZVAL_STRINGL(*rval, str, len, 1);
return 1;
}
-#line 381 "<stdout>"
yy44: yych = *++YYCURSOR;
if(yych <= '/'){
if(yych <= ','){
goto yy2;
}
}
-yy54: ++YYCURSOR;
+yy54: yych = *++YYCURSOR;
goto yy55;
yy55:
-#line 363 "/usr/src/PHP_4_3_0/ext/standard/var_unserializer.re"
-{
+#line 363
+ {
*p = YYCURSOR;
INIT_PZVAL(*rval);
ZVAL_DOUBLE(*rval, atof(start + 2));
return 1;
}
-#line 479 "<stdout>"
yy56: yych = *++YYCURSOR;
if(yych <= ','){
if(yych != '+') goto yy2;
yy64: yych = *++YYCURSOR;
if(yych != ';') goto yy2;
goto yy65;
-yy65: ++YYCURSOR;
+yy65: yych = *++YYCURSOR;
goto yy66;
yy66:
-#line 346 "/usr/src/PHP_4_3_0/ext/standard/var_unserializer.re"
-{
+#line 346
+ {
*p = YYCURSOR;
INIT_PZVAL(*rval);
#if defined(HAVE_ATOF_ACCEPTS_NAN) && defined(HAVE_ATOF_ACCEPTS_INF)
#endif
return 1;
}
-#line 558 "<stdout>"
yy67: yych = *++YYCURSOR;
if(yych == 'N') goto yy64;
goto yy2;
if(yych <= '9') goto yy70;
if(yych != ';') goto yy2;
goto yy72;
-yy72: ++YYCURSOR;
+yy72: yych = *++YYCURSOR;
goto yy73;
yy73:
-#line 339 "/usr/src/PHP_4_3_0/ext/standard/var_unserializer.re"
-{
+#line 339
+ {
*p = YYCURSOR;
INIT_PZVAL(*rval);
ZVAL_LONG(*rval, parse_iv(start + 2));
return 1;
}
-#line 595 "<stdout>"
yy74: yych = *++YYCURSOR;
if(yych <= '/') goto yy2;
if(yych >= '2') goto yy2;
yy75: yych = *++YYCURSOR;
if(yych != ';') goto yy2;
goto yy76;
-yy76: ++YYCURSOR;
+yy76: yych = *++YYCURSOR;
goto yy77;
yy77:
-#line 332 "/usr/src/PHP_4_3_0/ext/standard/var_unserializer.re"
-{
+#line 332
+ {
*p = YYCURSOR;
INIT_PZVAL(*rval);
ZVAL_BOOL(*rval, parse_iv(start + 2));
return 1;
}
-#line 613 "<stdout>"
-yy78: ++YYCURSOR;
+yy78: yych = *++YYCURSOR;
goto yy79;
yy79:
-#line 325 "/usr/src/PHP_4_3_0/ext/standard/var_unserializer.re"
-{
+#line 325
+ {
*p = YYCURSOR;
INIT_PZVAL(*rval);
ZVAL_NULL(*rval);
return 1;
}
-#line 624 "<stdout>"
yy80: yych = *++YYCURSOR;
if(yych <= ','){
if(yych != '+') goto yy2;
if(yych <= '9') goto yy82;
if(yych != ';') goto yy2;
goto yy84;
-yy84: ++YYCURSOR;
+yy84: yych = *++YYCURSOR;
goto yy85;
yy85:
-#line 304 "/usr/src/PHP_4_3_0/ext/standard/var_unserializer.re"
-{
+#line 304
+ {
int id;
*p = YYCURSOR;
return 1;
}
-#line 672 "<stdout>"
}
-#line 513 "/usr/src/PHP_4_3_0/ext/standard/var_unserializer.re"
+#line 513
return 0;