mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 12:30:06 +00:00
Fix -Os feof_unlocked linknamespace, localplt issues (bug 15105, bug 19463).
Continuing the fixes for linknamespace and localplt test failures with -Os that arise from functions not being inlined in that case, this patch fixes such failures for feof_unlocked. The usual approach is followed of adding __feof_unlocked (inlined when feof_unlocked is), making calls use it when required for namespace reasons, and using libc_hidden_proto / libc_hidden_weak for the feof_unlocked weak alias when only localplt but not namespace issues are involved. In the case of getaddrinfo.c, use of __feof_unlocked needs to be conditional since that code is also used in nscd (where __feof_unlocked is not available). Tested for x86_64 (both without -Os to make sure that case continues to work, and with -Os to make sure all the relevant linknamespace and localplt test failures are resolved). Because of other such failures that remain after this patch, neither of the bugs can yet be closed. [BZ #15105] [BZ #19463] * libio/feof_u.c (feof_unlocked): Rename to __feof_unlocked and define as weak alias of __feof_unlocked. Use libc_hidden_weak. * include/stdio.h (feof_unlocked): Use libc_hidden_proto. (__feof_unlocked): New declaration, and inline function if [__USE_EXTERN_INLINES]. * iconv/gconv_conf.c (read_conf_file): Call __feof_unlocked instead of feof_unlocked. * intl/localealias.c [_LIBC] (FEOF): Likewise. * nss/nsswitch.c (nss_parse_file): Likewise. * sysdeps/unix/sysv/linux/readonly-area.c (__readonly_area): Likewise. * time/getdate.c (__getdate_r): Likewise. * sysdeps/posix/getaddrinfo.c [IS_IN (libc)] (feof_unlocked): Define as macro to call __feof_unlocked.
This commit is contained in:
parent
0c8a67a573
commit
7fc03cf320
19
ChangeLog
19
ChangeLog
@ -1,3 +1,22 @@
|
||||
2018-02-15 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
[BZ #15105]
|
||||
[BZ #19463]
|
||||
* libio/feof_u.c (feof_unlocked): Rename to __feof_unlocked and
|
||||
define as weak alias of __feof_unlocked. Use libc_hidden_weak.
|
||||
* include/stdio.h (feof_unlocked): Use libc_hidden_proto.
|
||||
(__feof_unlocked): New declaration, and inline function if
|
||||
[__USE_EXTERN_INLINES].
|
||||
* iconv/gconv_conf.c (read_conf_file): Call __feof_unlocked
|
||||
instead of feof_unlocked.
|
||||
* intl/localealias.c [_LIBC] (FEOF): Likewise.
|
||||
* nss/nsswitch.c (nss_parse_file): Likewise.
|
||||
* sysdeps/unix/sysv/linux/readonly-area.c (__readonly_area):
|
||||
Likewise.
|
||||
* time/getdate.c (__getdate_r): Likewise.
|
||||
* sysdeps/posix/getaddrinfo.c [IS_IN (libc)] (feof_unlocked):
|
||||
Define as macro to call __feof_unlocked.
|
||||
|
||||
2018-02-15 Wilco Dijkstra <wdijkstr@arm.com>
|
||||
|
||||
* sysdeps/aarch64/fpu/fpu_control.h: Use <> in include.
|
||||
|
@ -374,7 +374,7 @@ read_conf_file (const char *filename, const char *directory, size_t dir_len,
|
||||
|
||||
/* Process the known entries of the file. Comments start with `#' and
|
||||
end with the end of the line. Empty lines are ignored. */
|
||||
while (!feof_unlocked (fp))
|
||||
while (!__feof_unlocked (fp))
|
||||
{
|
||||
char *rp, *endp, *word;
|
||||
ssize_t n = __getdelim (&line, &line_len, '\n', fp);
|
||||
|
@ -179,6 +179,8 @@ libc_hidden_proto (__fgets_unlocked)
|
||||
libc_hidden_proto (fputs_unlocked)
|
||||
extern __typeof (fputs_unlocked) __fputs_unlocked;
|
||||
libc_hidden_proto (__fputs_unlocked)
|
||||
libc_hidden_proto (feof_unlocked)
|
||||
extern __typeof (feof_unlocked) __feof_unlocked attribute_hidden;
|
||||
libc_hidden_proto (fmemopen)
|
||||
/* The prototype needs repeating instead of using __typeof to use
|
||||
__THROW in C++ tests. */
|
||||
@ -199,5 +201,13 @@ libc_hidden_proto (__fmemopen)
|
||||
extern int __gen_tempfd (int flags);
|
||||
libc_hidden_proto (__gen_tempfd)
|
||||
|
||||
# ifdef __USE_EXTERN_INLINES
|
||||
__extern_inline int
|
||||
__NTH (__feof_unlocked (FILE *__stream))
|
||||
{
|
||||
return __feof_unlocked_body (__stream);
|
||||
}
|
||||
# endif
|
||||
|
||||
# endif /* not _ISOMAC */
|
||||
#endif /* stdio.h */
|
||||
|
@ -90,7 +90,7 @@ char *alloca ();
|
||||
|
||||
/* Some optimizations for glibc. */
|
||||
#ifdef _LIBC
|
||||
# define FEOF(fp) feof_unlocked (fp)
|
||||
# define FEOF(fp) __feof_unlocked (fp)
|
||||
# define FGETS(buf, n, fp) __fgets_unlocked (buf, n, fp)
|
||||
#else
|
||||
# define FEOF(fp) feof (fp)
|
||||
|
@ -30,8 +30,10 @@
|
||||
#undef feof_unlocked
|
||||
|
||||
int
|
||||
feof_unlocked (_IO_FILE *fp)
|
||||
__feof_unlocked (_IO_FILE *fp)
|
||||
{
|
||||
CHECK_FILE (fp, EOF);
|
||||
return _IO_feof_unlocked (fp);
|
||||
}
|
||||
weak_alias (__feof_unlocked, feof_unlocked)
|
||||
libc_hidden_weak (feof_unlocked)
|
||||
|
@ -599,7 +599,7 @@ nss_parse_file (const char *fname)
|
||||
last = this;
|
||||
}
|
||||
}
|
||||
while (!feof_unlocked (fp));
|
||||
while (!__feof_unlocked (fp));
|
||||
|
||||
/* Free the buffer. */
|
||||
free (line);
|
||||
|
@ -89,6 +89,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
# include <idna.h>
|
||||
#endif
|
||||
|
||||
#if IS_IN (libc)
|
||||
# define feof_unlocked(fp) __feof_unlocked (fp)
|
||||
#endif
|
||||
|
||||
struct gaih_service
|
||||
{
|
||||
const char *name;
|
||||
|
@ -53,7 +53,7 @@ __readonly_area (const char *ptr, size_t size)
|
||||
char *line = NULL;
|
||||
size_t linelen = 0;
|
||||
|
||||
while (! feof_unlocked (fp))
|
||||
while (! __feof_unlocked (fp))
|
||||
{
|
||||
if (_IO_getdelim (&line, &linelen, '\n', fp) <= 0)
|
||||
break;
|
||||
|
@ -198,7 +198,7 @@ __getdate_r (const char *string, struct tm *tp)
|
||||
if (result && *result == '\0')
|
||||
break;
|
||||
}
|
||||
while (!feof_unlocked (fp));
|
||||
while (!__feof_unlocked (fp));
|
||||
|
||||
free (instr);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user