You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by tr...@apache.org on 2004/06/27 13:45:11 UTC
cvs commit: apr/test teststr.c
trawick 2004/06/27 04:45:11
Modified: . Tag: APR_0_9_BRANCH CHANGES
strings Tag: APR_0_9_BRANCH apr_snprintf.c
test Tag: APR_0_9_BRANCH teststr.c
Log:
Fix apr_snprintf() to respect precision for small floating point
numbers.
PR: 29621
Submitted by: Artur Zaprzala <zybi talex.pl>
Reviewed by: Jeff Trawick
Revision Changes Path
No revision
No revision
1.426.2.25 +3 -0 apr/CHANGES
Index: CHANGES
===================================================================
RCS file: /home/cvs/apr/CHANGES,v
retrieving revision 1.426.2.24
retrieving revision 1.426.2.25
diff -u -r1.426.2.24 -r1.426.2.25
--- CHANGES 23 Jun 2004 15:07:58 -0000 1.426.2.24
+++ CHANGES 27 Jun 2004 11:45:11 -0000 1.426.2.25
@@ -1,5 +1,8 @@
Changes with APR 0.9.5
+ *) Fix apr_snprintf() to respect precision for small floating point
+ numbers. PR 29621. [Artur Zaprzala <zybi talex.pl>]
+
*) Add command type APR_SHELLCMD_ENV for creating a process
which is started by the shell and which inherits the parent's
environment variables. [Jeff Trawick]
No revision
No revision
1.35.2.3 +2 -1 apr/strings/apr_snprintf.c
Index: apr_snprintf.c
===================================================================
RCS file: /home/cvs/apr/strings/apr_snprintf.c,v
retrieving revision 1.35.2.2
retrieving revision 1.35.2.3
diff -u -r1.35.2.2 -r1.35.2.3
--- apr_snprintf.c 4 Apr 2004 15:21:08 -0000 1.35.2.2
+++ apr_snprintf.c 27 Jun 2004 11:45:11 -0000 1.35.2.3
@@ -132,11 +132,12 @@
p1 = &buf[ndigits];
if (eflag == 0)
p1 += r2;
- *decpt = r2;
if (p1 < &buf[0]) {
+ *decpt = -ndigits;
buf[0] = '\0';
return (buf);
}
+ *decpt = r2;
while (p <= p1 && p < &buf[NDIG]) {
arg *= 10;
arg = modf(arg, &fj);
No revision
No revision
1.16.2.3 +19 -0 apr/test/teststr.c
Index: teststr.c
===================================================================
RCS file: /home/cvs/apr/test/teststr.c,v
retrieving revision 1.16.2.2
retrieving revision 1.16.2.3
diff -u -r1.16.2.2 -r1.16.2.3
--- teststr.c 4 Apr 2004 15:21:08 -0000 1.16.2.2
+++ teststr.c 27 Jun 2004 11:45:11 -0000 1.16.2.3
@@ -142,6 +142,24 @@
CuAssertStrEquals(tc, buf, "3141592653589793238");
}
+static void snprintf_underflow(CuTest *tc)
+{
+ char buf[20];
+ int rv;
+
+ rv = apr_snprintf(buf, sizeof buf, "%.2f", (double)0.0001);
+ CuAssertIntEquals(tc, 4, rv);
+ CuAssertStrEquals(tc, "0.00", buf);
+
+ rv = apr_snprintf(buf, sizeof buf, "%.2f", (double)0.001);
+ CuAssertIntEquals(tc, 4, rv);
+ CuAssertStrEquals(tc, "0.00", buf);
+
+ rv = apr_snprintf(buf, sizeof buf, "%.2f", (double)0.01);
+ CuAssertIntEquals(tc, 4, rv);
+ CuAssertStrEquals(tc, "0.01", buf);
+}
+
static void string_error(CuTest *tc)
{
char buf[128], *rv;
@@ -271,6 +289,7 @@
SUITE_ADD_TEST(suite, snprintf_0nonNULL);
SUITE_ADD_TEST(suite, snprintf_noNULL);
SUITE_ADD_TEST(suite, snprintf_int64);
+ SUITE_ADD_TEST(suite, snprintf_underflow);
SUITE_ADD_TEST(suite, test_strtok);
SUITE_ADD_TEST(suite, string_error);
SUITE_ADD_TEST(suite, string_long);