summaryrefslogtreecommitdiff
path: root/stdio-common
diff options
context:
space:
mode:
Diffstat (limited to 'stdio-common')
-rw-r--r--stdio-common/printf_fp.c3
-rw-r--r--stdio-common/tstdiomisc.c38
-rw-r--r--stdio-common/vfprintf.c51
3 files changed, 50 insertions, 42 deletions
diff --git a/stdio-common/printf_fp.c b/stdio-common/printf_fp.c
index a72744d59e..ad60f43eac 100644
--- a/stdio-common/printf_fp.c
+++ b/stdio-common/printf_fp.c
@@ -133,9 +133,6 @@
#define MPN_GE(u,v) \
(u##size > v##size || (u##size == v##size && __mpn_cmp (u, v, u##size) >= 0))
-extern int __isinfl_internal (long double) attribute_hidden;
-extern int __isnanl_internal (long double) attribute_hidden;
-
extern mp_size_t __mpn_extract_double (mp_ptr res_ptr, mp_size_t size,
int *expt, int *is_neg,
double value);
diff --git a/stdio-common/tstdiomisc.c b/stdio-common/tstdiomisc.c
index c1c68955bd..d24c55f53c 100644
--- a/stdio-common/tstdiomisc.c
+++ b/stdio-common/tstdiomisc.c
@@ -46,9 +46,9 @@ t2 (void)
return result;
}
-volatile double nanval;
+volatile double qnanval;
volatile double infval;
-volatile long double lnanval;
+volatile long double lqnanval;
volatile long double linfval;
@@ -59,16 +59,17 @@ F (void)
wchar_t wbuf[40];
int result;
- nanval = NAN;
+ qnanval = NAN;
snprintf (buf, sizeof buf, "%a %A %e %E %f %F %g %G",
- nanval, nanval, nanval, nanval, nanval, nanval, nanval, nanval);
+ qnanval, qnanval, qnanval, qnanval,
+ qnanval, qnanval, qnanval, qnanval);
result = strcmp (buf, "nan NAN nan NAN nan NAN nan NAN") != 0;
printf ("expected \"nan NAN nan NAN nan NAN nan NAN\", got \"%s\"\n", buf);
snprintf (buf, sizeof buf, "%a %A %e %E %f %F %g %G",
- -nanval, -nanval, -nanval, -nanval,
- -nanval, -nanval, -nanval, -nanval);
+ -qnanval, -qnanval, -qnanval, -qnanval,
+ -qnanval, -qnanval, -qnanval, -qnanval);
result = strcmp (buf, "-nan -NAN -nan -NAN -nan -NAN -nan -NAN") != 0;
printf ("expected \"-nan -NAN -nan -NAN -nan -NAN -nan -NAN\", got \"%s\"\n",
buf);
@@ -88,13 +89,14 @@ F (void)
buf);
swprintf (wbuf, sizeof wbuf / sizeof (wbuf[0]), L"%a %A %e %E %f %F %g %G",
- nanval, nanval, nanval, nanval, nanval, nanval, nanval, nanval);
+ qnanval, qnanval, qnanval, qnanval,
+ qnanval, qnanval, qnanval, qnanval);
result |= wcscmp (wbuf, L"nan NAN nan NAN nan NAN nan NAN") != 0;
printf ("expected L\"nan NAN nan NAN nan NAN nan NAN\", got L\"%S\"\n", wbuf);
swprintf (wbuf, sizeof wbuf / sizeof (wbuf[0]), L"%a %A %e %E %f %F %g %G",
- -nanval, -nanval, -nanval, -nanval,
- -nanval, -nanval, -nanval, -nanval);
+ -qnanval, -qnanval, -qnanval, -qnanval,
+ -qnanval, -qnanval, -qnanval, -qnanval);
result |= wcscmp (wbuf, L"-nan -NAN -nan -NAN -nan -NAN -nan -NAN") != 0;
printf ("expected L\"-nan -NAN -nan -NAN -nan -NAN -nan -NAN\", got L\"%S\"\n",
wbuf);
@@ -111,17 +113,17 @@ F (void)
printf ("expected L\"-inf -INF -inf -INF -inf -INF -inf -INF\", got L\"%S\"\n",
wbuf);
- lnanval = NAN;
+ lqnanval = NAN;
snprintf (buf, sizeof buf, "%La %LA %Le %LE %Lf %LF %Lg %LG",
- lnanval, lnanval, lnanval, lnanval,
- lnanval, lnanval, lnanval, lnanval);
+ lqnanval, lqnanval, lqnanval, lqnanval,
+ lqnanval, lqnanval, lqnanval, lqnanval);
result = strcmp (buf, "nan NAN nan NAN nan NAN nan NAN") != 0;
printf ("expected \"nan NAN nan NAN nan NAN nan NAN\", got \"%s\"\n", buf);
snprintf (buf, sizeof buf, "%La %LA %Le %LE %Lf %LF %Lg %LG",
- -lnanval, -lnanval, -lnanval, -lnanval,
- -lnanval, -lnanval, -lnanval, -lnanval);
+ -lqnanval, -lqnanval, -lqnanval, -lqnanval,
+ -lqnanval, -lqnanval, -lqnanval, -lqnanval);
result = strcmp (buf, "-nan -NAN -nan -NAN -nan -NAN -nan -NAN") != 0;
printf ("expected \"-nan -NAN -nan -NAN -nan -NAN -nan -NAN\", got \"%s\"\n",
buf);
@@ -143,15 +145,15 @@ F (void)
swprintf (wbuf, sizeof wbuf / sizeof (wbuf[0]),
L"%La %LA %Le %LE %Lf %LF %Lg %LG",
- lnanval, lnanval, lnanval, lnanval,
- lnanval, lnanval, lnanval, lnanval);
+ lqnanval, lqnanval, lqnanval, lqnanval,
+ lqnanval, lqnanval, lqnanval, lqnanval);
result |= wcscmp (wbuf, L"nan NAN nan NAN nan NAN nan NAN") != 0;
printf ("expected L\"nan NAN nan NAN nan NAN nan NAN\", got L\"%S\"\n", wbuf);
swprintf (wbuf, sizeof wbuf / sizeof (wbuf[0]),
L"%La %LA %Le %LE %Lf %LF %Lg %LG",
- -lnanval, -lnanval, -lnanval, -lnanval,
- -lnanval, -lnanval, -lnanval, -lnanval);
+ -lqnanval, -lqnanval, -lqnanval, -lqnanval,
+ -lqnanval, -lqnanval, -lqnanval, -lqnanval);
result |= wcscmp (wbuf, L"-nan -NAN -nan -NAN -nan -NAN -nan -NAN") != 0;
printf ("expected L\"-nan -NAN -nan -NAN -nan -NAN -nan -NAN\", got L\"%S\"\n",
wbuf);
diff --git a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c
index df4bc47f98..c8bcf5a976 100644
--- a/stdio-common/vfprintf.c
+++ b/stdio-common/vfprintf.c
@@ -67,7 +67,7 @@
do { \
unsigned int _val = val; \
assert ((unsigned int) done < (unsigned int) INT_MAX); \
- if (__builtin_expect (INT_MAX - done < _val, 0)) \
+ if (__glibc_unlikely (INT_MAX - done < _val)) \
{ \
done = -1; \
__set_errno (EOVERFLOW); \
@@ -91,7 +91,7 @@
if (width > 0) \
{ \
unsigned int d = _IO_padn (s, (Padchar), width); \
- if (__builtin_expect (d == EOF, 0)) \
+ if (__glibc_unlikely (d == EOF)) \
{ \
done = -1; \
goto all_done; \
@@ -120,7 +120,7 @@
if (width > 0) \
{ \
unsigned int d = _IO_wpadn (s, (Padchar), width); \
- if (__builtin_expect (d == EOF, 0)) \
+ if (__glibc_unlikely (d == EOF)) \
{ \
done = -1; \
goto all_done; \
@@ -166,7 +166,7 @@
done = -1; \
goto all_done; \
} \
- if (__builtin_expect (INT_MAX - done < (Len), 0)) \
+ if (__glibc_unlikely (INT_MAX - done < (Len))) \
{ \
done = -1; \
__set_errno (EOVERFLOW); \
@@ -302,7 +302,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
do \
{ \
int offset; \
- void *__unbounded ptr; \
+ void *ptr; \
spec = (ChExpr); \
offset = NOT_IN_JUMP_RANGE (spec) ? REF (form_unknown) \
: table[CHAR_CLASS (spec)]; \
@@ -315,7 +315,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
# define JUMP(ChExpr, table) \
do \
{ \
- const void *__unbounded ptr; \
+ const void *ptr; \
spec = (ChExpr); \
ptr = NOT_IN_JUMP_RANGE (spec) ? REF (form_unknown) \
: table[CHAR_CLASS (spec)]; \
@@ -1108,7 +1108,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
outstring (string, len); \
if (left) \
PAD (L' '); \
- if (__builtin_expect (string_malloced, 0)) \
+ if (__glibc_unlikely (string_malloced)) \
free (string); \
} \
break;
@@ -1254,7 +1254,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
outstring (string, len); \
if (left) \
PAD (' '); \
- if (__builtin_expect (string_malloced, 0)) \
+ if (__glibc_unlikely (string_malloced)) \
free (string); \
} \
break;
@@ -1315,9 +1315,9 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
goto all_done;
/* Use the slow path in case any printf handler is registered. */
- if (__builtin_expect (__printf_function_table != NULL
+ if (__glibc_unlikely (__printf_function_table != NULL
|| __printf_modifier_table != NULL
- || __printf_va_arg_table != NULL, 0))
+ || __printf_va_arg_table != NULL))
goto do_positional;
/* Process whole format string. */
@@ -1452,7 +1452,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
left = 1;
}
- if (__builtin_expect (width >= INT_MAX / sizeof (CHAR_T) - 32, 0))
+ if (__glibc_unlikely (width >= INT_MAX / sizeof (CHAR_T) - 32))
{
__set_errno (EOVERFLOW);
done = -1;
@@ -1484,8 +1484,8 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
LABEL (width):
width = read_int (&f);
- if (__builtin_expect (width == -1
- || width >= INT_MAX / sizeof (CHAR_T) - 32, 0))
+ if (__glibc_unlikely (width == -1
+ || width >= INT_MAX / sizeof (CHAR_T) - 32))
{
__set_errno (EOVERFLOW);
done = -1;
@@ -1561,7 +1561,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
if (prec > width
&& prec > sizeof (work_buffer) / sizeof (work_buffer[0]) - 32)
{
- if (__builtin_expect (prec >= INT_MAX / sizeof (CHAR_T) - 32, 0))
+ if (__glibc_unlikely (prec >= INT_MAX / sizeof (CHAR_T) - 32))
{
__set_errno (EOVERFLOW);
done = -1;
@@ -1645,7 +1645,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
/* The format is correctly handled. */
++nspecs_done;
- if (__builtin_expect (workstart != NULL, 0))
+ if (__glibc_unlikely (workstart != NULL))
free (workstart);
workstart = NULL;
@@ -1691,7 +1691,8 @@ do_positional:
/* Just a counter. */
size_t cnt;
- free (workstart);
+ if (__glibc_unlikely (workstart != NULL))
+ free (workstart);
workstart = NULL;
if (grouping == (const char *) -1)
@@ -1736,7 +1737,7 @@ do_positional:
+ sizeof (*args_type));
/* Check for potential integer overflow. */
- if (__builtin_expect (nargs > INT_MAX / bytes_per_arg, 0))
+ if (__glibc_unlikely (nargs > INT_MAX / bytes_per_arg))
{
__set_errno (EOVERFLOW);
done = -1;
@@ -1841,7 +1842,7 @@ do_positional:
default:
if ((args_type[cnt] & PA_FLAG_PTR) != 0)
args_value[cnt].pa_pointer = va_arg (ap_save, void *);
- else if (__builtin_expect (__printf_va_arg_table != NULL, 0)
+ else if (__glibc_unlikely (__printf_va_arg_table != NULL)
&& __printf_va_arg_table[args_type[cnt] - PA_LAST] != NULL)
{
args_value[cnt].pa_user = alloca (args_size[cnt]);
@@ -1944,6 +1945,11 @@ do_positional:
{
workstart = (CHAR_T *) malloc ((MAX (prec, width) + 32)
* sizeof (CHAR_T));
+ if (workstart == NULL)
+ {
+ done = -1;
+ goto all_done;
+ }
workend = workstart + (MAX (prec, width) + 32);
}
}
@@ -2021,7 +2027,8 @@ do_positional:
break;
}
- free (workstart);
+ if (__glibc_unlikely (workstart != NULL))
+ free (workstart);
workstart = NULL;
/* Write the following constant string. */
@@ -2032,8 +2039,10 @@ do_positional:
}
all_done:
- free (args_malloced);
- free (workstart);
+ if (__glibc_unlikely (args_malloced != NULL))
+ free (args_malloced);
+ if (__glibc_unlikely (workstart != NULL))
+ free (workstart);
/* Unlock the stream. */
_IO_funlockfile (s);
_IO_cleanup_region_end (0);