diff options
author | Ulrich Drepper <drepper@redhat.com> | 1998-10-23 13:44:50 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1998-10-23 13:44:50 +0000 |
commit | 24f25de65657d7ac9ccec63447efbe415110435b (patch) | |
tree | 3a34a92cc12e9a07636c4a074d86f1a674a2d019 | |
parent | d6787ff2579c3ffa48219027498ed8aca3e19fc4 (diff) | |
download | glibc-24f25de65657d7ac9ccec63447efbe415110435b.zip glibc-24f25de65657d7ac9ccec63447efbe415110435b.tar.gz glibc-24f25de65657d7ac9ccec63447efbe415110435b.tar.bz2 |
Update.
* version.h (VERSION): Bump to 2.0.99.
* posix/fnmath.h: Don't redefine __P when used in glibc.
* posix/glob.h: Likewise.
* inet/rcmd.c (__ivaliduser2): Fix memory leak.
Patch by Dick Streefland <dick_streefland@tasking.com>.
* stdio-common/tst-ungetc.c: Add more test cases.
* sysdeps/unix/sysv/linux/Dist: Add linux_fsinfo.h.
* sysdeps/unix/sysv/linux/fstatvfs.c: Move filesystem magic number
definitions to ...
* sysdeps/unix/sysv/linux/linux_fsinfo.h: ...here. New file.
* sysdeps/unix/sysv/linux/fpathconf.c: New file.
* sysdeps/unix/sysv/linux/pathconf.c: New file.
* sysdeps/unix/sysv/linux/alpha/fpathconf.c: Handle _PC_LINK_MAX here.
* sysdeps/unix/sysv/linux/alpha/pathconf.c: Likewise.
1998-10-20 Philip Blundell <pb@nexus.co.uk>
* sysdeps/unix/sysv/linux/arm/bits/armsigctx.h: Include
<asm/ptrace.h> to define struct pt_regs.
* sysdeps/unix/sysv/linux/arm/profil-counter.h: Don't bother
including <asm/ptrace.h> here.
* sysdeps/unix/sysv/linux/arm/sysdep.S: Remove spurious call to
C_SYMBOL_NAME macro.
1998-10-23 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sysdeps/generic/sys/ptrace.h (__ptrace_request): Remove comma at
end of enumerator list.
* sysdeps/unix/sysv/linux/sys/ptrace.h (__ptrace_request): Likewise.
* posix/wordexp.h: Likewise.
* db/db.h: Use __PMT instead of __P in typedefs.
* db/mpool.h: Likewise.
* sysdeps/generic/bits/siginfo.h: Likewise.
* nis/rpcsvc/ypclnt.h: Likewise.
1998-10-23 Ulrich Drepper <drepper@cygnus.com>
-rw-r--r-- | ChangeLog | 43 | ||||
-rw-r--r-- | bits/siginfo.h | 4 | ||||
-rw-r--r-- | db/db.h | 20 | ||||
-rw-r--r-- | db/mpool.h | 4 | ||||
-rw-r--r-- | inet/rcmd.c | 16 | ||||
-rw-r--r-- | nis/rpcsvc/ypclnt.h | 4 | ||||
-rw-r--r-- | posix/fnmatch.h | 6 | ||||
-rw-r--r-- | posix/glob.h | 18 | ||||
-rw-r--r-- | posix/wordexp.h | 2 | ||||
-rw-r--r-- | stdio-common/tst-ungetc.c | 15 | ||||
-rw-r--r-- | sysdeps/generic/bits/siginfo.h | 4 | ||||
-rw-r--r-- | sysdeps/generic/sys/ptrace.h | 4 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/Dist | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/fpathconf.c | 44 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/pathconf.c | 44 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/bits/armsigctx.h | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/profil-counter.h | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/sysdep.S | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/fpathconf.c | 80 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/fstatvfs.c | 26 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/linux_fsinfo.h | 58 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/pathconf.c | 80 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sys/ptrace.h | 2 | ||||
-rw-r--r-- | version.h | 2 |
24 files changed, 407 insertions, 75 deletions
@@ -1,5 +1,48 @@ 1998-10-23 Ulrich Drepper <drepper@cygnus.com> + * version.h (VERSION): Bump to 2.0.99. + + * posix/fnmath.h: Don't redefine __P when used in glibc. + * posix/glob.h: Likewise. + + * inet/rcmd.c (__ivaliduser2): Fix memory leak. + Patch by Dick Streefland <dick_streefland@tasking.com>. + + * stdio-common/tst-ungetc.c: Add more test cases. + + * sysdeps/unix/sysv/linux/Dist: Add linux_fsinfo.h. + * sysdeps/unix/sysv/linux/fstatvfs.c: Move filesystem magic number + definitions to ... + * sysdeps/unix/sysv/linux/linux_fsinfo.h: ...here. New file. + * sysdeps/unix/sysv/linux/fpathconf.c: New file. + * sysdeps/unix/sysv/linux/pathconf.c: New file. + * sysdeps/unix/sysv/linux/alpha/fpathconf.c: Handle _PC_LINK_MAX here. + * sysdeps/unix/sysv/linux/alpha/pathconf.c: Likewise. + +1998-10-20 Philip Blundell <pb@nexus.co.uk> + + * sysdeps/unix/sysv/linux/arm/bits/armsigctx.h: Include + <asm/ptrace.h> to define struct pt_regs. + * sysdeps/unix/sysv/linux/arm/profil-counter.h: Don't bother + including <asm/ptrace.h> here. + + * sysdeps/unix/sysv/linux/arm/sysdep.S: Remove spurious call to + C_SYMBOL_NAME macro. + +1998-10-23 Andreas Jaeger <aj@arthur.rhein-neckar.de> + + * sysdeps/generic/sys/ptrace.h (__ptrace_request): Remove comma at + end of enumerator list. + * sysdeps/unix/sysv/linux/sys/ptrace.h (__ptrace_request): Likewise. + * posix/wordexp.h: Likewise. + + * db/db.h: Use __PMT instead of __P in typedefs. + * db/mpool.h: Likewise. + * sysdeps/generic/bits/siginfo.h: Likewise. + * nis/rpcsvc/ypclnt.h: Likewise. + +1998-10-23 Ulrich Drepper <drepper@cygnus.com> + * libio/genops.c (_IO_seekmark): When switching to backup buffer make sure all characters from the read buffer are read after switching back to it. diff --git a/bits/siginfo.h b/bits/siginfo.h index 5a223e3..e0816a9 100644 --- a/bits/siginfo.h +++ b/bits/siginfo.h @@ -1,5 +1,5 @@ /* siginfo_t, sigevent and constants. Stub version. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 1998 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 @@ -185,7 +185,7 @@ typedef struct sigevent sigval_t sigev_value; int sigev_signo; int sigev_notify; - void (*sigev_notify_function) __P ((sigval_t)); /* Function to start. */ + void (*sigev_notify_function) __PMT ((sigval_t)); /* Function to start. */ void *sigev_notify_attributes; /* Really pthread_attr_t.*/ } sigevent_t; @@ -117,14 +117,14 @@ typedef enum { DB_BTREE, DB_HASH, DB_RECNO } DBTYPE; /* Access method description structure. */ typedef struct __db { DBTYPE type; /* Underlying db type. */ - int (*close) __P((struct __db *)); - int (*del) __P((const struct __db *, const DBT *, u_int)); - int (*get) __P((const struct __db *, const DBT *, DBT *, u_int)); - int (*put) __P((const struct __db *, DBT *, const DBT *, u_int)); - int (*seq) __P((const struct __db *, DBT *, DBT *, u_int)); - int (*sync) __P((const struct __db *, u_int)); + int (*close) __PMT((struct __db *)); + int (*del) __PMT((const struct __db *, const DBT *, u_int)); + int (*get) __PMT((const struct __db *, const DBT *, DBT *, u_int)); + int (*put) __PMT((const struct __db *, DBT *, const DBT *, u_int)); + int (*seq) __PMT((const struct __db *, DBT *, DBT *, u_int)); + int (*sync) __PMT((const struct __db *, u_int)); void *internal; /* Access method private. */ - int (*fd) __P((const struct __db *)); + int (*fd) __PMT((const struct __db *)); } DB; #define BTREEMAGIC 0x053162 @@ -139,9 +139,9 @@ typedef struct { int minkeypage; /* minimum keys per page */ u_int psize; /* page size */ int (*compare) /* comparison function */ - __P((const DBT *, const DBT *)); + __PMT((const DBT *, const DBT *)); size_t (*prefix) /* prefix function */ - __P((const DBT *, const DBT *)); + __PMT((const DBT *, const DBT *)); int lorder; /* byte order */ } BTREEINFO; @@ -155,7 +155,7 @@ typedef struct { u_int nelem; /* number of elements */ u_int cachesize; /* bytes to cache */ u_int32_t /* hash function */ - (*hash) __P((const void *, size_t)); + (*hash) __PMT((const void *, size_t)); int lorder; /* byte order */ } HASHINFO; @@ -70,9 +70,9 @@ typedef struct MPOOL { u_long pagesize; /* file page size */ int fd; /* file descriptor */ /* page in conversion routine */ - void (*pgin) __P((void *, pgno_t, void *)); + void (*pgin) __PMT((void *, pgno_t, void *)); /* page out conversion routine */ - void (*pgout) __P((void *, pgno_t, void *)); + void (*pgout) __PMT((void *, pgno_t, void *)); void *pgcookie; /* cookie for page in/out routines */ #ifdef STATISTICS u_long cachehit; diff --git a/inet/rcmd.c b/inet/rcmd.c index 483e7b3..fe73342 100644 --- a/inet/rcmd.c +++ b/inet/rcmd.c @@ -553,6 +553,7 @@ __ivaliduser2(hostf, raddr, luser, ruser, rhost) int hcheck, ucheck; char *buf = NULL; size_t bufsize = 0; + int retval = -1; while (__getline (&buf, &bufsize, hostf) > 0) { buf[bufsize - 1] = '\0'; /* Make sure it's terminated. */ @@ -595,7 +596,7 @@ __ivaliduser2(hostf, raddr, luser, ruser, rhost) hcheck = __icheckhost (raddr, buf, rhost); if (hcheck < 0) - return -1; + break; if (hcheck) { /* Then check user part */ @@ -605,16 +606,21 @@ __ivaliduser2(hostf, raddr, luser, ruser, rhost) ucheck = __icheckuser (user, ruser); /* Positive 'host user' match? */ - if (ucheck > 0) - return 0; + if (ucheck > 0) { + retval = 0; + break; + } /* Negative 'host -user' match? */ if (ucheck < 0) - return -1; + break; /* Neither, go on looking for match */ } } - return -1; + if (buf != NULL) + free (buf); + + return retval; } diff --git a/nis/rpcsvc/ypclnt.h b/nis/rpcsvc/ypclnt.h index ed5e1e7..fb006c3 100644 --- a/nis/rpcsvc/ypclnt.h +++ b/nis/rpcsvc/ypclnt.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996. @@ -53,7 +53,7 @@ __BEGIN_DECLS /* struct ypall_callback * is the arg which must be passed to yp_all */ struct ypall_callback { - int (*foreach) __P ((int __status, char *__key, int __keylen, + int (*foreach) __PMT ((int __status, char *__key, int __keylen, char *__val, int __vallen, char *__data)); char *data; }; diff --git a/posix/fnmatch.h b/posix/fnmatch.h index 0966ee3..eeaee7f 100644 --- a/posix/fnmatch.h +++ b/posix/fnmatch.h @@ -24,8 +24,10 @@ extern "C" { #endif #if defined __cplusplus || (defined __STDC__ && __STDC__) || defined WINDOWS32 -# undef __P -# define __P(protos) protos +# if !defined __GLIBC__ || !defined __P +# undef __P +# define __P(protos) protos +# endif #else /* Not C++ or ANSI C. */ # undef __P # define __P(protos) () diff --git a/posix/glob.h b/posix/glob.h index f4c0974..55208e1 100644 --- a/posix/glob.h +++ b/posix/glob.h @@ -24,15 +24,17 @@ extern "C" { #undef __ptr_t #if defined __cplusplus || (defined __STDC__ && __STDC__) || defined WINDOWS32 -# undef __P -# undef __PMT -# define __P(protos) protos -# define __PMT(protos) protos -# define __ptr_t void * -# if !defined __GNUC__ || __GNUC__ < 2 -# undef __const -# define __const const +# if !defined __GLIBC__ || !defined __P +# undef __P +# undef __PMT +# define __P(protos) protos +# define __PMT(protos) protos +# if !defined __GNUC__ || __GNUC__ < 2 +# undef __const +# define __const const +# endif # endif +# define __ptr_t void * #else /* Not C++ or ANSI C. */ # undef __P # undef __PMT diff --git a/posix/wordexp.h b/posix/wordexp.h index 2bdce27..5a4102b 100644 --- a/posix/wordexp.h +++ b/posix/wordexp.h @@ -33,7 +33,7 @@ enum WRDE_SHOWERR = (1 << 4), /* Don't redirect stderr to /dev/null. */ WRDE_UNDEF = (1 << 5), /* Error for expanding undefined variables. */ __WRDE_FLAGS = (WRDE_DOOFFS | WRDE_APPEND | WRDE_NOCMD | - WRDE_REUSE | WRDE_SHOWERR | WRDE_UNDEF), + WRDE_REUSE | WRDE_SHOWERR | WRDE_UNDEF) }; /* Structure describing a word-expansion run. */ diff --git a/stdio-common/tst-ungetc.c b/stdio-common/tst-ungetc.c index ba74a84..08819b7 100644 --- a/stdio-common/tst-ungetc.c +++ b/stdio-common/tst-ungetc.c @@ -22,17 +22,24 @@ main (int argc, char *argv[]) name = tmpnam (NULL); fp = fopen (name, "w"); assert (fp != NULL) - fputs ("bl", fp); + fputs ("bla", fp); fclose (fp); fp = NULL; fp = fopen (name, "r"); - assert (fp != NULL) - assert (getc (fp) != EOF); - assert ((c = getc (fp)) != EOF); + assert (fp != NULL); + assert (ungetc ('z', fp) == 'z'); + assert (getc (fp) == 'z'); + assert (getc (fp) == 'b'); + assert (getc (fp) == 'l'); + assert (ungetc ('m', fp) == 'm'); + assert (getc (fp) == 'm'); + assert ((c = getc (fp)) == 'a'); assert (getc (fp) == EOF); assert (ungetc (c, fp) == c); assert (feof (fp) == 0); + assert (getc (fp) == c); + assert (getc (fp) == EOF); the_end: if (fp != NULL) diff --git a/sysdeps/generic/bits/siginfo.h b/sysdeps/generic/bits/siginfo.h index 5a223e3..e0816a9 100644 --- a/sysdeps/generic/bits/siginfo.h +++ b/sysdeps/generic/bits/siginfo.h @@ -1,5 +1,5 @@ /* siginfo_t, sigevent and constants. Stub version. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 1998 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 @@ -185,7 +185,7 @@ typedef struct sigevent sigval_t sigev_value; int sigev_signo; int sigev_notify; - void (*sigev_notify_function) __P ((sigval_t)); /* Function to start. */ + void (*sigev_notify_function) __PMT ((sigval_t)); /* Function to start. */ void *sigev_notify_attributes; /* Really pthread_attr_t.*/ } sigevent_t; diff --git a/sysdeps/generic/sys/ptrace.h b/sysdeps/generic/sys/ptrace.h index 9435917..47263e8 100644 --- a/sysdeps/generic/sys/ptrace.h +++ b/sysdeps/generic/sys/ptrace.h @@ -1,5 +1,5 @@ /* `ptrace' debugger support interface. Generic version; constants are common. - Copyright (C) 1991, 1992, 1996 Free Software Foundation, Inc. + Copyright (C) 1991, 1992, 1996, 1998 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 @@ -119,7 +119,7 @@ enum __ptrace_request /* Write the floating-point accelerator unit registers from the contents of the `struct fpa_regs' at ADDR. */ - PTRACE_SETFPAREGS, + PTRACE_SETFPAREGS }; /* Perform process tracing functions. REQUEST is one of the values diff --git a/sysdeps/unix/sysv/linux/Dist b/sysdeps/unix/sysv/linux/Dist index 411f575..7747c82 100644 --- a/sysdeps/unix/sysv/linux/Dist +++ b/sysdeps/unix/sysv/linux/Dist @@ -7,6 +7,7 @@ kernel_stat.h kernel_termios.h ldd-rewrite.sed lddlibc4.c +linux_fsinfo.h llseek.c s_pread64.c s_pwrite64.c diff --git a/sysdeps/unix/sysv/linux/alpha/fpathconf.c b/sysdeps/unix/sysv/linux/alpha/fpathconf.c index d8c428d..b822daa 100644 --- a/sysdeps/unix/sysv/linux/alpha/fpathconf.c +++ b/sysdeps/unix/sysv/linux/alpha/fpathconf.c @@ -22,9 +22,7 @@ #include <limits.h> #include <sys/statfs.h> -#define EXT2_SUPER_MAGIC 0xef53 -#define UFS_MAGIC 0x00011954 -#define UFS_CIGAM 0x54190100 /* byteswapped MAGIC */ +#include <linux_fsinfo.h> static long int default_fpathconf (int fd, int name); @@ -55,6 +53,46 @@ __fpathconf (fd, name) /* This filesystem supported files >2GB. */ return 64; } + if (name == _PC_LINK_MAX) + { + struct statfs fsbuf; + + /* Determine the filesystem type. */ + if (__fstatfs (fd, &fsbuf) < 0) + /* not possible, return the default value. */ + return LINK_MAX; + + switch (fsbuf.f_type) + { + case EXT2_SUPER_MAGIC: + return EXT2_LINK_MAX; + + case MINIX_SUPER_MAGIC: + case MINIX_SUPER_MAGIC2: + return MINIX_LINK_MAX; + + case MINIX2_SUPER_MAGIC: + case MINIX2_SUPER_MAGIC2: + return MINIX2_LINK_MAX; + + case XENIX_SUPER_MAGIC: + return XENIX_LINK_MAX; + + case SYSV4_SUPER_MAGIC: + case SYSV2_SUPER_MAGIC: + return SYSV_LINK_MAX; + + case COH_SUPER_MAGIC: + return COH_LINK_MAX; + + case UFS_MAGIC: + case UFS_CIGAM: + return UFS_LINK_MAX; + + default: + return LINK_MAX; + } + } /* Fallback to the generic version. */ return default_fpathconf (fd, name); diff --git a/sysdeps/unix/sysv/linux/alpha/pathconf.c b/sysdeps/unix/sysv/linux/alpha/pathconf.c index 91ca094..15910be 100644 --- a/sysdeps/unix/sysv/linux/alpha/pathconf.c +++ b/sysdeps/unix/sysv/linux/alpha/pathconf.c @@ -23,9 +23,7 @@ #include <fcntl.h> #include <sys/statfs.h> -#define EXT2_SUPER_MAGIC 0xef53 -#define UFS_MAGIC 0x00011954 -#define UFS_CIGAM 0x54190100 /* byteswapped MAGIC */ +#include <linux_fsinfo.h> static long int default_pathconf (const char *path, int name); @@ -48,6 +46,46 @@ __pathconf (const char *path, int name) /* This filesystem supported files >2GB. */ return 64; } + if (name == _PC_LINK_MAX) + { + struct statfs fsbuf; + + /* Determine the filesystem type. */ + if (__statfs (fd, &fsbuf) < 0) + /* not possible, return the default value. */ + return LINK_MAX; + + switch (fsbuf.f_type) + { + case EXT2_SUPER_MAGIC: + return EXT2_LINK_MAX; + + case MINIX_SUPER_MAGIC: + case MINIX_SUPER_MAGIC2: + return MINIX_LINK_MAX; + + case MINIX2_SUPER_MAGIC: + case MINIX2_SUPER_MAGIC2: + return MINIX2_LINK_MAX; + + case XENIX_SUPER_MAGIC: + return XENIX_LINK_MAX; + + case SYSV4_SUPER_MAGIC: + case SYSV2_SUPER_MAGIC: + return SYSV_LINK_MAX; + + case COH_SUPER_MAGIC: + return COH_LINK_MAX; + + case UFS_MAGIC: + case UFS_CIGAM: + return UFS_LINK_MAX; + + default: + return LINK_MAX; + } + } /* Fallback to the generic version. */ return default_pathconf (path, name); diff --git a/sysdeps/unix/sysv/linux/arm/bits/armsigctx.h b/sysdeps/unix/sysv/linux/arm/bits/armsigctx.h index 395e194..ba78c03 100644 --- a/sysdeps/unix/sysv/linux/arm/bits/armsigctx.h +++ b/sysdeps/unix/sysv/linux/arm/bits/armsigctx.h @@ -21,6 +21,8 @@ Fortunately 2.0 puts a magic number in the first word and this is not a legal value for `trap_no', so we can tell them apart. */ +#include <asm/ptrace.h> + union k_sigcontext { struct diff --git a/sysdeps/unix/sysv/linux/arm/profil-counter.h b/sysdeps/unix/sysv/linux/arm/profil-counter.h index 55a11bd..a1a4fc9 100644 --- a/sysdeps/unix/sysv/linux/arm/profil-counter.h +++ b/sysdeps/unix/sysv/linux/arm/profil-counter.h @@ -18,7 +18,6 @@ Boston, MA 02111-1307, USA. */ #include <signal.h> -#include <asm/ptrace.h> #include <bits/armsigctx.h> void diff --git a/sysdeps/unix/sysv/linux/arm/sysdep.S b/sysdeps/unix/sysv/linux/arm/sysdep.S index 872ed4b..3e3c853 100644 --- a/sysdeps/unix/sysv/linux/arm/sysdep.S +++ b/sysdeps/unix/sysv/linux/arm/sysdep.S @@ -24,7 +24,7 @@ .type C_SYMBOL_NAME(errno),%object .size C_SYMBOL_NAME(errno),4 C_SYMBOL_NAME(errno): .zero 4 -weak_alias (C_SYMBOL_NAME(errno), C_SYMBOL_NAME(_errno)) +weak_alias (errno, _errno) .text /* The syscall stubs jump here when they detect an error. diff --git a/sysdeps/unix/sysv/linux/fpathconf.c b/sysdeps/unix/sysv/linux/fpathconf.c new file mode 100644 index 0000000..81ddef3 --- /dev/null +++ b/sysdeps/unix/sysv/linux/fpathconf.c @@ -0,0 +1,80 @@ +/* Linux specific extensions to fpathconf. + Copyright (C) 1991, 1995, 1996, 1998 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., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <unistd.h> +#include <limits.h> +#include <sys/statfs.h> + +#include "linux_fsinfo.h" + +static long int posix_fpathconf (int fd, int name); + + +/* Get file-specific information about descriptor FD. */ +long int +__fpathconf (fd, name) + int fd; + int name; +{ + if (name == _PC_LINK_MAX) + { + struct statfs fsbuf; + + /* Determine the filesystem type. */ + if (__fstatfs (fd, &fsbuf) < 0) + /* not possible, return the default value. */ + return LINK_MAX; + + switch (fsbuf.f_type) + { + case EXT2_SUPER_MAGIC: + return EXT2_LINK_MAX; + + case MINIX_SUPER_MAGIC: + case MINIX_SUPER_MAGIC2: + return MINIX_LINK_MAX; + + case MINIX2_SUPER_MAGIC: + case MINIX2_SUPER_MAGIC2: + return MINIX2_LINK_MAX; + + case XENIX_SUPER_MAGIC: + return XENIX_LINK_MAX; + + case SYSV4_SUPER_MAGIC: + case SYSV2_SUPER_MAGIC: + return SYSV_LINK_MAX; + + case COH_SUPER_MAGIC: + return COH_LINK_MAX; + + case UFS_MAGIC: + case UFS_CIGAM: + return UFS_LINK_MAX; + + default: + return LINK_MAX; + } + } + + return posix_fpathconf (fd, name); +} + +#define __fpathconf static posix_fpathconf +#include <sysdeps/posix/fpathconf.c> diff --git a/sysdeps/unix/sysv/linux/fstatvfs.c b/sysdeps/unix/sysv/linux/fstatvfs.c index 43bab44..11f6f8e 100644 --- a/sysdeps/unix/sysv/linux/fstatvfs.c +++ b/sysdeps/unix/sysv/linux/fstatvfs.c @@ -26,31 +26,7 @@ #include <sys/statfs.h> #include <sys/statvfs.h> -/* These definitions come from the kernel headers. But we cannot - include the headers here because of type clashes. If new - filesystem types will become available we have to add the - appropriate definitions here.*/ -#define ADFS_SUPER_MAGIC 0xadf5 -#define AFFS_SUPER_MAGIC 0xadff -#define CODA_SUPER_MAGIC 0x73757245 -#define EXT2_SUPER_MAGIC 0xef53 -#define HPFS_SUPER_MAGIC 0xf995e849 -#define ISOFS_SUPER_MAGIC 0x9660 -#define MINIX_SUPER_MAGIC 0x137f -#define MINIX_SUPER_MAGIC2 0x138F -#define MINIX2_SUPER_MAGIC 0x2468 -#define MINIX2_SUPER_MAGIC2 0x2478 -#define MSDOS_SUPER_MAGIC 0x4d44 -#define NCP_SUPER_MAGIC 0x564c -#define NFS_SUPER_MAGIC 0x6969 -#define PROC_SUPER_MAGIC 0x9fa0 -#define SMB_SUPER_MAGIC 0x517b -#define XENIX_SUPER_MAGIC 0x012ff7b4 -#define SYSV4_SUPER_MAGIC 0x012ff7b5 -#define SYSV2_SUPER_MAGIC 0x012ff7b6 -#define COH_SUPER_MAGIC 0x012ff7b7 -#define UFS_MAGIC 0x00011954 -#define UFS_CIGAM 0x54190100 /* byteswapped MAGIC */ +#include "linux_fsinfo.h" int diff --git a/sysdeps/unix/sysv/linux/linux_fsinfo.h b/sysdeps/unix/sysv/linux/linux_fsinfo.h new file mode 100644 index 0000000..9dfb034 --- /dev/null +++ b/sysdeps/unix/sysv/linux/linux_fsinfo.h @@ -0,0 +1,58 @@ +/* Constants from kernel header for various FSes. + Copyright (C) 1998 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., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef _LINUX_FSINFO_H +#define _LINUX_FSINFO_H 1 + +/* These definitions come from the kernel headers. But we cannot + include the headers here because of type clashes. If new + filesystem types will become available we have to add the + appropriate definitions here.*/ +#define ADFS_SUPER_MAGIC 0xadf5 +#define AFFS_SUPER_MAGIC 0xadff +#define CODA_SUPER_MAGIC 0x73757245 +#define EXT2_SUPER_MAGIC 0xef53 +#define HPFS_SUPER_MAGIC 0xf995e849 +#define ISOFS_SUPER_MAGIC 0x9660 +#define MINIX_SUPER_MAGIC 0x137f +#define MINIX_SUPER_MAGIC2 0x138F +#define MINIX2_SUPER_MAGIC 0x2468 +#define MINIX2_SUPER_MAGIC2 0x2478 +#define MSDOS_SUPER_MAGIC 0x4d44 +#define NCP_SUPER_MAGIC 0x564c +#define NFS_SUPER_MAGIC 0x6969 +#define PROC_SUPER_MAGIC 0x9fa0 +#define SMB_SUPER_MAGIC 0x517b +#define XENIX_SUPER_MAGIC 0x012ff7b4 +#define SYSV4_SUPER_MAGIC 0x012ff7b5 +#define SYSV2_SUPER_MAGIC 0x012ff7b6 +#define COH_SUPER_MAGIC 0x012ff7b7 +#define UFS_MAGIC 0x00011954 +#define UFS_CIGAM 0x54190100 /* byteswapped MAGIC */ + +/* Maximum link counts. */ +#define EXT2_LINK_MAX 32000 +#define MINIX_LINK_MAX 250 +#define MINIX2_LINK_MAX 65530 +#define XENIX_LINK_MAX 126 /* ?? */ +#define SYSV_LINK_MAX 126 /* 127? 251? */ +#define COH_LINK_MAX 10000 +#define UFS_LINK_MAX EXT2_LINK_MAX + +#endif /* linux_fsinfo.h */ diff --git a/sysdeps/unix/sysv/linux/pathconf.c b/sysdeps/unix/sysv/linux/pathconf.c new file mode 100644 index 0000000..dcf87d5 --- /dev/null +++ b/sysdeps/unix/sysv/linux/pathconf.c @@ -0,0 +1,80 @@ +/* Linux specific extensions to pathconf. + Copyright (C) 1991, 1995, 1996, 1998 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., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <unistd.h> +#include <limits.h> +#include <sys/statfs.h> + +#include "linux_fsinfo.h" + +static long int posix_pathconf (const char *path, int name); + + +/* Get file-specific information about descriptor FD. */ +long int +__pathconf (path, name) + const char *path; + int name; +{ + if (name == _PC_LINK_MAX) + { + struct statfs fsbuf; + + /* Determine the filesystem type. */ + if (__statfs (path, &fsbuf) < 0) + /* not possible, return the default value. */ + return LINK_MAX; + + switch (fsbuf.f_type) + { + case EXT2_SUPER_MAGIC: + return EXT2_LINK_MAX; + + case MINIX_SUPER_MAGIC: + case MINIX_SUPER_MAGIC2: + return MINIX_LINK_MAX; + + case MINIX2_SUPER_MAGIC: + case MINIX2_SUPER_MAGIC2: + return MINIX2_LINK_MAX; + + case XENIX_SUPER_MAGIC: + return XENIX_LINK_MAX; + + case SYSV4_SUPER_MAGIC: + case SYSV2_SUPER_MAGIC: + return SYSV_LINK_MAX; + + case COH_SUPER_MAGIC: + return COH_LINK_MAX; + + case UFS_MAGIC: + case UFS_CIGAM: + return UFS_LINK_MAX; + + default: + return LINK_MAX; + } + } + + return posix_pathconf (path, name); +} + +#define __pathconf static posix_pathconf +#include <sysdeps/posix/pathconf.c> diff --git a/sysdeps/unix/sysv/linux/sys/ptrace.h b/sysdeps/unix/sysv/linux/sys/ptrace.h index 6c5d580..5b67066 100644 --- a/sysdeps/unix/sysv/linux/sys/ptrace.h +++ b/sysdeps/unix/sysv/linux/sys/ptrace.h @@ -99,7 +99,7 @@ enum __ptrace_request #define PT_DETACH PTRACE_DETACH /* Continue and stop at the next (return from) syscall. */ - PTRACE_SYSCALL = 24, + PTRACE_SYSCALL = 24 #define PTRACE_SYSCALL PTRACE_SYSCALL }; @@ -1,4 +1,4 @@ /* This file just defines the current version number of libc. */ #define RELEASE "experimental" -#define VERSION "2.0.98" +#define VERSION "2.0.99" |