diff options
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/alpha/machine-gmon.h | 5 | ||||
-rw-r--r-- | sysdeps/generic/gnu/types.h | 1 | ||||
-rw-r--r-- | sysdeps/generic/machine-gmon.h | 2 | ||||
-rw-r--r-- | sysdeps/generic/pty.c | 2 | ||||
-rw-r--r-- | sysdeps/generic/strtok.c | 2 | ||||
-rw-r--r-- | sysdeps/generic/strtok_r.c | 2 | ||||
-rw-r--r-- | sysdeps/gnu/errlist.awk | 2 | ||||
-rw-r--r-- | sysdeps/gnu/errlist.c | 2 | ||||
-rw-r--r-- | sysdeps/posix/euidaccess.c | 2 | ||||
-rw-r--r-- | sysdeps/posix/sigvec.c | 3 | ||||
-rw-r--r-- | sysdeps/posix/tempname.c | 19 | ||||
-rw-r--r-- | sysdeps/stub/chflags.c | 3 | ||||
-rw-r--r-- | sysdeps/stub/fchflags.c | 3 | ||||
-rw-r--r-- | sysdeps/stub/sstk.c | 3 | ||||
-rw-r--r-- | sysdeps/unix/Makefile | 3 | ||||
-rw-r--r-- | sysdeps/unix/alpha/sysdep.S | 7 | ||||
-rw-r--r-- | sysdeps/unix/readdir.c | 6 | ||||
-rw-r--r-- | sysdeps/unix/readdir_r.c | 108 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/gnu/types.h | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/init-first.c | 4 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/syscalls.list | 2 |
21 files changed, 158 insertions, 25 deletions
diff --git a/sysdeps/alpha/machine-gmon.h b/sysdeps/alpha/machine-gmon.h index a551e9f8b1..e902537dd6 100644 --- a/sysdeps/alpha/machine-gmon.h +++ b/sysdeps/alpha/machine-gmon.h @@ -1,5 +1,5 @@ /* Machine-specific calling sequence for `mcount' profiling function. alpha -Copyright (C) 1995 Free Software Foundation, Inc. +Copyright (C) 1995, 1996 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 @@ -17,7 +17,8 @@ License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#define _MCOUNT_DECL void __mcount +#define _MCOUNT_DECL(from, self) \ + void __mcount (u_long from, u_long self) /* Call __mcount with our the return PC for our caller, and the return PC our caller will return to. Empty since we use an assembly stub diff --git a/sysdeps/generic/gnu/types.h b/sysdeps/generic/gnu/types.h index 614252aaac..f42fb7f544 100644 --- a/sysdeps/generic/gnu/types.h +++ b/sysdeps/generic/gnu/types.h @@ -57,6 +57,7 @@ typedef long int __daddr_t; /* The type of a disk address. */ typedef char *__caddr_t; typedef long int __time_t; typedef long int __swblk_t; /* Type of a swap block maybe? */ +typedef long int __key_t; /* Type of an IPC key */ /* fd_set for select. */ diff --git a/sysdeps/generic/machine-gmon.h b/sysdeps/generic/machine-gmon.h index 43bf62d663..31f852dece 100644 --- a/sysdeps/generic/machine-gmon.h +++ b/sysdeps/generic/machine-gmon.h @@ -41,7 +41,7 @@ weak_alias (_mcount, mcount) static void mcount_internal (u_long frompc, u_long selfpc); #define _MCOUNT_DECL(frompc, selfpc) \ -static inline void mcount_internal (frompc, selfpc) +static inline void mcount_internal (u_long frompc, u_long selfpc) #define MCOUNT \ void _mcount (void) \ diff --git a/sysdeps/generic/pty.c b/sysdeps/generic/pty.c index 6995417d3a..8df8aba4ba 100644 --- a/sysdeps/generic/pty.c +++ b/sysdeps/generic/pty.c @@ -47,6 +47,7 @@ static char sccsid[] = "@(#)pty.c 8.1 (Berkeley) 6/4/93"; #include <string.h> #include <grp.h> #include <pty.h> +#include <utmp.h> int openpty(amaster, aslave, name, termp, winp) @@ -106,7 +107,6 @@ forkpty(amaster, name, termp, winp) struct termios *termp; struct winsize *winp; { - extern int login_tty __P ((int fd)); int master, slave, pid; if (openpty(&master, &slave, name, termp, winp) == -1) diff --git a/sysdeps/generic/strtok.c b/sysdeps/generic/strtok.c index cb30619a43..4f89efa6f0 100644 --- a/sysdeps/generic/strtok.c +++ b/sysdeps/generic/strtok.c @@ -53,7 +53,7 @@ strtok (s, delim) s = strpbrk (token, delim); if (s == NULL) /* This token finishes the string. */ - olds = NULL; + olds = strchr (token, '\0'); else { /* Terminate the token and make OLDS point past it. */ diff --git a/sysdeps/generic/strtok_r.c b/sysdeps/generic/strtok_r.c index 488d3eacfe..870fb274eb 100644 --- a/sysdeps/generic/strtok_r.c +++ b/sysdeps/generic/strtok_r.c @@ -54,7 +54,7 @@ strtok_r (s, delim, save_ptr) s = strpbrk (token, delim); if (s == NULL) /* This token finishes the string. */ - *save_ptr = NULL; + *save_ptr = strchr (token, '\0'); else { /* Terminate the token and make *SAVE_PTR point past it. */ diff --git a/sysdeps/gnu/errlist.awk b/sysdeps/gnu/errlist.awk index c68e70df9a..a640fe5a11 100644 --- a/sysdeps/gnu/errlist.awk +++ b/sysdeps/gnu/errlist.awk @@ -32,7 +32,7 @@ BEGIN { print ""; print "#include <errno.h>"; print ""; - print "const char *_sys_errlist[] ="; + print "const char *const _sys_errlist[] ="; print " {"; print " [0] = N_(\"Success\")," } diff --git a/sysdeps/gnu/errlist.c b/sysdeps/gnu/errlist.c index 85ae7f11ac..3e62c5f127 100644 --- a/sysdeps/gnu/errlist.c +++ b/sysdeps/gnu/errlist.c @@ -2,7 +2,7 @@ #include <errno.h> -const char *_sys_errlist[] = +const char *const _sys_errlist[] = { [0] = N_("Success"), #ifdef EPERM diff --git a/sysdeps/posix/euidaccess.c b/sysdeps/posix/euidaccess.c index 26f3af6374..f3a10c9b9c 100644 --- a/sysdeps/posix/euidaccess.c +++ b/sysdeps/posix/euidaccess.c @@ -67,7 +67,7 @@ gid_t getegid (); extern int errno; #endif #ifndef __set_errno -#define __set_errno(val) errno = 8val) +#define __set_errno(val) errno = (val) #endif #if defined(EACCES) && !defined(EACCESS) diff --git a/sysdeps/posix/sigvec.c b/sysdeps/posix/sigvec.c index 6a224e1733..7e9aeb368e 100644 --- a/sysdeps/posix/sigvec.c +++ b/sysdeps/posix/sigvec.c @@ -26,6 +26,9 @@ Cambridge, MA 02139, USA. */ static __sighandler_t wrapped_handlers[NSIG]; static sigset_t wrapped_masks[NSIG]; +static void wrapper_handler __P ((int sig)); +static inline int convert_mask __P ((sigset_t *set, const int mask)); + static void wrapper_handler (sig) int sig; diff --git a/sysdeps/posix/tempname.c b/sysdeps/posix/tempname.c index d58024fe7e..61774a0b3e 100644 --- a/sysdeps/posix/tempname.c +++ b/sysdeps/posix/tempname.c @@ -150,7 +150,7 @@ __stdio_gen_tempname (char *buf, size_t bufsize, const char *dir, len = dlen + 1 + plen + 5 + 3; while (1) { - const size_t i; + size_t i; if (*idx >= ((sizeof (letters) - 1) * (sizeof (letters) - 1) * (sizeof (letters) - 1))) @@ -193,11 +193,18 @@ __stdio_gen_tempname (char *buf, size_t bufsize, const char *dir, Create a stream for it. */ #ifdef USE_IN_LIBIO int save; + struct locked_FILE + { + struct _IO_FILE_plus fp; +#ifdef _IO_MTSAFE_IO + _IO_lock_t lock; +#endif + } *new_f; struct _IO_FILE_plus *fp; - fp = (struct _IO_FILE_plus *) - malloc (sizeof (struct _IO_FILE_plus)); - if (fp == NULL) + new_f = (struct locked_FILE *) + malloc (sizeof (struct locked_FILE)); + if (new_f == NULL) { /* We lost trying to create a stream (out of memory?). Nothing to do but remove the file, close the descriptor, @@ -209,6 +216,10 @@ __stdio_gen_tempname (char *buf, size_t bufsize, const char *dir, __set_errno (save); return NULL; } + fp = &new_f->fp; +#ifdef _IO_MTSAFE_IO + fp->file._lock = &new_f->lock; +#endif _IO_init (&fp->file, 0); _IO_JUMPS (&fp->file) = &_IO_file_jumps; _IO_file_init (&fp->file); diff --git a/sysdeps/stub/chflags.c b/sysdeps/stub/chflags.c index 9380108283..18100cad90 100644 --- a/sysdeps/stub/chflags.c +++ b/sysdeps/stub/chflags.c @@ -21,6 +21,9 @@ Cambridge, MA 02139, USA. */ #include <sys/stat.h> /* Change the flags of FILE to FLAGS. */ + +int chflags __P ((const char *file, int flags)); + int chflags (file, flags) const char *file; diff --git a/sysdeps/stub/fchflags.c b/sysdeps/stub/fchflags.c index 4f59ad3480..21a66e8bd5 100644 --- a/sysdeps/stub/fchflags.c +++ b/sysdeps/stub/fchflags.c @@ -21,6 +21,9 @@ Cambridge, MA 02139, USA. */ #include <sys/stat.h> /* Change the flags of the file FD refers to to FLAGS. */ + +int fchflags __P ((int fd, int flags)); + int fchflags (fd, flags) int fd; diff --git a/sysdeps/stub/sstk.c b/sysdeps/stub/sstk.c index d7486737fa..aa1bfb2e73 100644 --- a/sysdeps/stub/sstk.c +++ b/sysdeps/stub/sstk.c @@ -20,6 +20,9 @@ Cambridge, MA 02139, USA. */ /* Increase the size of the stack by INCREMENT, and return the address of the bottom of the stack. */ + +void *sstk __P ((int increment)); + void * sstk (increment) int increment; diff --git a/sysdeps/unix/Makefile b/sysdeps/unix/Makefile index d3cc46ab31..78eecd5296 100644 --- a/sysdeps/unix/Makefile +++ b/sysdeps/unix/Makefile @@ -302,7 +302,8 @@ ifndef no_deps endif endif -$(common-objpfx)s-proto.d: $(..)sysdeps/unix/s-proto.S $(before-compile) +$(common-objpfx)s-proto.d: $(common-objpfx)%.d: $(..)sysdeps/unix/%.S \ + $(before-compile) $(+make-deps) endif diff --git a/sysdeps/unix/alpha/sysdep.S b/sysdeps/unix/alpha/sysdep.S index 8d70bda21e..08dc3b4851 100644 --- a/sysdeps/unix/alpha/sysdep.S +++ b/sysdeps/unix/alpha/sysdep.S @@ -27,6 +27,8 @@ errno: .space 4 .type errno, @object .size errno, 4 #endif + .globl __errno +__errno = errno .text .align 2 @@ -44,7 +46,10 @@ __syscall_error: .mask 0x4000001, -16 .prologue 1 - /* Find our pre-thread errno address */ + /* Store into the "real" variable. */ + stl v0, errno + + /* Find our per-thread errno address */ jsr ra, __errno_location /* Store the error value. */ diff --git a/sysdeps/unix/readdir.c b/sysdeps/unix/readdir.c index 491469bcd1..97956ecd06 100644 --- a/sysdeps/unix/readdir.c +++ b/sysdeps/unix/readdir.c @@ -34,12 +34,6 @@ __readdir (DIR *dirp) { struct dirent *dp; - if (dirp == NULL || dirp->data == NULL) - { - __set_errno (EINVAL); - return NULL; - } - __libc_lock_lock (dirp->lock); do diff --git a/sysdeps/unix/readdir_r.c b/sysdeps/unix/readdir_r.c new file mode 100644 index 0000000000..ef75c36234 --- /dev/null +++ b/sysdeps/unix/readdir_r.c @@ -0,0 +1,108 @@ +/* Copyright (C) 1991, 92, 93, 94, 95, 96 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 +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#include <errno.h> +#include <limits.h> +#include <stddef.h> +#include <string.h> +#include <dirent.h> +#include <unistd.h> +#include <sys/types.h> +#include <assert.h> + +#include <dirstream.h> + + +/* Read a directory entry from DIRP. */ +int +__readdir_r (DIR *dirp, struct dirent *entry, struct dirent **result) +{ + struct dirent *dp; + + __libc_lock_lock (dirp->lock); + + do + { + size_t reclen; + + if (dirp->offset >= dirp->size) + { + /* We've emptied out our buffer. Refill it. */ + + size_t maxread; + off_t base; + ssize_t bytes; + +#ifndef _DIRENT_HAVE_D_RECLEN + /* Fixed-size struct; must read one at a time (see below). */ + maxread = sizeof *dp; +#else + maxread = dirp->allocation; +#endif + + base = dirp->filepos; + bytes = __getdirentries (dirp->fd, dirp->data, maxread, &base); + if (bytes <= 0) + { + dp = NULL; + break; + } + dirp->size = (size_t) bytes; + + /* Reset the offset into the buffer. */ + dirp->offset = 0; + } + + dp = (struct dirent *) &dirp->data[dirp->offset]; + +#ifdef _DIRENT_HAVE_D_RECLEN + reclen = dp->d_reclen; +#else + /* The only version of `struct dirent' that lacks `d_reclen' + is fixed-size. */ + assert (sizeof dp->d_name > 1); + reclen = sizeof *dp; + /* The name is not terminated if it is the largest possible size. + Clobber the following byte to ensure proper null termination. We + read just one entry at a time above so we know that byte will not + be used later. */ + dp->d_name[sizeof dp->d_name] = '\0'; +#endif + + dirp->offset += reclen; + +#ifdef _DIRENT_HAVE_D_OFF + dirp->filepos = dp->d_off; +#else + dirp->filepos += reclen; +#endif + + /* Skip deleted files. */ + } while (dp->d_ino == 0); + + if (dp != NULL) + { + *entry = *dp; + *result = entry; + } + + __libc_lock_unlock (dirp->lock); + + return dp != NULL ? 0 : -1; +} +weak_alias (__readdir_r, readdir_r) diff --git a/sysdeps/unix/sysv/linux/gnu/types.h b/sysdeps/unix/sysv/linux/gnu/types.h index 745d2d8e2e..5495b61aa4 100644 --- a/sysdeps/unix/sysv/linux/gnu/types.h +++ b/sysdeps/unix/sysv/linux/gnu/types.h @@ -71,7 +71,7 @@ typedef __kernel_clock_t __clock_t; typedef unsigned long __fd_mask; #ifdef __USE_SVID -typedef int key_t; +typedef int __key_t; #endif #endif /* gnu/types.h */ diff --git a/sysdeps/unix/sysv/linux/init-first.c b/sysdeps/unix/sysv/linux/init-first.c index 75ada19610..6e1d71204c 100644 --- a/sysdeps/unix/sysv/linux/init-first.c +++ b/sysdeps/unix/sysv/linux/init-first.c @@ -21,7 +21,7 @@ Cambridge, MA 02139, USA. */ #include <sysdep.h> #include <fpu_control.h> #include <linux/personality.h> -#include "init-first.h" +#include <init-first.h> extern void __libc_init (int, char **, char **); extern void __libc_global_ctors (void); @@ -95,7 +95,7 @@ SYSDEP_CALL_INIT(__libc_init_first, init); cause ld.so to gain an init function, which is not a cool thing. */ void -_dl_start () +_dl_start (void) { abort (); } diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list index f831b41072..1dd2f4d7e7 100644 --- a/sysdeps/unix/sysv/linux/syscalls.list +++ b/sysdeps/unix/sysv/linux/syscalls.list @@ -19,7 +19,7 @@ ioperm - ioperm 3 ioperm iopl - iopl 1 iopl ipc msgget ipc 5 __ipc klogctl EXTRA syslog 3 klogctl -llseek EXTRA _llseek 5 llseek +llseek EXTRA _llseek 5 _llseek mlock EXTRA mlock 2 __mlock mlock mlockall EXTRA mlockall 1 __mlockall mlockall mount EXTRA mount 5 __mount mount |