From 91099cf415727b7ff4a920913fabde84dcf7f8fa Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 18 Jul 2001 21:22:57 +0000 Subject: [PATCH] Update. 2001-07-18 Ulrich Drepper * libio/filedoalloc.c (_IO_file_doallocate): A few more minor cleanups and improvements. 2001-07-18 Andreas Schwab * posix/regex.c (WORDCHAR_P) [WCHAR]: Also return true for the underscore character. 2001-07-18 Jakub Jelinek * malloc/malloc (new_heap): Don't call munmap for zero length. 2001-07-18 Ulrich Drepper * libio/filedoalloc.c (_IO_file_doallocate): Use DEV_TTY_P if available to determine whether descriptor is for tty before calling isatty. * sysdeps/unix/sysv/linux/device-nrs.h: Define DEV_TTY_P. * sysdeps/generic/device-nrs.h: Likewise. --- ChangeLog | 23 +++++++++++++++++++++++ libio/filedoalloc.c | 35 +++++++++++++++++------------------ malloc/malloc.c | 3 ++- posix/regex.c | 4 +++- 4 files changed, 45 insertions(+), 20 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4d18f02..d110f66 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,26 @@ +2001-07-18 Ulrich Drepper + + * libio/filedoalloc.c (_IO_file_doallocate): A few more minor + cleanups and improvements. + +2001-07-18 Andreas Schwab + + * posix/regex.c (WORDCHAR_P) [WCHAR]: Also return true for the + underscore character. + +2001-07-18 Jakub Jelinek + + * malloc/malloc (new_heap): Don't call munmap for zero length. + +2001-07-18 Ulrich Drepper + + * libio/filedoalloc.c (_IO_file_doallocate): Use DEV_TTY_P if + available to determine whether descriptor is for tty before + calling isatty. + + * sysdeps/unix/sysv/linux/device-nrs.h: Define DEV_TTY_P. + * sysdeps/generic/device-nrs.h: Likewise. + 2001-07-18 Andreas Jaeger * time/Makefile (tst-getdate-ENV): Add TZDIR to environment. diff --git a/libio/filedoalloc.c b/libio/filedoalloc.c index 1cabae8..c2e849a 100644 --- a/libio/filedoalloc.c +++ b/libio/filedoalloc.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1997, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -58,6 +58,8 @@ #ifdef _LIBC # undef isatty # define isatty(Fd) __isatty (Fd) + +# include #endif /* @@ -73,7 +75,6 @@ _IO_file_doallocate (fp) _IO_FILE *fp; { _IO_size_t size; - int couldbetty; char *p; struct _G_stat64 st; @@ -82,31 +83,29 @@ _IO_file_doallocate (fp) function it points to. This is to make sure _IO_cleanup gets called on exit. We call it from _IO_file_doallocate, since that is likely to get called by any program that does buffered I/O. */ - if (_IO_cleanup_registration_needed) + if (__builtin_expect (_IO_cleanup_registration_needed != NULL, 0)) (*_IO_cleanup_registration_needed) (); #endif - if (fp->_fileno < 0 || _IO_SYSSTAT (fp, &st) < 0) + size = _IO_BUFSIZ; + if (fp->_fileno >= 0 && __builtin_expect (_IO_SYSSTAT (fp, &st), 0) >= 0) { - couldbetty = 0; - size = _IO_BUFSIZ; -#if 0 - /* do not try to optimise fseek() */ - fp->_flags |= __SNPT; + if (S_ISCHR (st.st_mode)) + { + /* Possibly a tty. */ + if ( +#ifdef DEV_TTY_P + DEV_TTY_P (st.st_rdev) || #endif - } - else - { - couldbetty = S_ISCHR (st.st_mode); + isatty (fp->_fileno)) + fp->_flags |= _IO_LINE_BUF; + } #if _IO_HAVE_ST_BLKSIZE - size = st.st_blksize <= 0 ? _IO_BUFSIZ : st.st_blksize; -#else - size = _IO_BUFSIZ; + if (st.st_blksize > 0) + size = st.st_blksize; #endif } ALLOC_BUF (p, size, EOF); _IO_setb (fp, p, p + size, 1); - if (couldbetty && isatty (fp->_fileno)) - fp->_flags |= _IO_LINE_BUF; return 1; } diff --git a/malloc/malloc.c b/malloc/malloc.c index 5a5ea8f..c3040f4 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -2036,7 +2036,8 @@ new_heap(size) size_t size; if(p1 != MAP_FAILED) { p2 = (char *)(((unsigned long)p1 + (HEAP_MAX_SIZE-1)) & ~(HEAP_MAX_SIZE-1)); ul = p2 - p1; - munmap(p1, ul); + if (ul) + munmap(p1, ul); munmap(p2 + HEAP_MAX_SIZE, HEAP_MAX_SIZE - ul); } else { /* Try to take the chance that an allocation of only HEAP_MAX_SIZE diff --git a/posix/regex.c b/posix/regex.c index 77a0758..463f926 100644 --- a/posix/regex.c +++ b/posix/regex.c @@ -5347,7 +5347,9 @@ PREFIX(re_search_2) (bufp, string1, size1, string2, size2, startpos, range, /* Use internationalized API instead of SYNTAX. */ # define WORDCHAR_P(d) \ (iswalnum ((wint_t)((d) == end1 ? *string2 \ - : (d) == string2 - 1 ? *(end1 - 1) : *(d))) != 0) + : (d) == string2 - 1 ? *(end1 - 1) : *(d))) != 0 \ + || ((d) == end1 ? *string2 \ + : (d) == string2 - 1 ? *(end1 - 1) : *(d)) == L'_') #else /* BYTE */ # define WORDCHAR_P(d) \ (SYNTAX ((d) == end1 ? *string2 \ -- 2.7.4