diff options
32 files changed, 182 insertions, 114 deletions
@@ -1,4 +1,57 @@ -Mon Nov 16 11:17:31 1998 Andreas Schwab <schwab@issan.cs.uni-dortmund.de> +1998-11-16 Ulrich Drepper <drepper@cygnus.com> + + * sysdeps/unix/opendir.c: Use o_directory_works differently. Treat + zero value as uninitialized so that variable can go into .bss. + + * dirent/opendir-tst1.c: Print error strings to stdout. + + * sysdeps/unix/sysv/linux/mmap64.c: New file. Empty. + * sysdeps/unix/sysv/linux/syscalls.list: Add mmap with mmap64 alias. + * sysdeps/unix/sysv/linux/arm/mmap.S: Add mmap64 alias. + * sysdeps/unix/sysv/linux/i386/mmap.S: Likewise. + * sysdeps/unix/sysv/linux/m68k/mmap.S: Likewise. + +1998-11-16 Andreas Schwab <schwab@issan.cs.uni-dortmund.de> + + * time/tzfile.c (__tzfile_read): Check that types[i].isdst is in + range. + +1998-11-16 Ulrich Drepper <drepper@cygnus.com> + + * libio/bits/stdio.h (fread_unlocked): Do handle zero size and number. + (fwrite_unlocked): Likewise. + +1998-11-16 Andreas Schwab <schwab@issan.cs.uni-dortmund.de> + + * libio/bits/stdio.h (fread_unlocked): Don't evaluate non-constant + twice. Don't bother handling zero size. + (frwite_unlocked): Likewise. + +1998-11-15 Andreas Schwab <schwab@issan.cs.uni-dortmund.de> + + * configure.in: Fix regex for makeinfo version string. + +1998-11-15 Andreas Schwab <schwab@issan.cs.uni-dortmund.de> + + * sunrpc/rpc_sample.c (write_sample_server): Avoid -Wparentheses + warning. + * sunrpc/rpc_svcout.c (write_program): Likewise. + +1998-11-15 Andreas Schwab <schwab@issan.cs.uni-dortmund.de> + + * time/Makefile (CFLAGS-test_time.c): Add -Wno-format. + +1998-11-16 Ulrich Drepper <drepper@cygnus.com + + * misc/sys/mman.h: Pretty print prototypes. + +1998-11-15 Ulrich Drepper <drepper@cygnus.com + + * misc/error.c (error): Don't use result of strerror_r call directly + since at least DEC Unix has a wrong return type. + Patch by Johan Danielsson <joda@pdc.kth.se>. + +1998-11-16 Andreas Schwab <schwab@issan.cs.uni-dortmund.de> * sysdeps/unix/sysv/linux/m68k/sysdep.h (INLINE_SYSCALL): Undo last change. diff --git a/configure.in b/configure.in index 81d6a32cd3..c3a8e3a2b1 100644 --- a/configure.in +++ b/configure.in @@ -450,7 +450,7 @@ AC_CHECK_PROG_VER(MSGFMT, msgfmt gmsgfmt, --version, [GNU gettext.* \([0-9]*\.[0-9.]*\)], [0.[1-9][0-9].* | [1-9].*], MSGFMT=: aux_missing=t) AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version, - [GNU texinfo \([0-9][0-9.]*\)], + [GNU texinfo.* \([0-9][0-9.]*\)], [3.1[1-9] | 3.[2-9][0-9]], MAKEINFO=: aux_missing=t) if test -n "$critic_missing"; then diff --git a/dirent/opendir-tst1.c b/dirent/opendir-tst1.c index dfab1d9b3d..4ecd5ae446 100644 --- a/dirent/opendir-tst1.c +++ b/dirent/opendir-tst1.c @@ -41,14 +41,14 @@ real_test (void) if (dirp != NULL) { /* Oh, oh, how can this work? */ - fputs ("`opendir' succeeded on a FIFO???\n", stderr); + fputs ("`opendir' succeeded on a FIFO???\n", stdout); closedir (dirp); return 1; } if (errno != ENOTDIR) { - fprintf (stderr, "`opendir' return error `%s' instead of `%s'\n", + fprintf (stdout, "`opendir' return error `%s' instead of `%s'\n", strerror (errno), strerror (ENOTDIR)); return 1; } diff --git a/libio/bits/stdio.h b/libio/bits/stdio.h index a3e3d6fc8d..8a15c6e6a6 100644 --- a/libio/bits/stdio.h +++ b/libio/bits/stdio.h @@ -127,48 +127,41 @@ ferror_unlocked (FILE *__stream) __THROW #if defined __USE_MISC && defined __GNUC__ && defined __OPTIMIZE__ /* Perform some simple optimizations. */ # define fread_unlocked(ptr, size, n, stream) \ - (__extension__ ((((__builtin_constant_p (size) \ - && ((size) == 0 || __builtin_constant_p (n))) \ - || (__builtin_constant_p (n) && (n) == 0)) \ - && (size_t) ((size) * (n)) <= 8) \ + (__extension__ ((__builtin_constant_p (size) && __builtin_constant_p (n) \ + && (size_t) ((size) * (n)) <= 8 && (size) != 0) \ ? ({ char *__ptr = (char *) (ptr); \ FILE *__stream = (stream); \ - size_t __size = (size); \ - size_t __n = (n); \ - size_t __readres = __n; \ - size_t __cnt = __size * __n + 1; \ - while (--__cnt > 0) \ + size_t __cnt; \ + for (__cnt = (size) * (n); __cnt > 0; --__cnt) \ { \ int __c = _IO_getc_unlocked (__stream); \ if (__c == EOF) \ - { \ - __readres = (__size * __n - __cnt) / __size; \ - break; \ - } \ + break; \ *__ptr++ = __c; \ } \ - __readres; }) \ - : fread_unlocked (ptr, size, n, stream))) + ((size_t) ((size) * (n)) - __cnt) / (size); }) \ + : (((__builtin_constant_p (size) && (size) == 0) \ + || (__builtin_constant_p (n) && (n) == 0)) \ + /* Evaluate all parameters once. */ \ + ? ((void) (ptr), (void) (stream), (void) (size), \ + (void) n, 0) \ + : fread_unlocked (ptr, size, n, stream)))) # define fwrite_unlocked(ptr, size, n, stream) \ - (__extension__ ((((__builtin_constant_p (size) \ - && ((size) == 0 || __builtin_constant_p (n))) \ - || (__builtin_constant_p (n) && (n) == 0)) \ - && (size_t) ((size) * (n)) <= 8) \ + (__extension__ ((__builtin_constant_p (size) && __builtin_constant_p (n) \ + && (size_t) ((size) * (n)) <= 8 && (size) != 0) \ ? ({ const char *__ptr = (const char *) (ptr); \ FILE *__stream = (stream); \ - size_t __size = (size); \ - size_t __n = (n); \ - size_t __writeres = __n; \ - size_t __cnt = __size * __n + 1; \ - while (--__cnt > 0) \ + size_t __cnt; \ + for (__cnt = (size) * (n); __cnt > 0; --__cnt) \ if (_IO_putc_unlocked (*__ptr++, __stream) == EOF) \ - { \ - __writeres = (__size * __n - __cnt) / __size; \ - break; \ - } \ - __writeres; }) \ - : fwrite_unlocked (ptr, size, n, stream))) + break; \ + ((size_t) ((size) * (n)) - __cnt) / (size); }) \ + : (((__builtin_constant_p (size) && (size) == 0) \ + || (__builtin_constant_p (n) && (n) == 0)) \ + /* Evaluate all parameters once. */ \ + ? ((void) (ptr), (void) (stream), (void) (size), n) \ + : fwrite_unlocked (ptr, size, n, stream)))) #endif /* Define helper macro. */ diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog index e09b59957a..a0790ceb43 100644 --- a/linuxthreads/ChangeLog +++ b/linuxthreads/ChangeLog @@ -1,3 +1,7 @@ +1998-11-15 Andreas Schwab <schwab@issan.cs.uni-dortmund.de> + + * linuxthreads.texi: Fix punctuation after xref. + 1998-11-10 H.J. Lu <hjl@gnu.org> * sysdeps/unix/sysv/linux/bits/local_lim.h: Undefine NR_OPEN diff --git a/linuxthreads/linuxthreads.texi b/linuxthreads/linuxthreads.texi index dc1b14649a..5bab1a10d9 100644 --- a/linuxthreads/linuxthreads.texi +++ b/linuxthreads/linuxthreads.texi @@ -47,7 +47,7 @@ latter case is equivalent to calling @code{pthread_exit} with the result returned by @var{start_routine} as exit code. The @var{attr} argument specifies thread attributes to be applied to the -new thread. @xref{Thread Attributes} for details. The @var{attr} +new thread. @xref{Thread Attributes}, for details. The @var{attr} argument can also be @code{NULL}, in which case default attributes are used: the created thread is joinable (not detached) and has an ordinary (not realtime) scheduling policy. diff --git a/manual/arith.texi b/manual/arith.texi index 79bbcfdce7..3f78c11d1e 100644 --- a/manual/arith.texi +++ b/manual/arith.texi @@ -239,7 +239,7 @@ exceptions happened. Alternatively, you can enable @dfn{traps} for exceptions. In that case, when an exception is raised, your program will receive the @code{SIGFPE} signal. The default action for this signal is to terminate the -program. @xref{Signal Handling} for how you can change the effect of +program. @xref{Signal Handling}, for how you can change the effect of the signal. @findex matherr @@ -851,7 +851,7 @@ sqrt (creal (@var{z}) * creal (@var{z}) + cimag (@var{z}) * cimag (@var{z})) This function should always be used instead of the direct formula because it takes special care to avoid losing precision. It may also take advantage of hardware support for this operation. See @code{hypot} -in @xref{Exponents and Logarithms}. +in @ref{Exponents and Logarithms}. @end deftypefun @node Normalization Functions diff --git a/manual/filesys.texi b/manual/filesys.texi index 518b9e2f5a..a473560bf5 100644 --- a/manual/filesys.texi +++ b/manual/filesys.texi @@ -3,10 +3,9 @@ @chapter File System Interface This chapter describes the GNU C library's functions for manipulating -files. Unlike the input and output functions described in -@ref{I/O on Streams} and @ref{Low-Level I/O}, these -functions are concerned with operating on the files themselves, rather -than on their contents. +files. Unlike the input and output functions (@pxref{I/O on Streams}; +@pxref{Low-Level I/O}), these functions are concerned with operating +on the files themselves, rather than on their contents. Among the facilities described in this chapter are functions for examining or modifying directories, functions for renaming and deleting @@ -396,7 +395,7 @@ the current working directory: The order in which files appear in a directory tends to be fairly random. A more useful program would sort the entries (perhaps by alphabetizing them) before printing them; see -@ref{Scanning Directory Content} and @ref{Array Sort Function}. +@ref{Scanning Directory Content}, and @ref{Array Sort Function}. @node Random Access Directory diff --git a/manual/lang.texi b/manual/lang.texi index ff80e164a0..6e90bfd305 100644 --- a/manual/lang.texi +++ b/manual/lang.texi @@ -528,7 +528,7 @@ old-fashioned variadic facility is called @file{varargs.h}. Using @file{varargs.h} is almost the same as using @file{stdarg.h}. There is no difference in how you call a variadic function; -@xref{Calling Variadics}. The only difference is in how you define +see @ref{Calling Variadics}. The only difference is in how you define them. First of all, you must use old-style non-prototype syntax, like this: @@ -572,7 +572,7 @@ function. @end deftypefn The other argument macros, @code{va_arg} and @code{va_end}, are the same -in @file{varargs.h} as in @file{stdarg.h}; see @ref{Argument Macros} for +in @file{varargs.h} as in @file{stdarg.h}; see @ref{Argument Macros}, for details. It does not work to include both @file{varargs.h} and @file{stdarg.h} in diff --git a/manual/llio.texi b/manual/llio.texi index cf3e1a7c89..eb78153af5 100644 --- a/manual/llio.texi +++ b/manual/llio.texi @@ -3625,4 +3625,4 @@ unknown device. Most IOCTLs are OS-specific and/or only used in special system utilities, and are thus beyond the scope of this document. For an example of the use -of an IOCTL, @xref{Out-of-Band Data}. +of an IOCTL, see @ref{Out-of-Band Data}. diff --git a/manual/locale.texi b/manual/locale.texi index b4b7f4b24f..8b6f3fc235 100644 --- a/manual/locale.texi +++ b/manual/locale.texi @@ -140,7 +140,7 @@ and @code{strxfrm}); see @ref{Collation Functions}. @item LC_CTYPE This category applies to classification and conversion of characters, and to multibyte and wide characters; -see @ref{Character Handling} and @ref{Extended Characters}. +see @ref{Character Handling}, and @ref{Extended Characters}. @comment locale.h @comment ISO @@ -163,8 +163,8 @@ This category applies to formatting date and time values; see @comment XOPEN @item LC_MESSAGES This category applies to selecting the language used in the user -interface for message translation (@ref{The Uniforum approach} and -@ref{Message catalogs a la X/Open}). +interface for message translation (@pxref{The Uniforum approach}; +@pxref{Message catalogs a la X/Open}). @comment locale.h @comment ISO diff --git a/manual/memory.texi b/manual/memory.texi index 563cd9c265..d55a4d4fc3 100644 --- a/manual/memory.texi +++ b/manual/memory.texi @@ -896,7 +896,7 @@ Allocate a block of @var{size} bytes, starting on an address that is a multiple of @var{boundary}. @xref{Aligned Memory Blocks}. @item int mallopt (int @var{param}, int @var{value}) -Adjust a tunable parameter. @xref{Malloc Tunable Parameters} +Adjust a tunable parameter. @xref{Malloc Tunable Parameters}. @item int mcheck (void (*@var{abortfn}) (void)) Tell @code{malloc} to perform occasional consistency checks on diff --git a/manual/message.texi b/manual/message.texi index c0ab28161c..bfc7d282d3 100644 --- a/manual/message.texi +++ b/manual/message.texi @@ -279,8 +279,8 @@ functions if no supporting functionality is available. Since each set/message number tuple must be unique the programmer must keep lists of the messages at the same time the code is written. And the work between several people working on the same project must be coordinated. -In @ref{Common Usage} we will see some how these problems can be relaxed -a bit. +We will see some how these problems can be relaxed a bit (@pxref{Common +Usage}). @deftypefun int catclose (nl_catd @var{catalog_desc}) The @code{catclose} function can be used to free the resources @@ -817,8 +817,8 @@ be used. Please note that above we wrote ``message catalogs'' (plural). This is a speciality of the GNU implementation of these functions and we will -say more about this in section @xref{Locating gettext catalog} when we -talk about the ways message catalogs are selected. +say more about this when we talk about the ways message catalogs are +selected (@pxref{Locating gettext catalog}). The @code{gettext} function does not modify the value of the global @var{errno} variable. This is necessary to make it possible to write diff --git a/manual/pattern.texi b/manual/pattern.texi index ad0fe68db2..e06671d999 100644 --- a/manual/pattern.texi +++ b/manual/pattern.texi @@ -393,7 +393,7 @@ Instead of the using the using the normal functions for accessing the filesystem the @code{glob} implementation uses the user-supplied functions specified in the structure pointed to by @var{pglob} parameter. For more information about the functions refer to the -sections about directory handling @ref{Accessing Directories} and +sections about directory handling see @ref{Accessing Directories}, and @ref{Reading Attributes}. @comment glob.h diff --git a/manual/search.texi b/manual/search.texi index ae6d5ef409..0bcbc9b4d3 100644 --- a/manual/search.texi +++ b/manual/search.texi @@ -429,7 +429,7 @@ extended or searched. The @code{tsearch} function searches in the tree pointed to by @code{*@var{rootp}} for an element matching @var{key}. The function pointed to by @var{compar} is used to determine whether two elements -match. @xref{Comparison Functions} for a specification of the functions +match. @xref{Comparison Functions}, for a specification of the functions which can be used for the @var{compar} parameter. If the tree does not contain a matching entry the @var{key} value will diff --git a/manual/signal.texi b/manual/signal.texi index 2961c4f6ad..f07a748b95 100644 --- a/manual/signal.texi +++ b/manual/signal.texi @@ -978,7 +978,7 @@ the signal @var{signum}. The first argument, @var{signum}, identifies the signal whose behavior you want to control, and should be a signal number. The proper way to specify a signal number is with one of the symbolic signal names -described in @ref{Standard Signals}---don't use an explicit number, because +(@pxref{Standard Signals})---don't use an explicit number, because the numerical code for a given kind of signal may vary from operating system to operating system. diff --git a/manual/startup.texi b/manual/startup.texi index bea6c39676..1d903b49d7 100644 --- a/manual/startup.texi +++ b/manual/startup.texi @@ -103,7 +103,7 @@ the options do not take arguments. Thus, @samp{-abc} is equivalent to @item Option names are single alphanumeric characters (as for @code{isalnum}; -see @ref{Classification of Characters}). +@pxref{Classification of Characters}). @item Certain options require an argument. For example, the @samp{-o} command @@ -376,8 +376,8 @@ value is nonzero. You can deal directly with the underlying representation of environment objects to add more variables to the environment (for example, to -communicate with another program you are about to execute; see -@ref{Executing a File}). +communicate with another program you are about to execute; +@pxref{Executing a File}). @comment unistd.h @comment POSIX.1 @@ -784,7 +784,7 @@ following things happen: @item All open file descriptors in the process are closed. @xref{Low-Level I/O}. Note that streams are not flushed automatically when the process -terminates; @xref{I/O on Streams}. +terminates; see @ref{I/O on Streams}. @item The low-order 8 bits of the return status code are saved to be reported diff --git a/manual/stdio.texi b/manual/stdio.texi index 531717c81f..99a7116680 100644 --- a/manual/stdio.texi +++ b/manual/stdio.texi @@ -3749,7 +3749,7 @@ buffer (for this, try @code{open_memstream}, below). The buffer is freed when the stream is open. The argument @var{opentype} is the same as in @code{fopen} -(@xref{Opening Streams}). If the @var{opentype} specifies +(@pxref{Opening Streams}). If the @var{opentype} specifies append mode, then the initial file position is set to the first null character in the buffer. Otherwise the initial file position is at the beginning of the buffer. @@ -4342,8 +4342,8 @@ We see the different fields of the message and how the extra glue (the colons and the @code{TO FIX} string) are printed. But only one of the three calls to @code{fmtmsg} produced output. The first call does not print anything because the @var{label} parameter is not in the correct -form. As specified in @ref{Printing Formatted Messages} the string must -contain two fields, separated by a colon. The third @code{fmtmsg} call +form. The string must contain two fields, separated by a colon +(@pxref{Printing Formatted Messages}). The third @code{fmtmsg} call produced no output since the class with the numeric value @code{6} is not defined. Although a class with numeric value @code{5} is also not defined by default, the call the @code{addseverity} introduces it and diff --git a/manual/time.texi b/manual/time.texi index 09c3a9fd2e..10ee147b3a 100644 --- a/manual/time.texi +++ b/manual/time.texi @@ -675,7 +675,7 @@ does so. @xref{Time Zone Functions}. @deftypefun {char *} ctime_r (const time_t *@var{time}, char *@var{buffer}) This function is similar to @code{ctime}, only that it places the result in the string pointed to by @var{buffer}. It is equivalent to (written -using gcc extensions, @xref{Statement Exprs,,,gcc,Porting and Using gcc}.): +using gcc extensions, @pxref{Statement Exprs,,,gcc,Porting and Using gcc}): @smallexample (@{ struct tm tm; asctime_r (localtime_r (time, &tm), buf); @}) diff --git a/manual/users.texi b/manual/users.texi index 28d390c126..e1c0430279 100644 --- a/manual/users.texi +++ b/manual/users.texi @@ -778,7 +778,7 @@ store a user name. These functions let your program identify positively the user who is running or the user who logged in this session. (These can differ when -setuid programs are involved; @xref{Process Persona}.) The user cannot +setuid programs are involved; see @ref{Process Persona}.) The user cannot do anything to fool these functions. For most purposes, it is more useful to use the environment variable @@ -1843,10 +1843,10 @@ The members of this group are: @subsection Netgroup Data @cindex Netgroup -Sometimes it is useful group users according to other criteria like the -ones used in the @xref{Group Database}. E.g., it is useful to associate -a certain group of users with a certain machine. On the other hand -grouping of host names is not supported so far. +Sometimes it is useful to group users according to other criteria +(@pxref{Group Database}). E.g., it is useful to associate a certain +group of users with a certain machine. On the other hand grouping of +host names is not supported so far. In Sun Microsystems SunOS appeared a new kind of database, the netgroup database. It allows to group hosts, users, and domain freely, giving diff --git a/misc/error.c b/misc/error.c index ca7f3b47b8..2af2cc5b90 100644 --- a/misc/error.c +++ b/misc/error.c @@ -157,7 +157,10 @@ error (status, errnum, message, va_alist) { #if defined HAVE_STRERROR_R || defined _LIBC char errbuf[1024]; - fprintf (stderr, ": %s", __strerror_r (errnum, errbuf, sizeof errbuf)); + /* Don't use __strerror_r's return value because on some systems + (at least DEC UNIX 4.0[A-D]) strerror_r returns `int'. */ + __strerror_r (errnum, errbuf, sizeof errbuf); + fprintf (stderr, ": %s", errbuf); #else fprintf (stderr, ": %s", strerror (errnum)); #endif diff --git a/misc/sys/mman.h b/misc/sys/mman.h index 44d0d26340..92b4bf85a0 100644 --- a/misc/sys/mman.h +++ b/misc/sys/mman.h @@ -42,15 +42,15 @@ __BEGIN_DECLS #ifndef __USE_FILE_OFFSET64 extern __ptr_t mmap __P ((__ptr_t __addr, size_t __len, int __prot, - int __flags, int __fd, __off_t __offset)); + int __flags, int __fd, __off_t __offset)); #else extern __ptr_t mmap __P ((__ptr_t __addr, size_t __len, int __prot, - int __flags, int __fd, __off_t __offset)) + int __flags, int __fd, __off_t __offset)) __asm__ ("mmap64"); #endif #ifdef __USE_LARGEFILE64 extern __ptr_t mmap64 __P ((__ptr_t __addr, size_t __len, int __prot, - int __flags, int __fd, __off64_t __offset)); + int __flags, int __fd, __off64_t __offset)); #endif /* Deallocate any mapping for the region starting at ADDR and extending LEN @@ -94,7 +94,7 @@ extern int munlockall __P ((void)); NEW_LEN. If MAY_MOVE is MREMAP_MAYMOVE the returned address may differ from ADDR. */ extern __ptr_t mremap __P ((__ptr_t __addr, size_t __old_len, - size_t __new_len, int __may_move)); + size_t __new_len, int __may_move)); #endif __END_DECLS diff --git a/sunrpc/rpc_sample.c b/sunrpc/rpc_sample.c index 959f0a1780..79214a6a83 100644 --- a/sunrpc/rpc_sample.c +++ b/sunrpc/rpc_sample.c @@ -252,10 +252,12 @@ write_sample_server (definition * def) fprintf (fout, "\n\t/*\n\t * insert server code here\n\t */\n\n"); if (!mtflag) - if(!streq(proc->res_type, "void")) - f_print(fout, "\treturn &result;\n}\n"); - else /* cast back to void * */ - f_print(fout, "\treturn (void *) &result;\n}\n"); + { + if (!streq(proc->res_type, "void")) + f_print(fout, "\treturn &result;\n}\n"); + else /* cast back to void * */ + f_print(fout, "\treturn (void *) &result;\n}\n"); + } else f_print(fout, "\treturn retval;\n}\n"); } diff --git a/sunrpc/rpc_svcout.c b/sunrpc/rpc_svcout.c index 9b5f1dd0f5..2869d3d844 100644 --- a/sunrpc/rpc_svcout.c +++ b/sunrpc/rpc_svcout.c @@ -602,12 +602,14 @@ write_program (const definition * def, const char *storage) f_print (fout, "\t}\n"); if (!mtflag) - if (Cflag) - f_print (fout, "\t%s = (*%s)((char *)&%s, %s);\n", - RESULT, ROUTINE, ARG, RQSTP); - else - f_print (fout, "\t%s = (*%s)(&%s, %s);\n", - RESULT, ROUTINE, ARG, RQSTP); + { + if (Cflag) + f_print (fout, "\t%s = (*%s)((char *)&%s, %s);\n", + RESULT, ROUTINE, ARG, RQSTP); + else + f_print (fout, "\t%s = (*%s)(&%s, %s);\n", + RESULT, ROUTINE, ARG, RQSTP); + } else if (Cflag) f_print(fout, "\t%s = (bool_t) (*%s)((char *)&%s, (void *)&%s, %s);\n", diff --git a/sysdeps/unix/opendir.c b/sysdeps/unix/opendir.c index 3cbd6628a3..20b7b4ef98 100644 --- a/sysdeps/unix/opendir.c +++ b/sysdeps/unix/opendir.c @@ -29,37 +29,37 @@ #include <dirstream.h> -/* opendir() must not accidentally open something other than a directory. - Some OS's have kernel support for that, some don't. In the worst - case we have to stat() before the open() AND fstat() after. - - We have to test at runtime for kernel support since libc may have - been compiled with different headers to the kernel it's running on. - This test can't be done reliably in the general case. We'll use - /dev/null, which if it's not a device lots of stuff will break, as - a guinea pig. It may be missing in chroot environments, so we - make sure to fail safe. */ +/* opendir() must not accidentally open something other than a directory. + Some OS's have kernel support for that, some don't. In the worst + case we have to stat() before the open() AND fstat() after. + + We have to test at runtime for kernel support since libc may have + been compiled with different headers to the kernel it's running on. + This test can't be done reliably in the general case. We'll use + /dev/null, which if it's not a device lots of stuff will break, as + a guinea pig. It may be missing in chroot environments, so we + make sure to fail safe. */ #ifdef O_DIRECTORY -static int o_directory_works = -1; +static int o_directory_works; static void -tryopen_o_directory (void) -{ - int serrno = errno; - int x = __open ("/dev/null", O_RDONLY|O_NDELAY|O_DIRECTORY); - - if (x >= 0) - { - __close (x); - o_directory_works = 0; - } - else if (errno != ENOTDIR) - o_directory_works = 0; - else - o_directory_works = 1; - - __set_errno (serrno); -} +tryopen_o_directory (void) +{ + int serrno = errno; + int x = __open ("/dev/null", O_RDONLY|O_NDELAY|O_DIRECTORY); + + if (x >= 0) + { + __close (x); + o_directory_works = -1; + } + else if (errno != ENOTDIR) + o_directory_works = -1; + else + o_directory_works = 1; + + __set_errno (serrno); +} # define EXTRA_FLAGS O_DIRECTORY #else # define EXTRA_FLAGS 0 @@ -86,11 +86,11 @@ __opendir (const char *name) #ifdef O_DIRECTORY /* Test whether O_DIRECTORY works. */ - if (o_directory_works == -1) + if (o_directory_works == 0) tryopen_o_directory (); /* We can skip the expensive `stat' call if O_DIRECTORY works. */ - if (o_directory_works == 0) + if (o_directory_works < 0) #endif { /* We first have to check whether the name is for a directory. We diff --git a/sysdeps/unix/sysv/linux/arm/mmap.S b/sysdeps/unix/sysv/linux/arm/mmap.S index 905303e8e3..f9a773fc68 100644 --- a/sysdeps/unix/sysv/linux/arm/mmap.S +++ b/sysdeps/unix/sysv/linux/arm/mmap.S @@ -37,3 +37,4 @@ ENTRY (__mmap) PSEUDO_END (__mmap) weak_alias (__mmap, mmap) +weak_alias (__mmap, mmap64) diff --git a/sysdeps/unix/sysv/linux/i386/mmap.S b/sysdeps/unix/sysv/linux/i386/mmap.S index e0dde22a9f..a9929c8be1 100644 --- a/sysdeps/unix/sysv/linux/i386/mmap.S +++ b/sysdeps/unix/sysv/linux/i386/mmap.S @@ -46,3 +46,4 @@ L(pseudo_end): PSEUDO_END (__mmap) weak_alias (__mmap, mmap) +weak_alias (__mmap, mmap64) diff --git a/sysdeps/unix/sysv/linux/m68k/mmap.S b/sysdeps/unix/sysv/linux/m68k/mmap.S index 94578311b3..c7015ae8b0 100644 --- a/sysdeps/unix/sysv/linux/m68k/mmap.S +++ b/sysdeps/unix/sysv/linux/m68k/mmap.S @@ -41,3 +41,4 @@ ENTRY (__mmap) PSEUDO_END (__mmap) weak_alias (__mmap, mmap) +weak_alias (__mmap, mmap64) diff --git a/sysdeps/unix/sysv/linux/mmap64.c b/sysdeps/unix/sysv/linux/mmap64.c new file mode 100644 index 0000000000..fc7e416bfb --- /dev/null +++ b/sysdeps/unix/sysv/linux/mmap64.c @@ -0,0 +1,3 @@ +/* At least for now mmap64 is the same as mmap on all platforms. + When/If the 32 bit platforms get a >32 bit VFS we'll have to + change it for these platforms. */ diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list index a2ea5b8d99..ccec06a861 100644 --- a/sysdeps/unix/sysv/linux/syscalls.list +++ b/sysdeps/unix/sysv/linux/syscalls.list @@ -24,6 +24,7 @@ klogctl EXTRA syslog 3 klogctl lchown - lchown 3 __lchown lchown mlock EXTRA mlock 2 __mlock mlock mlockall EXTRA mlockall 1 __mlockall mlockall +mmap - mmap 6 __mmap mmap mmap64 mount EXTRA mount 5 __mount mount mremap EXTRA mremap 4 __mremap mremap munlock EXTRA munlock 2 __munlock munlock diff --git a/time/Makefile b/time/Makefile index 7620d622a1..80aff61e99 100644 --- a/time/Makefile +++ b/time/Makefile @@ -40,3 +40,6 @@ tz-cflags = -DTZDIR='"$(zonedir)"' \ CFLAGS-tzfile.c = $(tz-cflags) CFLAGS-tzset.c = $(tz-cflags) + +# Don't warn about Y2k problem in strftime format string. +CFLAGS-test_time.c = -Wno-format diff --git a/time/tzfile.c b/time/tzfile.c index 1bce14c3f0..2a1a953962 100644 --- a/time/tzfile.c +++ b/time/tzfile.c @@ -230,6 +230,8 @@ __tzfile_read (const char *file) || fread_unlocked (&types[i].isdst, 1, 1, f) != 1 || fread_unlocked (&types[i].idx, 1, 1, f) != 1) goto lose; + if (types[i].isdst > 1) + goto lose; if (types[i].idx >= chars) /* Bogus index in data file. */ goto lose; types[i].offset = (long int) decode (x); |