]> git.ipfire.org Git - thirdparty/glibc.git/blame - libio/oldstdfiles.c
Update copyright dates with scripts/update-copyrights
[thirdparty/glibc.git] / libio / oldstdfiles.c
CommitLineData
6d7e8eda 1/* Copyright (C) 1993-2023 Free Software Foundation, Inc.
41bdb6e2 2 This file is part of the GNU C Library.
1ea89a40 3
41bdb6e2
AJ
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
1ea89a40 8
41bdb6e2
AJ
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
1ea89a40 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
41bdb6e2 12 Lesser General Public License for more details.
1ea89a40 13
41bdb6e2 14 You should have received a copy of the GNU Lesser General Public
59ba27a6 15 License along with the GNU C Library; if not, see
5a82c748 16 <https://www.gnu.org/licenses/>.
1ea89a40 17
41bdb6e2
AJ
18 As a special exception, if you link the code in this file with
19 files compiled with a GNU compiler to produce an executable,
20 that does not cause the resulting executable to be covered by
21 the GNU Lesser General Public License. This exception does not
22 however invalidate any other reasons why the executable file
23 might be covered by the GNU Lesser General Public License.
24 This exception applies to code released by its copyright holders
25 in files containing the exception. */
1ea89a40 26
16710d58
RM
27#include <shlib-compat.h>
28#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
1ea89a40 29
a5406364
FW
30/* This file provides legacy definitions of _IO_stdin_, _IO_stdout_,
31 and _IO_stderr_. See stdfiles.c for the current definitions. */
1ea89a40 32
bd355af0 33#define _IO_USE_OLD_IO_FILE
1ea89a40
UD
34#include "libioP.h"
35
36#ifdef _IO_MTSAFE_IO
bd355af0 37#define DEF_STDFILE(NAME, FD, CHAIN, FLAGS) \
1ea89a40 38 static _IO_lock_t _IO_stdfile_##FD##_lock = _IO_lock_initializer; \
bd355af0 39 struct _IO_FILE_plus NAME \
d64b6ad0 40 = {FILEBUF_LITERAL(CHAIN, FLAGS, FD, NULL), &_IO_old_file_jumps};
1ea89a40 41#else
bd355af0
UD
42#define DEF_STDFILE(NAME, FD, CHAIN, FLAGS) \
43 struct _IO_FILE_plus NAME \
d64b6ad0 44 = {FILEBUF_LITERAL(CHAIN, FLAGS, FD, NULL), &_IO_old_file_jumps};
1ea89a40
UD
45#endif
46
bd355af0 47DEF_STDFILE(_IO_stdin_, 0, 0, _IO_NO_WRITES);
2ca8b1ee
GM
48DEF_STDFILE(_IO_stdout_, 1, &_IO_stdin_, _IO_NO_READS);
49DEF_STDFILE(_IO_stderr_, 2, &_IO_stdout_, _IO_NO_READS+_IO_UNBUFFERED);
1ea89a40 50
6973fc01
UD
51#if defined __GNUC__ && __GNUC__ >= 2
52
53#include <stdio.h>
54
9c4c0024 55extern const int _IO_stdin_used;
6973fc01
UD
56weak_extern (_IO_stdin_used);
57
58#undef stdin
59#undef stdout
60#undef stderr
61
62extern FILE *stdin;
63extern FILE *stdout;
64extern FILE *stderr;
65
79937577 66static void _IO_check_libio (void) __THROW __attribute__ ((constructor));
6973fc01
UD
67
68/* This function determines which shared C library the application
69 was linked against. We then set up the stdin/stdout/stderr and
70 _IO_list_all accordingly. */
71
72static void
60d2f8f3 73_IO_check_libio (void)
6973fc01
UD
74{
75 if (&_IO_stdin_used == NULL)
76 {
77 /* We are using the old one. */
a5406364
FW
78 stdin = (FILE *) &_IO_stdin_;
79 stdout = (FILE *) &_IO_stdout_;
80 stderr = (FILE *) &_IO_stderr_;
d18ea0c5 81 _IO_list_all = &_IO_stderr_;
a5406364
FW
82 stdin->_vtable_offset = stdout->_vtable_offset
83 = stderr->_vtable_offset =
bd355af0
UD
84 ((int) sizeof (struct _IO_FILE)
85 - (int) sizeof (struct _IO_FILE_complete));
cb61630e
FW
86
87 if (_IO_stdin_.vtable != &_IO_old_file_jumps
88 || _IO_stdout_.vtable != &_IO_old_file_jumps
89 || _IO_stderr_.vtable != &_IO_old_file_jumps)
90 IO_set_accept_foreign_vtables (&_IO_vtable_check);
6973fc01
UD
91 }
92}
93
f2ea0f5b 94#endif
16710d58
RM
95
96#endif