Merge branch 'master' of ssh://sourceware.org/git/glibc

Conflicts:
	ChangeLog
This commit is contained in:
Ulrich Drepper 2012-03-08 02:49:12 -05:00
commit ca2ff9fc04
5 changed files with 82 additions and 20 deletions

View File

@ -2,6 +2,14 @@
* stdio-common/tst-long-dbl-fphex.c: Fix test for non ldbl-96 targets.
2012-03-08 Marek Polacek <polacek@redhat.com>
[BZ #13806]
* stdio-common/Makefile (tests): Add tst-fphex-wide.
* stdio-common/tst-fphex.c: Define a few macros to make the
test reusable. Use them.
* stdio-common/tst-fphex-wide.c: New file.
2012-03-08 Joseph Myers <joseph@codesourcery.com>
[BZ #6911]

2
NEWS
View File

@ -14,7 +14,7 @@ Version 2.16
10210, 10545, 10716, 11174, 11322, 11365, 11494, 12047, 13058, 13525,
13526, 13527, 13528, 13529, 13530, 13531, 13532, 13533, 13547, 13551,
13552, 13553, 13555, 13559, 13583, 13618, 13637, 13656, 13695, 13704,
13706, 13726, 13738, 13786, 13792
13706, 13726, 13738, 13786, 13792, 13806
* ISO C11 support:

View File

@ -58,7 +58,7 @@ tests := tstscanf test_rdwr test-popen tstgetln test-fseek \
tst-fwrite bug16 bug17 tst-swscanf tst-sprintf2 bug18 bug18a \
bug19 bug19a tst-popen2 scanf13 scanf14 scanf15 bug20 bug21 bug22 \
scanf16 scanf17 tst-setvbuf1 tst-grouping bug23 bug24 \
bug-vfprintf-nargs tst-long-dbl-fphex
bug-vfprintf-nargs tst-long-dbl-fphex tst-fphex-wide
test-srcs = tst-unbputc tst-printf

View File

@ -0,0 +1,30 @@
/* Test program for %a wprintf formats.
This file is part of the GNU C Library.
Copyright (C) 2012 Free Software Foundation, Inc.
Contributed by Marek Polacek <polacek@redhat.com>, 2012.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <wchar.h>
#define STR_LEN wcslen
#define SPRINT swprintf
#define STR_CMP wcscmp
#define CHAR_T wchar_t
#define PRINT wprintf
#define L_(Str) L##Str
#define L "l"
#include "tst-fphex.c"

View File

@ -3,30 +3,52 @@
#include <stdio.h>
#include <string.h>
#ifndef STR_LEN
# define STR_LEN strlen
#endif
#ifndef STR_CMP
# define STR_CMP strcmp
#endif
#ifndef SPRINT
# define SPRINT snprintf
#endif
#ifndef CHAR_T
# define CHAR_T char
#endif
#ifndef PRINT
# define PRINT printf
#endif
#ifndef L_
# define L_(Str) Str
#endif
#ifndef L
# define L
#endif
struct testcase
{
double value;
const char *fmt;
const char *expect;
const CHAR_T *fmt;
const CHAR_T *expect;
};
static const struct testcase testcases[] =
{
{ 0x0.0030p+0, "%a", "0x1.8p-11" },
{ 0x0.0040p+0, "%a", "0x1p-10" },
{ 0x0.0030p+0, "%040a", "0x00000000000000000000000000000001.8p-11" },
{ 0x0.0040p+0, "%040a", "0x0000000000000000000000000000000001p-10" },
{ 0x0.0040p+0, "%40a", " 0x1p-10" },
{ 0x0.0040p+0, "%#40a", " 0x1.p-10" },
{ 0x0.0040p+0, "%-40a", "0x1p-10 " },
{ 0x0.0040p+0, "%#-40a", "0x1.p-10 " },
{ 0x0.0030p+0, "%040e", "00000000000000000000000000007.324219e-04" },
{ 0x0.0040p+0, "%040e", "00000000000000000000000000009.765625e-04" },
{ 0x0.0030p+0, L_("%a"), L_("0x1.8p-11") },
{ 0x0.0040p+0, L_("%a"), L_("0x1p-10") },
{ 0x0.0030p+0, L_("%040a"), L_("0x00000000000000000000000000000001.8p-11") },
{ 0x0.0040p+0, L_("%040a"), L_("0x0000000000000000000000000000000001p-10") },
{ 0x0.0040p+0, L_("%40a"), L_(" 0x1p-10") },
{ 0x0.0040p+0, L_("%#40a"), L_(" 0x1.p-10") },
{ 0x0.0040p+0, L_("%-40a"), L_("0x1p-10 ") },
{ 0x0.0040p+0, L_("%#-40a"), L_("0x1.p-10 ") },
{ 0x0.0030p+0, L_("%040e"), L_("00000000000000000000000000007.324219e-04") },
{ 0x0.0040p+0, L_("%040e"), L_("00000000000000000000000000009.765625e-04") },
};
static int
do_test (int argc, char **argv)
do_test (void)
{
const struct testcase *t;
int result = 0;
@ -35,12 +57,13 @@ do_test (int argc, char **argv)
t < &testcases[sizeof testcases / sizeof testcases[0]];
++t)
{
char buf[1024];
int n = snprintf (buf, sizeof buf, t->fmt, t->value);
if (n != strlen (t->expect) || strcmp (buf, t->expect) != 0)
CHAR_T buf[1024];
int n = SPRINT (buf, sizeof buf / sizeof (buf[0]), t->fmt, t->value);
if (n != STR_LEN (t->expect) || STR_CMP (buf, t->expect) != 0)
{
printf ("%s\tExpected \"%s\" (%Zu)\n\tGot \"%s\" (%d, %Zu)\n",
t->fmt, t->expect, strlen (t->expect), buf, n, strlen (buf));
PRINT (L_("%" L "s\tExpected \"%" L "s\" (%Zu)\n\tGot \"%" L
"s\" (%d, %Zu)\n"), t->fmt, t->expect, STR_LEN (t->expect),
buf, n, STR_LEN (buf));
result = 1;
}
}
@ -48,4 +71,5 @@ do_test (int argc, char **argv)
return result;
}
#define TEST_FUNCTION do_test ()
#include "../test-skeleton.c"