diff options
Diffstat (limited to 'sysdeps/ieee754/ldbl-opt')
24 files changed, 394 insertions, 0 deletions
diff --git a/sysdeps/ieee754/ldbl-opt/Makefile b/sysdeps/ieee754/ldbl-opt/Makefile index 1d01846476..5b72474aa4 100644 --- a/sysdeps/ieee754/ldbl-opt/Makefile +++ b/sysdeps/ieee754/ldbl-opt/Makefile @@ -42,6 +42,10 @@ libnldbl-calls = asprintf dprintf fprintf fscanf fwprintf fwscanf iovfscanf \ isoc99_vscanf isoc99_vfscanf isoc99_vsscanf \ isoc99_wscanf isoc99_fwscanf isoc99_swscanf \ isoc99_vwscanf isoc99_vfwscanf isoc99_vswscanf \ + isoc23_scanf isoc23_fscanf isoc23_sscanf \ + isoc23_vscanf isoc23_vfscanf isoc23_vsscanf \ + isoc23_wscanf isoc23_fwscanf isoc23_swscanf \ + isoc23_vwscanf isoc23_vfwscanf isoc23_vswscanf \ nextup nextdown totalorder totalordermag getpayload \ canonicalize setpayload setpayloadsig llogb fmaxmag fminmag \ roundeven fromfp ufromfp fromfpx ufromfpx fadd dadd \ @@ -221,3 +225,43 @@ $(objpfx)tst-nldbl-error.c: tst-ldbl-error.c CFLAGS-tst-nldbl-warn.c += -mlong-double-64 CFLAGS-tst-nldbl-error.c += -mlong-double-64 endif + +ifeq ($(subdir), stdio-common) +tests += tst-nldbl-scanf-binary-c11 \ + tst-nldbl-scanf-binary-c2x \ + tst-nldbl-scanf-binary-gnu11 \ + tst-nldbl-scanf-binary-gnu89 + +# Some versions of GCC supported for building glibc do not support -std=c2x, so +# the test for that version uses -std=c11 and then _ISOC2X_SOURCE is defined in +# the test as needed. +CFLAGS-tst-nldbl-scanf-binary-c11.c += -mlong-double-64 -std=c11 \ + -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-nldbl-scanf-binary-c2x.c += -mlong-double-64 -std=c11 \ + -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-nldbl-scanf-binary-gnu11.c += -mlong-double-64 -std=gnu11 \ + -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-nldbl-scanf-binary-gnu89.c += -mlong-double-64 -std=gnu89 \ + -DOBJPFX=\"$(objpfx)\" + +endif + +ifeq ($(subdir), wcsmbs) +tests += tst-nldbl-wscanf-binary-c11 \ + tst-nldbl-wscanf-binary-c2x \ + tst-nldbl-wscanf-binary-gnu11 \ + tst-nldbl-wscanf-binary-gnu89 + +# Some versions of GCC supported for building glibc do not support -std=c2x, so +# the test for that version uses -std=c11 and then _ISOC2X_SOURCE is defined in +# the test as needed. +CFLAGS-tst-nldbl-wscanf-binary-c11.c += -mlong-double-64 -std=c11 \ + -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-nldbl-wscanf-binary-c2x.c += -mlong-double-64 -std=c11 \ + -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-nldbl-wscanf-binary-gnu11.c += -mlong-double-64 -std=gnu11 \ + -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-nldbl-wscanf-binary-gnu89.c += -mlong-double-64 -std=gnu89 \ + -DOBJPFX=\"$(objpfx)\" + +endif diff --git a/sysdeps/ieee754/ldbl-opt/Versions b/sysdeps/ieee754/ldbl-opt/Versions index 21a2db6888..5345f1c683 100644 --- a/sysdeps/ieee754/ldbl-opt/Versions +++ b/sysdeps/ieee754/ldbl-opt/Versions @@ -84,6 +84,20 @@ libc { __nldbl_err; __nldbl_verr; __nldbl_errx; __nldbl_verrx; __nldbl_error; __nldbl_error_at_line; } + GLIBC_2.38 { + __nldbl___isoc23_scanf; + __nldbl___isoc23_fscanf; + __nldbl___isoc23_sscanf; + __nldbl___isoc23_vscanf; + __nldbl___isoc23_vfscanf; + __nldbl___isoc23_vsscanf; + __nldbl___isoc23_wscanf; + __nldbl___isoc23_fwscanf; + __nldbl___isoc23_swscanf; + __nldbl___isoc23_vwscanf; + __nldbl___isoc23_vfwscanf; + __nldbl___isoc23_vswscanf; + } } libm { NLDBL_VERSION { diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-compat.c b/sysdeps/ieee754/ldbl-opt/nldbl-compat.c index c654ebe416..22112c54d4 100644 --- a/sysdeps/ieee754/ldbl-opt/nldbl-compat.c +++ b/sysdeps/ieee754/ldbl-opt/nldbl-compat.c @@ -45,6 +45,10 @@ libc_hidden_proto (__nldbl___isoc99_vsscanf) libc_hidden_proto (__nldbl___isoc99_vfscanf) libc_hidden_proto (__nldbl___isoc99_vswscanf) libc_hidden_proto (__nldbl___isoc99_vfwscanf) +libc_hidden_proto (__nldbl___isoc23_vsscanf) +libc_hidden_proto (__nldbl___isoc23_vfscanf) +libc_hidden_proto (__nldbl___isoc23_vswscanf) +libc_hidden_proto (__nldbl___isoc23_vfwscanf) /* Compatibility with IEEE double as long double. IEEE quad long double is used by default for most programs, so @@ -992,6 +996,172 @@ __nldbl___isoc99_wscanf (const wchar_t *fmt, ...) return ret; } +int +attribute_compat_text_section +__nldbl___isoc23_vfscanf (FILE *s, const char *fmt, va_list ap) +{ + return __vfscanf_internal (s, fmt, ap, + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A + | SCANF_ISOC23_BIN_CST); +} +libc_hidden_def (__nldbl___isoc23_vfscanf) + +int +attribute_compat_text_section +__nldbl___isoc23_sscanf (const char *s, const char *fmt, ...) +{ + _IO_strfile sf; + FILE *f = _IO_strfile_read (&sf, s); + va_list ap; + int ret; + + va_start (ap, fmt); + ret = __vfscanf_internal (f, fmt, ap, + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A + | SCANF_ISOC23_BIN_CST); + va_end (ap); + + return ret; +} + +int +attribute_compat_text_section +__nldbl___isoc23_vsscanf (const char *s, const char *fmt, va_list ap) +{ + _IO_strfile sf; + FILE *f = _IO_strfile_read (&sf, s); + + return __vfscanf_internal (f, fmt, ap, + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A + | SCANF_ISOC23_BIN_CST); +} +libc_hidden_def (__nldbl___isoc23_vsscanf) + +int +attribute_compat_text_section +__nldbl___isoc23_vscanf (const char *fmt, va_list ap) +{ + return __vfscanf_internal (stdin, fmt, ap, + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A + | SCANF_ISOC23_BIN_CST); +} + +int +attribute_compat_text_section +__nldbl___isoc23_fscanf (FILE *s, const char *fmt, ...) +{ + va_list ap; + int ret; + + va_start (ap, fmt); + ret = __vfscanf_internal (s, fmt, ap, + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A + | SCANF_ISOC23_BIN_CST); + va_end (ap); + + return ret; +} + +int +attribute_compat_text_section +__nldbl___isoc23_scanf (const char *fmt, ...) +{ + va_list ap; + int ret; + + va_start (ap, fmt); + ret = __vfscanf_internal (stdin, fmt, ap, + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A + | SCANF_ISOC23_BIN_CST); + va_end (ap); + + return ret; +} + +int +attribute_compat_text_section +__nldbl___isoc23_vfwscanf (FILE *s, const wchar_t *fmt, va_list ap) +{ + return __vfwscanf_internal (s, fmt, ap, + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A + | SCANF_ISOC23_BIN_CST); +} +libc_hidden_def (__nldbl___isoc23_vfwscanf) + +int +attribute_compat_text_section +__nldbl___isoc23_swscanf (const wchar_t *s, const wchar_t *fmt, ...) +{ + _IO_strfile sf; + struct _IO_wide_data wd; + FILE *f = _IO_strfile_readw (&sf, &wd, s); + va_list ap; + int ret; + + va_start (ap, fmt); + ret = __vfwscanf_internal (f, fmt, ap, + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A + | SCANF_ISOC23_BIN_CST); + va_end (ap); + + return ret; +} + +int +attribute_compat_text_section +__nldbl___isoc23_vswscanf (const wchar_t *s, const wchar_t *fmt, va_list ap) +{ + _IO_strfile sf; + struct _IO_wide_data wd; + FILE *f = _IO_strfile_readw (&sf, &wd, s); + + return __vfwscanf_internal (f, fmt, ap, + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A + | SCANF_ISOC23_BIN_CST); +} +libc_hidden_def (__nldbl___isoc23_vswscanf) + +int +attribute_compat_text_section +__nldbl___isoc23_vwscanf (const wchar_t *fmt, va_list ap) +{ + return __vfwscanf_internal (stdin, fmt, ap, + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A + | SCANF_ISOC23_BIN_CST); +} + +int +attribute_compat_text_section +__nldbl___isoc23_fwscanf (FILE *s, const wchar_t *fmt, ...) +{ + va_list ap; + int ret; + + va_start (ap, fmt); + ret = __vfwscanf_internal (s, fmt, ap, + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A + | SCANF_ISOC23_BIN_CST); + va_end (ap); + + return ret; +} + +int +attribute_compat_text_section +__nldbl___isoc23_wscanf (const wchar_t *fmt, ...) +{ + va_list ap; + int ret; + + va_start (ap, fmt); + ret = __vfwscanf_internal (stdin, fmt, ap, + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A + | SCANF_ISOC23_BIN_CST); + va_end (ap); + + return ret; +} + void __nldbl_argp_error (const struct argp_state *state, const char *fmt, ...) { diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-compat.h b/sysdeps/ieee754/ldbl-opt/nldbl-compat.h index 7309e8a80f..d514442d87 100644 --- a/sysdeps/ieee754/ldbl-opt/nldbl-compat.h +++ b/sysdeps/ieee754/ldbl-opt/nldbl-compat.h @@ -78,6 +78,18 @@ NLDBL_DECL (__isoc99_swscanf); NLDBL_DECL (__isoc99_vwscanf); NLDBL_DECL (__isoc99_vfwscanf); NLDBL_DECL (__isoc99_vswscanf); +NLDBL_DECL (__isoc23_scanf); +NLDBL_DECL (__isoc23_fscanf); +NLDBL_DECL (__isoc23_sscanf); +NLDBL_DECL (__isoc23_vscanf); +NLDBL_DECL (__isoc23_vfscanf); +NLDBL_DECL (__isoc23_vsscanf); +NLDBL_DECL (__isoc23_wscanf); +NLDBL_DECL (__isoc23_fwscanf); +NLDBL_DECL (__isoc23_swscanf); +NLDBL_DECL (__isoc23_vwscanf); +NLDBL_DECL (__isoc23_vfwscanf); +NLDBL_DECL (__isoc23_vswscanf); NLDBL_DECL (argp_error); NLDBL_DECL (argp_failure); NLDBL_DECL (warn); diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_fscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_fscanf.c new file mode 100644 index 0000000000..7b5a0565f7 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_fscanf.c @@ -0,0 +1,15 @@ +#include "nldbl-compat.h" + +int +attribute_hidden +__isoc23_fscanf (FILE *stream, const char *fmt, ...) +{ + va_list arg; + int done; + + va_start (arg, fmt); + done = __nldbl___isoc23_vfscanf (stream, fmt, arg); + va_end (arg); + + return done; +} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_fwscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_fwscanf.c new file mode 100644 index 0000000000..4ecb340143 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_fwscanf.c @@ -0,0 +1,15 @@ +#include "nldbl-compat.h" + +int +attribute_hidden +__isoc23_fwscanf (FILE *stream, const wchar_t *fmt, ...) +{ + va_list arg; + int done; + + va_start (arg, fmt); + done = __nldbl___isoc23_vfwscanf (stream, fmt, arg); + va_end (arg); + + return done; +} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_scanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_scanf.c new file mode 100644 index 0000000000..90ea10c115 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_scanf.c @@ -0,0 +1,15 @@ +#include "nldbl-compat.h" + +int +attribute_hidden +__isoc23_scanf (const char *fmt, ...) +{ + va_list arg; + int done; + + va_start (arg, fmt); + done = __nldbl___isoc23_vfscanf (stdin, fmt, arg); + va_end (arg); + + return done; +} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_sscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_sscanf.c new file mode 100644 index 0000000000..64124e479c --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_sscanf.c @@ -0,0 +1,15 @@ +#include "nldbl-compat.h" + +int +attribute_hidden +__isoc23_sscanf (const char *s, const char *fmt, ...) +{ + va_list arg; + int done; + + va_start (arg, fmt); + done = __nldbl___isoc23_vsscanf (s, fmt, arg); + va_end (arg); + + return done; +} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_swscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_swscanf.c new file mode 100644 index 0000000000..da84c318b2 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_swscanf.c @@ -0,0 +1,15 @@ +#include "nldbl-compat.h" + +int +attribute_hidden +__isoc23_swscanf (const wchar_t *s, const wchar_t *fmt, ...) +{ + va_list arg; + int done; + + va_start (arg, fmt); + done = __nldbl___isoc23_vswscanf (s, fmt, arg); + va_end (arg); + + return done; +} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vfscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vfscanf.c new file mode 100644 index 0000000000..671aa63ec6 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vfscanf.c @@ -0,0 +1,8 @@ +#include "nldbl-compat.h" + +int +attribute_hidden +__isoc23_vfscanf (FILE *s, const char *fmt, va_list ap) +{ + return __nldbl___isoc23_vfscanf (s, fmt, ap); +} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vfwscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vfwscanf.c new file mode 100644 index 0000000000..b069522cd1 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vfwscanf.c @@ -0,0 +1,8 @@ +#include "nldbl-compat.h" + +int +attribute_hidden +__isoc23_vfwscanf (FILE *s, const wchar_t *fmt, va_list ap) +{ + return __nldbl___isoc23_vfwscanf (s, fmt, ap); +} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vscanf.c new file mode 100644 index 0000000000..f2256f210f --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vscanf.c @@ -0,0 +1,8 @@ +#include "nldbl-compat.h" + +int +attribute_hidden +__isoc23_vscanf (const char *fmt, va_list ap) +{ + return __nldbl___isoc23_vfscanf (stdin, fmt, ap); +} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vsscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vsscanf.c new file mode 100644 index 0000000000..96ce46b317 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vsscanf.c @@ -0,0 +1,8 @@ +#include "nldbl-compat.h" + +int +attribute_hidden +__isoc23_vsscanf (const char *string, const char *fmt, va_list ap) +{ + return __nldbl___isoc23_vsscanf (string, fmt, ap); +} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vswscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vswscanf.c new file mode 100644 index 0000000000..0819b55a2c --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vswscanf.c @@ -0,0 +1,8 @@ +#include "nldbl-compat.h" + +int +attribute_hidden +__isoc23_vswscanf (const wchar_t *string, const wchar_t *fmt, va_list ap) +{ + return __nldbl___isoc23_vswscanf (string, fmt, ap); +} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vwscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vwscanf.c new file mode 100644 index 0000000000..f92876ec27 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vwscanf.c @@ -0,0 +1,8 @@ +#include "nldbl-compat.h" + +int +attribute_hidden +__isoc23_vwscanf (const wchar_t *fmt, va_list ap) +{ + return __nldbl___isoc23_vfwscanf (stdin, fmt, ap); +} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_wscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_wscanf.c new file mode 100644 index 0000000000..cece258845 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_wscanf.c @@ -0,0 +1,15 @@ +#include "nldbl-compat.h" + +int +attribute_hidden +__isoc23_wscanf (const wchar_t *fmt, ...) +{ + va_list arg; + int done; + + va_start (arg, fmt); + done = __nldbl___isoc23_vfwscanf (stdin, fmt, arg); + va_end (arg); + + return done; +} diff --git a/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-c11.c b/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-c11.c new file mode 100644 index 0000000000..f5bc396fcc --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-c11.c @@ -0,0 +1,2 @@ +#define STDX "nldbl-" +#include <tst-scanf-binary-c11.c> diff --git a/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-c2x.c b/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-c2x.c new file mode 100644 index 0000000000..4e0cf7570f --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-c2x.c @@ -0,0 +1,2 @@ +#define STDX "nldbl-" +#include <tst-scanf-binary-c2x.c> diff --git a/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-gnu11.c b/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-gnu11.c new file mode 100644 index 0000000000..10e228e98a --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-gnu11.c @@ -0,0 +1,2 @@ +#define STDX "nldbl-" +#include <tst-scanf-binary-gnu11.c> diff --git a/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-gnu89.c b/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-gnu89.c new file mode 100644 index 0000000000..c5da04b644 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-gnu89.c @@ -0,0 +1,2 @@ +#define STDX "nldbl-" +#include <tst-scanf-binary-gnu89.c> diff --git a/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-c11.c b/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-c11.c new file mode 100644 index 0000000000..0e66e97cf7 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-c11.c @@ -0,0 +1,2 @@ +#define STDX "nldbl-" +#include <tst-wscanf-binary-c11.c> diff --git a/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-c2x.c b/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-c2x.c new file mode 100644 index 0000000000..7637aab0d4 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-c2x.c @@ -0,0 +1,2 @@ +#define STDX "nldbl-" +#include <tst-wscanf-binary-c2x.c> diff --git a/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-gnu11.c b/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-gnu11.c new file mode 100644 index 0000000000..106ec38bce --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-gnu11.c @@ -0,0 +1,2 @@ +#define STDX "nldbl-" +#include <tst-wscanf-binary-gnu11.c> diff --git a/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-gnu89.c b/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-gnu89.c new file mode 100644 index 0000000000..61a15619d2 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-gnu89.c @@ -0,0 +1,2 @@ +#define STDX "nldbl-" +#include <tst-wscanf-binary-gnu89.c> |