2015-09-03 20:24:54 +00:00
|
|
|
#if !defined _ISOMAC && defined _IO_MTSAFE_IO
|
2015-09-04 16:21:14 +00:00
|
|
|
# include <stdio-lock.h>
|
2015-09-03 20:24:54 +00:00
|
|
|
#endif
|
Deprecate external use of libio.h and _G_config.h.
libio.h was originally the header for a set of supported GNU
extensions, but they have not been maintained as such in many years,
they are now standing in the way of improvements to stdio, and we
don't think there are any remaining external users. _G_config.h was
never intended for public use, but predates the bits convention.
Move both of these headers into the bits directory and provide stubs
at top level which issue deprecation warnings.
The contents of (bits/)libio.h and (bits/)_G_config.h are still
exposed to external software via stdio.h; changing that requires more
complex surgery than I have time to attempt right now.
* libio/libio.h, libio/_G_config.h: New stub headers which issue a
deprecation warning and then include <bits/libio.h>, <bits/_G_config.h>
respectively.
* libio/libio.h: Rename the original version of this file to
libio/bits/libio.h. Error out if not included by stdio.h or the
stub libio.h.
* include/libio.h: Move to include/bits. Forward to libio/bits/libio.h.
* sysdeps/generic/_G_config.h: Move to top-level bits/. Error out
if not included by bits/libio.h or the stub _G_config.h.
* sysdeps/unix/sysv/linux/_G_config.h: Move to
sysdeps/unix/sysv/linux/bits. Error out if not included by
bits/libio.h or the stub _G_config.h.
* libio/stdio.h: Include bits/libio.h, not libio.h.
* libio/Makefile: Install bits/libio.h and bits/_G_config.h as
well as libio.h and _G_config.h.
* csu/init.c, libio/fmemopen.c, libio/iolibio.h, libio/oldfmemopen.c
* libio/strfile.h, stdio-common/vfscanf.c
* sysdeps/pthread/flockfile.c, sysdeps/pthread/funlockfile.c
Include stdio.h, not _G_config.h nor libio.h.
* libio/iofgetpos.c: Also rename fgetpos64 out of the way.
* libio/iofsetpos.c: Also rename fsetpos64 out of the way.
* scripts/check-installed-headers.sh: Skip libio.h and _G_config.h.
2017-12-23 05:06:03 +00:00
|
|
|
#include <libio/bits/libio.h>
|
2002-08-03 19:46:32 +00:00
|
|
|
|
2012-02-26 04:18:39 +00:00
|
|
|
#ifndef _ISOMAC
|
2002-08-03 19:46:32 +00:00
|
|
|
#ifndef _LIBC_LIBIO_H
|
|
|
|
#define _LIBC_LIBIO_H
|
|
|
|
|
|
|
|
libc_hidden_proto (__overflow)
|
Update.
2002-08-04 Ulrich Drepper <drepper@redhat.com>
* elf/dl-addr.c (_dl_addr): Add libc_hidden_def.
* elf/dl-close.c (_dl_close): Add libc_hidden_def.
* elf/dl-open.c (_dl_open): Add libc_hidden_def.
* include/dlfcn.h: Add libc_hidden_proto for _dl_addr, _dl_open,
_dl_close.
* include/libio.h: Add libc_hidden_proto for __underflow, __wuflow,
__wunderflow.
* libio/genops.c (__underflow): Add libc_hidden_def.
* libio/wgenops.c (__wuflow): Likewise.
(__wunderflow): Likewise.
* include/obstack.h: Add libc_hidden_proto for _obstack_newchunk.
* malloc/obstack.c (_obstack_newchunk): Add libc_hidden_def.
* include/stdio.h: Add libc_hidden_proto for __vfscanf.
* stdio-common/vfscanf.c (__vfscanf): Add libc_hidden_def.
* include/string.h: Add libc_hidden_proto for __strverscmp.
* string/strverscmp.c (__strverscmp): Add libc_hidden_def.
* include/unistd.h: Add libc_hidden_proto for __sysconf.
* sysdeps/generic/sysconf.c (__sysconf): Add libc_hidden_def.
* sysdeps/posix/sysconf.c: Likewise.
* sysdeps/unix/sysv/irix4/sysconf.c: Likewise.
* sysdeps/unix/sysv/sysv4/sysconf.c: Likewise.
* include/wctype.h: Use libc_hidden_proto for __iswctype, __iswalnum_l,
__iswalpha_l, __iswblank_l, __iswcntrl_l, __iswdigit_l, __iswlower_l,
__iswgraph_l, __iswprint_l, __iswpunct_l, __iswspace_l, __iswupper_l,
__iswxdigit_l, __towlower_l, __towupper_l.
* wcsmbs/wcstype.c (__iswctype): Use libc_hidden_def.
* wcsmbs/wcfuncs_l.c: Use libc_hidden_def for all functions.
* include/sys/wait.h: Add libc_hidden_proto for __xmknod.
* sysdeps/generic/xmknod.c (__xmknod): Add libc_hidden_def.
* sysdeps/mach/hurd/xmknod.c: Likewise.
* sysdeps/unix/xmknod.c: Likewise.
* sysdeps/unix/sysv/linux/xmknod.c: Likewise.
* sysdeps/unix/sysv/linux/alpha/xmknod.c: Likewise.
* sysdeps/unix/sysv/linux/mips/xmknod.c: Likewise.
* sunrpc/svc.c: Add missing INTUSE for _authenticate.
2002-08-04 09:27:27 +00:00
|
|
|
libc_hidden_proto (__underflow)
|
Update.
2002-08-04 Jakub Jelinek <jakub@redhat.com>
* manual/debug.texi: Fix spelling to programmatically.
Reported by <hayastan132@hotmail.com>.
* include/libio.h: Add libc_hidden_proto for __uflow.
* include/stdio.h: Map fopen, fdopen, fclose, fputs, fsetpos, and
fgetpos to _IO_* names.
Add libc_hidden_proto for fileno, fwrite, fseek, fflush_unlocked,
fread_unlocked, fwrite_unlocked, fgets_unlocked, fputs_unlocked.
* include/wchar.h: Add libc_hidden_proto for fputws_unlocked,
putwc_unlocked, vswscanf.
* libio/iolibio.h: Add libc_hidden_proto for _IO_fputs.
* libio/fileno.c: Use <stdio.h> and libc_hidden_def.
* libio/fseek.c: Likewise.
* libio/fmemopen.c: Include "libioP.h". Call _IO_fopencookie and
not fopencookie.
* libio/genops.c (__uflow): Add libc_hidden_def.
* libio/iofflush_u.c (fflush_unlocked): Likewise.
* libio/iofgets_u.c (fgets_unlocked): Likewise.
* libio/iofputs_u.c (fputs_unlocked): Likewise.
* libio/iofputws_u.c (fputws_unlocked): Likewise.
* libio/iofread_u.c (fread_unlocked): Likewise.
* libio/iofwrite_u.c (fwrite_unlocked): Likewise.
* libio/iovswscanf.c (vswscanf): Likewise.
* libio/putwc_u.c (putwc_unlocked): Likewise.
* libio/iofputs.c: Use libc_hidden_def instead of INTDEF.
* malloc/malloc.c: Redirect fwrite calls to _IO_fwrite.
* malloc/mtrace.c: Likewise.
* sunrpc/clnt_perr.c: Remove fputs macro.
* sunrpc/svc_simple.c: Likewise.
* sunrpc/svc_tcp.c: Likewise.
* sunrpc/svc_udp.c: Likewise.
* sunrpc/xdr_rec.c: Likewise.
* sunrpc/xdr_ref.c: Likewise.
* iconv/Makefile: Add CPPFLAGS definitions with -DNOT_in_libc for
iconv_prog, linereader, and charmap-dir.
* locale/Makefile: Likewise for locale and charmap-dir.
* malloc/Makefile: Likewise for memusagestat.
* nscd/Makefile: Likewise for nscd, nscd_conf, and dbg_log.
* sunrpc/Makefile: Likewise for rpc_main.
* sysdeps/unix/sysv/linux/Makefile: Likewise for lddlibc4.
* timezone/Makefile: Likewise for zic.
* stdio-common/perror.c: Avoid multiple calls to fileno_unlocked.
2002-08-04 20:54:20 +00:00
|
|
|
libc_hidden_proto (__uflow)
|
2002-08-03 19:46:32 +00:00
|
|
|
libc_hidden_proto (__woverflow)
|
Update.
2002-08-04 Ulrich Drepper <drepper@redhat.com>
* elf/dl-addr.c (_dl_addr): Add libc_hidden_def.
* elf/dl-close.c (_dl_close): Add libc_hidden_def.
* elf/dl-open.c (_dl_open): Add libc_hidden_def.
* include/dlfcn.h: Add libc_hidden_proto for _dl_addr, _dl_open,
_dl_close.
* include/libio.h: Add libc_hidden_proto for __underflow, __wuflow,
__wunderflow.
* libio/genops.c (__underflow): Add libc_hidden_def.
* libio/wgenops.c (__wuflow): Likewise.
(__wunderflow): Likewise.
* include/obstack.h: Add libc_hidden_proto for _obstack_newchunk.
* malloc/obstack.c (_obstack_newchunk): Add libc_hidden_def.
* include/stdio.h: Add libc_hidden_proto for __vfscanf.
* stdio-common/vfscanf.c (__vfscanf): Add libc_hidden_def.
* include/string.h: Add libc_hidden_proto for __strverscmp.
* string/strverscmp.c (__strverscmp): Add libc_hidden_def.
* include/unistd.h: Add libc_hidden_proto for __sysconf.
* sysdeps/generic/sysconf.c (__sysconf): Add libc_hidden_def.
* sysdeps/posix/sysconf.c: Likewise.
* sysdeps/unix/sysv/irix4/sysconf.c: Likewise.
* sysdeps/unix/sysv/sysv4/sysconf.c: Likewise.
* include/wctype.h: Use libc_hidden_proto for __iswctype, __iswalnum_l,
__iswalpha_l, __iswblank_l, __iswcntrl_l, __iswdigit_l, __iswlower_l,
__iswgraph_l, __iswprint_l, __iswpunct_l, __iswspace_l, __iswupper_l,
__iswxdigit_l, __towlower_l, __towupper_l.
* wcsmbs/wcstype.c (__iswctype): Use libc_hidden_def.
* wcsmbs/wcfuncs_l.c: Use libc_hidden_def for all functions.
* include/sys/wait.h: Add libc_hidden_proto for __xmknod.
* sysdeps/generic/xmknod.c (__xmknod): Add libc_hidden_def.
* sysdeps/mach/hurd/xmknod.c: Likewise.
* sysdeps/unix/xmknod.c: Likewise.
* sysdeps/unix/sysv/linux/xmknod.c: Likewise.
* sysdeps/unix/sysv/linux/alpha/xmknod.c: Likewise.
* sysdeps/unix/sysv/linux/mips/xmknod.c: Likewise.
* sunrpc/svc.c: Add missing INTUSE for _authenticate.
2002-08-04 09:27:27 +00:00
|
|
|
libc_hidden_proto (__wunderflow)
|
|
|
|
libc_hidden_proto (__wuflow)
|
2012-05-23 11:33:15 +00:00
|
|
|
libc_hidden_proto (_IO_free_backup_area)
|
|
|
|
libc_hidden_proto (_IO_free_wbackup_area)
|
|
|
|
libc_hidden_proto (_IO_padn)
|
|
|
|
libc_hidden_proto (_IO_putc)
|
|
|
|
libc_hidden_proto (_IO_sgetn)
|
|
|
|
libc_hidden_proto (_IO_vfprintf)
|
|
|
|
libc_hidden_proto (_IO_vfscanf)
|
2002-08-03 19:46:32 +00:00
|
|
|
|
Remove _IO_MTSAFE_IO from public headers.
_IO_MTSAFE_IO controls whether stdio is *built* with support for
multithreading. In the distant past it might also have worked as a
feature selection macro, allowing library *users* to select
thread-safe or lock-free stdio at application build time, I haven't
done the archaeology. Nowadays, defining _IO_MTSAFE_IO while using
the installed headers, or in _ISOMAC mode, will cause libio.h to throw
syntax errors.
This patch removes _IO_MTSAFE_IO from the public headers
(specifically, from libio/libio.h). The most important thing it
controlled in there was whether libio.h defines _IO_lock_t itself or
expects stdio-lock.h to have done it, and we do still need a
inter-header communication macro for that, because stdio-lock.h can
only define _IO_lock_t as a typedef. I've invented
_IO_lock_t_defined, which is defined by both versions of stdio-lock.h.
_IO_MTSAFE_IO also controlled the definitions of a handful of macros
that _might_ count as part of the public libio.h interface. They are
now unconditionally given their non-_IO_MTSAFE_IO definition in
libio/libio.h, and include/libio.h redefines them with the
_IO_MTSAFE_IO definition. This should minimize the odds of breaking
old software that actually uses those macros.
I suspect that this entire mechanism is vestigial, and that glibc
won't build anymore if you *don't* define _IO_MTSAFE_IO, but that's
another patchset. The bulk of libio.h is internal-use-only stuff that
no longer makes sense to expose (libstdc++ gave up on making a FILE
the same object as a C++ filebuf *decades* ago) but that, too, is
another patchset.
* libio/libio.h: Condition dummy definition of _IO_lock_t on
_IO_lock_t_defined, not _IO_MTSAFE_IO. Unconditionally use the
non-_IO_MTSAFE_IO definitions for _IO_peekc, _IO_flockfile,
_IO_funlockfile, and _IO_ftrylockfile. Only define
_IO_cleanup_region_start and _IO_cleanup_region_end if not
already defined.
* include/libio.h: If _IO_MTSAFE_IO is defined, redefine
_IO_peekc, _IO_flockfile, _IO_funlockfile, and _IO_ftrylockfile
appropriately.
* sysdeps/generic/stdio-lock.h, sysdeps/nptl/stdio-lock.h:
Define _IO_lock_t_defined after defining _IO_lock_t.
2017-03-01 13:17:07 +00:00
|
|
|
#ifdef _IO_MTSAFE_IO
|
|
|
|
# undef _IO_peekc
|
2002-12-20 09:33:33 +00:00
|
|
|
# undef _IO_flockfile
|
|
|
|
# undef _IO_funlockfile
|
Remove _IO_MTSAFE_IO from public headers.
_IO_MTSAFE_IO controls whether stdio is *built* with support for
multithreading. In the distant past it might also have worked as a
feature selection macro, allowing library *users* to select
thread-safe or lock-free stdio at application build time, I haven't
done the archaeology. Nowadays, defining _IO_MTSAFE_IO while using
the installed headers, or in _ISOMAC mode, will cause libio.h to throw
syntax errors.
This patch removes _IO_MTSAFE_IO from the public headers
(specifically, from libio/libio.h). The most important thing it
controlled in there was whether libio.h defines _IO_lock_t itself or
expects stdio-lock.h to have done it, and we do still need a
inter-header communication macro for that, because stdio-lock.h can
only define _IO_lock_t as a typedef. I've invented
_IO_lock_t_defined, which is defined by both versions of stdio-lock.h.
_IO_MTSAFE_IO also controlled the definitions of a handful of macros
that _might_ count as part of the public libio.h interface. They are
now unconditionally given their non-_IO_MTSAFE_IO definition in
libio/libio.h, and include/libio.h redefines them with the
_IO_MTSAFE_IO definition. This should minimize the odds of breaking
old software that actually uses those macros.
I suspect that this entire mechanism is vestigial, and that glibc
won't build anymore if you *don't* define _IO_MTSAFE_IO, but that's
another patchset. The bulk of libio.h is internal-use-only stuff that
no longer makes sense to expose (libstdc++ gave up on making a FILE
the same object as a C++ filebuf *decades* ago) but that, too, is
another patchset.
* libio/libio.h: Condition dummy definition of _IO_lock_t on
_IO_lock_t_defined, not _IO_MTSAFE_IO. Unconditionally use the
non-_IO_MTSAFE_IO definitions for _IO_peekc, _IO_flockfile,
_IO_funlockfile, and _IO_ftrylockfile. Only define
_IO_cleanup_region_start and _IO_cleanup_region_end if not
already defined.
* include/libio.h: If _IO_MTSAFE_IO is defined, redefine
_IO_peekc, _IO_flockfile, _IO_funlockfile, and _IO_ftrylockfile
appropriately.
* sysdeps/generic/stdio-lock.h, sysdeps/nptl/stdio-lock.h:
Define _IO_lock_t_defined after defining _IO_lock_t.
2017-03-01 13:17:07 +00:00
|
|
|
# undef _IO_ftrylockfile
|
|
|
|
|
|
|
|
# define _IO_peekc(_fp) _IO_peekc_locked (_fp)
|
|
|
|
# if _IO_lock_inexpensive
|
|
|
|
# define _IO_flockfile(_fp) \
|
|
|
|
if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_lock_lock (*(_fp)->_lock)
|
|
|
|
# define _IO_funlockfile(_fp) \
|
|
|
|
if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_lock_unlock (*(_fp)->_lock)
|
|
|
|
# else
|
|
|
|
# define _IO_flockfile(_fp) \
|
|
|
|
if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_flockfile (_fp)
|
|
|
|
# define _IO_funlockfile(_fp) \
|
|
|
|
if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_funlockfile (_fp)
|
|
|
|
# endif
|
|
|
|
#endif /* _IO_MTSAFE_IO */
|
2002-12-20 09:33:33 +00:00
|
|
|
|
2002-08-03 19:46:32 +00:00
|
|
|
#endif
|
2012-02-26 04:18:39 +00:00
|
|
|
#endif
|