about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog43
-rw-r--r--bits/siginfo.h4
-rw-r--r--db/db.h20
-rw-r--r--db/mpool.h4
-rw-r--r--inet/rcmd.c16
-rw-r--r--nis/rpcsvc/ypclnt.h4
-rw-r--r--posix/fnmatch.h6
-rw-r--r--posix/glob.h18
-rw-r--r--posix/wordexp.h2
-rw-r--r--stdio-common/tst-ungetc.c15
-rw-r--r--sysdeps/generic/bits/siginfo.h4
-rw-r--r--sysdeps/generic/sys/ptrace.h4
-rw-r--r--sysdeps/unix/sysv/linux/Dist1
-rw-r--r--sysdeps/unix/sysv/linux/alpha/fpathconf.c44
-rw-r--r--sysdeps/unix/sysv/linux/alpha/pathconf.c44
-rw-r--r--sysdeps/unix/sysv/linux/arm/bits/armsigctx.h2
-rw-r--r--sysdeps/unix/sysv/linux/arm/profil-counter.h1
-rw-r--r--sysdeps/unix/sysv/linux/arm/sysdep.S2
-rw-r--r--sysdeps/unix/sysv/linux/fpathconf.c80
-rw-r--r--sysdeps/unix/sysv/linux/fstatvfs.c26
-rw-r--r--sysdeps/unix/sysv/linux/linux_fsinfo.h58
-rw-r--r--sysdeps/unix/sysv/linux/pathconf.c80
-rw-r--r--sysdeps/unix/sysv/linux/sys/ptrace.h2
-rw-r--r--version.h2
24 files changed, 407 insertions, 75 deletions
diff --git a/ChangeLog b/ChangeLog
index a2f3c66c43..f6a345de14 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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 5a223e373b..e0816a9bc2 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;
 
diff --git a/db/db.h b/db/db.h
index f00c4df9f9..8b7921f975 100644
--- a/db/db.h
+++ b/db/db.h
@@ -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;
 
diff --git a/db/mpool.h b/db/mpool.h
index 56f17f90db..22c9feabd3 100644
--- a/db/mpool.h
+++ b/db/mpool.h
@@ -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 483e7b389d..fe73342424 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 ed5e1e72d6..fb006c3874 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 0966ee301a..eeaee7fb8c 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 f4c0974011..55208e1799 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 2bdce27f93..5a4102b760 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 ba74a84f7f..08819b7765 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 5a223e373b..e0816a9bc2 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 94359175ed..47263e8dc3 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 411f575b91..7747c82e99 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 d8c428dcda..b822daaf39 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 91ca0942fb..15910be9a1 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 395e194293..ba78c03a89 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 55a11bd76b..a1a4fc9d7f 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 872ed4b555..3e3c853c78 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 0000000000..81ddef3944
--- /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 43bab44543..11f6f8eb44 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 0000000000..9dfb034b7d
--- /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 0000000000..dcf87d5284
--- /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 6c5d580d7b..5b670668bf 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
 };
 
diff --git a/version.h b/version.h
index 8e8bc1ec2d..7bf9713fff 100644
--- a/version.h
+++ b/version.h
@@ -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"