Update.
authorUlrich Drepper <drepper@redhat.com>
Sat, 31 Jul 1999 06:11:24 +0000 (06:11 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sat, 31 Jul 1999 06:11:24 +0000 (06:11 +0000)
1999-07-30  Andreas Schwab  <schwab@suse.de>

* sysdeps/unix/sysv/linux/getsysstats.c (GET_NPROCS_PARSER): New
definition.
(__get_nprocs): Use it.
(__get_nprocs_conf): Define as separate function if
GET_NPROCS_CONF_PARSER is defined.
* sysdeps/unix/sysv/linux/alpha/getsysstats.c: New file.

* include/sys/sysinfo.h: New file.
* sysdeps/generic/sys/sysinfo.h: Remove declaration of internal
interface.
* sysdeps/unix/sysv/linux/sys/sysinfo.h: Likewise.

1999-07-30  H.J. Lu  <hjl@gnu.org>

* libio/iofflush.c (fflush_unlocked): Weak aliase if
_IO_MTSAFE_IO is not defined.
* libio/clearerr.c (clearerr_unlocked): Likewise.
* libio/feof.c (feof_unlocked): Likewise.
* libio/ferror.c (ferror_unlocked): Likewise.
* libio/fputc.c (fputc_unlocked): Likewise.
* libio/getc.c (getc_unlocked, fgetc_unlocked): Likewise.
* libio/getchar.c (getchar_unlocked): Likewise.
* libio/putc.c (putc_unlocked): Likewise.
* libio/putchar.c (putchar_unlocked): Likewise.

1999-07-30  Thorsten Kukuk  <kukuk@suse.de>

* sunrpc/Versions: Add svc_getreq_common, svc_getreq_poll,
  svc_max_pollfd and svc_pollfd to GLIBC_2.2
* sunrpc/rpc/svc.h: Use rpc*_t types, add new prototypes
  for svc_run/poll interface.
* sunrpc/rpc/types.h: Add rpc*_t typedefs.
* sunrpc/rpc_common.c: Add svc_pollfd and svc_max_pollfd as
  global variable.
* sunrpc/svc.c: Add svc_getreq_poll and svc_getreq_common,
  rewrite other svc_getreq* functions to use svc_getreq_common.
* sunrpc/svc_run.c: Use poll().

1999-07-30  Andreas Schwab  <schwab@suse.de>

* Makerules: Put sysd-versions and Versions.all on
postclean-generated instead of common-generated.

1999-07-29  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

* manual/time.texi (Basic CPU Time): Note that clock_t can wrap
around and CLOCKS_PER_SEC is 1e6.

23 files changed:
ChangeLog
Makerules
include/sys/sysinfo.h [new file with mode: 0644]
libio/clearerr.c
libio/feof.c
libio/ferror.c
libio/fputc.c
libio/getc.c
libio/getchar.c
libio/iofflush.c
libio/putc.c
libio/putchar.c
manual/time.texi
sunrpc/Versions
sunrpc/rpc/svc.h
sunrpc/rpc/types.h
sunrpc/rpc_common.c
sunrpc/svc.c
sunrpc/svc_run.c
sysdeps/generic/sys/sysinfo.h
sysdeps/unix/sysv/linux/alpha/getsysstats.c [new file with mode: 0644]
sysdeps/unix/sysv/linux/getsysstats.c
sysdeps/unix/sysv/linux/sys/sysinfo.h

index 58256b5..37eb4ad 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,53 @@
+1999-07-30  Andreas Schwab  <schwab@suse.de>
+
+       * sysdeps/unix/sysv/linux/getsysstats.c (GET_NPROCS_PARSER): New
+       definition.
+       (__get_nprocs): Use it.
+       (__get_nprocs_conf): Define as separate function if
+       GET_NPROCS_CONF_PARSER is defined.
+       * sysdeps/unix/sysv/linux/alpha/getsysstats.c: New file.
+
+       * include/sys/sysinfo.h: New file.
+       * sysdeps/generic/sys/sysinfo.h: Remove declaration of internal
+       interface.
+       * sysdeps/unix/sysv/linux/sys/sysinfo.h: Likewise.
+
+1999-07-30  H.J. Lu  <hjl@gnu.org>
+
+       * libio/iofflush.c (fflush_unlocked): Weak aliase if
+       _IO_MTSAFE_IO is not defined.
+       * libio/clearerr.c (clearerr_unlocked): Likewise.
+       * libio/feof.c (feof_unlocked): Likewise.
+       * libio/ferror.c (ferror_unlocked): Likewise.
+       * libio/fputc.c (fputc_unlocked): Likewise.
+       * libio/getc.c (getc_unlocked, fgetc_unlocked): Likewise.
+       * libio/getchar.c (getchar_unlocked): Likewise.
+       * libio/putc.c (putc_unlocked): Likewise.
+       * libio/putchar.c (putchar_unlocked): Likewise.
+
+1999-07-30  Thorsten Kukuk  <kukuk@suse.de>
+
+       * sunrpc/Versions: Add svc_getreq_common, svc_getreq_poll,
+         svc_max_pollfd and svc_pollfd to GLIBC_2.2
+       * sunrpc/rpc/svc.h: Use rpc*_t types, add new prototypes
+         for svc_run/poll interface.
+       * sunrpc/rpc/types.h: Add rpc*_t typedefs.
+       * sunrpc/rpc_common.c: Add svc_pollfd and svc_max_pollfd as
+         global variable.
+       * sunrpc/svc.c: Add svc_getreq_poll and svc_getreq_common,
+         rewrite other svc_getreq* functions to use svc_getreq_common.
+       * sunrpc/svc_run.c: Use poll().
+
+1999-07-30  Andreas Schwab  <schwab@suse.de>
+
+       * Makerules: Put sysd-versions and Versions.all on
+       postclean-generated instead of common-generated.
+
+1999-07-29  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
+
+       * manual/time.texi (Basic CPU Time): Note that clock_t can wrap
+       around and CLOCKS_PER_SEC is 1e6.
+
 1999-07-30  Ulrich Drepper  <drepper@cygnus.com>
 
        * configure.in: Add test for local label subtraction.
index 90b0587..4d6a487 100644 (file)
--- a/Makerules
+++ b/Makerules
@@ -269,7 +269,8 @@ ifdef sysd-dirs-done
 ifeq ($(versioning),yes)
 -include $(common-objpfx)sysd-versions
 $(addprefix $(common-objpfx),$(version-maps)): $(common-objpfx)sysd-versions
-common-generated += $(version-maps) sysd-versions Versions.all
+common-generated += $(version-maps)
+postclean-generated += sysd-versions Versions.all
 
 ifndef avoid-generated
 ifneq ($(sysd-versions-subdirs),$(all-subdirs) $(config-sysdirs))
diff --git a/include/sys/sysinfo.h b/include/sys/sysinfo.h
new file mode 100644 (file)
index 0000000..9d1549d
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef _SYS_SYSINFO_H
+#include_next <sys/sysinfo.h>
+
+/* Now we define the internal interface.  */
+
+/* Return number of configured processors.  */
+extern int __get_nprocs_conf __P ((void));
+
+/* Return number of available processors.  */
+extern int __get_nprocs __P ((void));
+
+/* Return number of physical pages of memory in the system.  */
+extern int __get_phys_pages __P ((void));
+
+/* Return number of available physical pages of memory in the system.  */
+extern int __get_avphys_pages __P ((void));
+
+#endif /* sys/sysinfo.h */
index 4776250..3831c1c 100644 (file)
@@ -28,3 +28,7 @@ clearerr (fp)
   _IO_clearerr (fp);
   _IO_funlockfile (fp);
 }
+
+#if defined weak_alias && !defined _IO_MTSAFE_IO
+weak_alias (clearerr, clearerr_unlocked)
+#endif
index d06de04..7407426 100644 (file)
@@ -40,4 +40,9 @@ _IO_feof (fp)
 
 #ifdef weak_alias
 weak_alias (_IO_feof, feof)
+
+#ifndef _IO_MTSAFE_IO
+#undef feof_unlocked
+weak_alias (_IO_feof, feof_unlocked)
+#endif
 #endif
index 855627a..b9a3ee8 100644 (file)
@@ -40,4 +40,9 @@ _IO_ferror (fp)
 
 #ifdef weak_alias
 weak_alias (_IO_ferror, ferror)
+
+#ifndef _IO_MTSAFE_IO
+#undef ferror_unlocked
+weak_alias (_IO_ferror, ferror_unlocked)
+#endif
 #endif
index 3ec8b69..4684af0 100644 (file)
@@ -40,3 +40,8 @@ fputc (c, fp)
   _IO_cleanup_region_end (0);
   return result;
 }
+
+#if defined weak_alias && !defined _IO_MTSAFE_IO
+#undef fputc_unlocked
+weak_alias (fputc, fputc_unlocked)
+#endif
index 6ccef99..b58ea99 100644 (file)
@@ -47,4 +47,10 @@ _IO_getc (fp)
 #ifdef weak_alias
 weak_alias (_IO_getc, getc)
 weak_alias (_IO_getc, fgetc)
+
+#ifndef _IO_MTSAFE_IO
+#undef getc_unlocked
+weak_alias (_IO_getc, getc_unlocked)
+weak_alias (_IO_getc, fgetc_unlocked)
+#endif
 #endif
index 80c297f..a7a1072 100644 (file)
@@ -40,3 +40,8 @@ getchar ()
   _IO_cleanup_region_end (0);
   return result;
 }
+
+#if defined weak_alias && !defined _IO_MTSAFE_IO
+#undef getchar_unlocked
+weak_alias (getchar, getchar_unlocked)
+#endif
index 724ff26..126947a 100644 (file)
@@ -47,4 +47,8 @@ _IO_fflush (fp)
 
 #ifdef weak_alias
 weak_alias (_IO_fflush, fflush)
+
+#ifndef _IO_MTSAFE_IO
+weak_alias (_IO_fflush, fflush_unlocked)
+#endif
 #endif
index 72cd2a1..0236224 100644 (file)
@@ -40,4 +40,9 @@ _IO_putc (c, fp)
 
 #ifdef weak_alias
 weak_alias (_IO_putc, putc)
+
+#ifndef _IO_MTSAFE_IO
+#undef putc_unlocked
+weak_alias (_IO_putc, putc_unlocked)
+#endif
 #endif
index 143796d..e11e3d8 100644 (file)
@@ -34,3 +34,8 @@ putchar (c)
   _IO_cleanup_region_end (0);
   return result;
 }
+
+#if defined weak_alias && !defined _IO_MTSAFE_IO
+#undef putchar_unlocked
+weak_alias (putchar, putchar_unlocked)
+#endif
index 7d5cfda..543042a 100644 (file)
@@ -95,11 +95,16 @@ to @code{double}, as in the example above, makes sure that operations
 such as arithmetic and printing work properly and consistently no matter
 what the underlying representation is.
 
+Note that the clock can wrap around.  On a 32bit system with
+@code{CLOCKS_PER_SEC} set to one million a wrap around happens after
+around 36 minutes.
+
 @comment time.h
 @comment ISO
 @deftypevr Macro int CLOCKS_PER_SEC
 The value of this macro is the number of clock ticks per second measured
-by the @code{clock} function.
+by the @code{clock} function.  POSIX requires that this value is one
+million independend of the actual resolution.
 @end deftypevr
 
 @comment time.h
index 1d90bbe..e222b16 100644 (file)
@@ -107,4 +107,6 @@ libc {
     xdr_hyper; xdr_u_hyper; xdr_longlong_t; xdr_u_longlong_t;
     xdr_int64_t; xdr_uint64_t;
   }
+  GLIBC_2.2 {
+    svc_getreq_common; svc_getreq_poll; svc_max_pollfd; svc_pollfd;
 }
index 4ac2a5c..f607d6b 100644 (file)
@@ -1,4 +1,3 @@
-/* @(#)svc.h   2.2 88/07/29 4.0 RPCSRC; from 1.20 88/02/08 SMI */
 /*
  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
  * unrestricted use provided that this legend is included on all tape
@@ -147,12 +146,12 @@ struct SVCXPRT {
  * Service request
  */
 struct svc_req {
-       u_long          rq_prog;        /* service program number */
-       u_long          rq_vers;        /* service protocol version */
-       u_long          rq_proc;        /* the desired procedure */
-       struct opaque_auth rq_cred;     /* raw creds from the wire */
-       caddr_t         rq_clntcred;    /* read only cooked cred */
-       SVCXPRT *rq_xprt;               /* associated transport */
+  rpcprog_t rq_prog;            /* service program number */
+  rpcvers_t rq_vers;            /* service protocol version */
+  rpcproc_t rq_proc;            /* the desired procedure */
+  struct opaque_auth rq_cred;   /* raw creds from the wire */
+  caddr_t rq_clntcred;          /* read only cooked cred */
+  SVCXPRT *rq_xprt;             /* associated transport */
 };
 
 #ifndef __DISPATCH_FN_T
@@ -165,23 +164,23 @@ typedef void (*__dispatch_fn_t) __PMT ((struct svc_req*, SVCXPRT*));
  *
  * svc_register(xprt, prog, vers, dispatch, protocol)
  *     SVCXPRT *xprt;
- *     u_long prog;
- *     u_long vers;
+ *     rpcprog_t prog;
+ *     rpcvers_t vers;
  *     void (*dispatch)();
- *     u_long protocol;  like TCP or UDP, zero means do not register
+ *     rpcprot_t protocol;  like TCP or UDP, zero means do not register
  */
-extern bool_t  svc_register __P ((SVCXPRT *__xprt, u_long __prog,
-                                  u_long __vers, __dispatch_fn_t __dispatch,
-                                  u_long __protocol));
+extern bool_t svc_register __P ((SVCXPRT *__xprt, rpcprog_t __prog,
+                                rpcvers_t __vers, __dispatch_fn_t __dispatch,
+                                rpcprot_t __protocol));
 
 /*
  * Service un-registration
  *
  * svc_unregister(prog, vers)
- *     u_long prog;
- *     u_long vers;
+ *     rpcprog_t prog;
+ *     rpcvers_t vers;
  */
-extern void    svc_unregister __P ((u_long __prog, u_long __vers));
+extern void svc_unregister __P ((rpcprog_t __prog, rpcvers_t __vers));
 
 /*
  * Transport registration.
@@ -189,7 +188,7 @@ extern void svc_unregister __P ((u_long __prog, u_long __vers));
  * xprt_register(xprt)
  *     SVCXPRT *xprt;
  */
-extern void    xprt_register __P ((SVCXPRT *__xprt));
+extern void xprt_register __P ((SVCXPRT *__xprt));
 
 /*
  * Transport un-register
@@ -197,9 +196,7 @@ extern void xprt_register __P ((SVCXPRT *__xprt));
  * xprt_unregister(xprt)
  *     SVCXPRT *xprt;
  */
-extern void    xprt_unregister __P ((SVCXPRT *__xprt));
-
-
+extern void xprt_unregister __P ((SVCXPRT *__xprt));
 
 
 /*
@@ -237,8 +234,8 @@ extern void svcerr_weakauth __P ((SVCXPRT *__xprt));
 
 extern void    svcerr_noproc __P ((SVCXPRT *__xprt));
 
-extern void    svcerr_progvers __P ((SVCXPRT *__xprt, u_long __low_vers,
-                                     u_long __high_vers));
+extern void    svcerr_progvers __P ((SVCXPRT *__xprt, rpcvers_t __low_vers,
+                                     rpcvers_t __high_vers));
 
 extern void    svcerr_auth __P ((SVCXPRT *__xprt, enum auth_stat __why));
 
@@ -261,19 +258,20 @@ extern void       svcerr_systemerr __P ((SVCXPRT *__xprt));
  * Global keeper of rpc service descriptors in use
  * dynamic; must be inspected before each call to select
  */
-#ifdef FD_SETSIZE
+
+extern struct pollfd *svc_pollfd;
+extern int svc_max_pollfd;
 extern fd_set svc_fdset;
 #define svc_fds svc_fdset.fds_bits[0]  /* compatibility */
-#else
-extern int svc_fds;
-#endif /* def FD_SETSIZE */
 
 /*
  * a small program implemented by the svc_rpc implementation itself;
  * also see clnt.h for protocol numbers.
  */
 extern void svc_getreq __P ((int __rdfds));
+extern void svc_getreq_common __P ((const int __fd));
 extern void svc_getreqset __P ((fd_set *__readfds));
+extern void svc_getreq_poll __P ((struct pollfd *, const int));
 extern void svc_exit __P ((void));
 extern void svc_run __P ((void));
 
index 61ea3c1..e2e8402 100644 (file)
@@ -1,4 +1,3 @@
-/* @(#)types.h 2.3 88/08/15 4.0 RPCSRC */
 /*
  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
  * unrestricted use provided that this legend is included on all tape
@@ -27,8 +26,6 @@
  * 2550 Garcia Avenue
  * Mountain View, California  94043
  */
-/*      @(#)types.h 1.18 87/07/24 SMI      */
-
 /* fixincludes should not add extern "C" to this file */
 /*
  * Rpc additions to <sys/types.h>
 
 typedef int bool_t;
 typedef int enum_t;
+/* This needs to be changed to uint32_t in the future */
+typedef unsigned long rpcprog_t;
+typedef unsigned long rpcvers_t;
+typedef unsigned long rpcproc_t;
+typedef unsigned long rpcprot_t;
+typedef unsigned long rpcport_t;
 
 #define        __dontcare__    -1
 
index 75cead0..57e1435 100644 (file)
@@ -1,4 +1,3 @@
-/* @(#)rpc_commondata.c        2.1 88/07/29 4.0 RPCSRC */
 /*
  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
  * unrestricted use provided that this legend is included on all tape
@@ -6,23 +5,23 @@
  * may copy or modify Sun RPC without charge, but are not authorized
  * to license or distribute it to anyone else except as part of a product or
  * program developed by the user.
- * 
+ *
  * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
  * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- * 
+ *
  * Sun RPC is provided with no support and without any obligation on the
  * part of Sun Microsystems, Inc. to assist in its use, correction,
  * modification or enhancement.
- * 
+ *
  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
  * OR ANY PART THEREOF.
- * 
+ *
  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
  * or profits or other special, indirect and consequential damages, even if
  * Sun has been advised of the possibility of such damages.
- * 
+ *
  * Sun Microsystems, Inc.
  * 2550 Garcia Avenue
  * Mountain View, California  94043
 #include <rpc/rpc.h>
 /*
  * This file should only contain common data (global data) that is exported
- * by public interfaces 
+ * by public interfaces
  */
 struct opaque_auth _null_auth;
-#ifdef FD_SETSIZE
 fd_set svc_fdset;
-#else
-int svc_fds;
-#endif /* def FD_SETSIZE */
 struct rpc_createerr rpc_createerr;
+struct pollfd *svc_pollfd;
+int svc_max_pollfd;
index da97098..59b902d 100644 (file)
@@ -1,4 +1,3 @@
-/* @(#)svc.c   2.4 88/08/11 4.0 RPCSRC; from 1.44 88/02/08 SMI */
 /*
  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
  * unrestricted use provided that this legend is included on all tape
  * 2550 Garcia Avenue
  * Mountain View, California  94043
  */
-#if !defined(lint) && defined(SCCSIDS)
-static char sccsid[] = "@(#)svc.c 1.41 87/10/13 Copyr 1984 Sun Micro";
-#endif
-
 /*
  * svc.c, Server-side remote procedure call interface.
  *
@@ -42,108 +37,121 @@ static char sccsid[] = "@(#)svc.c 1.41 87/10/13 Copyr 1984 Sun Micro";
  */
 
 #include <errno.h>
+#include <unistd.h>
 #include <rpc/rpc.h>
 #include <rpc/svc.h>
 #include <rpc/pmap_clnt.h>
+#include <sys/poll.h>
 
-#ifndef errno
-extern int errno;
-#endif
-
-#ifdef FD_SETSIZE
 static SVCXPRT **xports;
-#else
-#define NOFILE 32
-
-static SVCXPRT *xports[NOFILE];
-#endif /* def FD_SETSIZE */
 
 #define NULL_SVC ((struct svc_callout *)0)
 #define        RQCRED_SIZE     400     /* this size is excessive */
 
-/*
- * The services list
- * Each entry represents a set of procedures (an rpc program).
- * The dispatch routine takes request structs and runs the
- * appropriate procedure.
- */
-static struct svc_callout
-  {
-    struct svc_callout *sc_next;
-    u_long sc_prog;
-    u_long sc_vers;
-    void (*sc_dispatch) (struct svc_req *, SVCXPRT *);
-  }
- *svc_head;
-
-static struct svc_callout *svc_find (u_long, u_long, struct svc_callout **);
+/* The services list
+   Each entry represents a set of procedures (an rpc program).
+   The dispatch routine takes request structs and runs the
+   appropriate procedure. */
+static struct svc_callout {
+  struct svc_callout *sc_next;
+  rpcprog_t sc_prog;
+  rpcvers_t sc_vers;
+  void (*sc_dispatch) (struct svc_req *, SVCXPRT *);
+} *svc_head;
 
 /* ***************  SVCXPRT related stuff **************** */
 
-/*
- * Activate a transport handle.
- */
+/* Activate a transport handle. */
 void
 xprt_register (SVCXPRT *xprt)
 {
   register int sock = xprt->xp_sock;
+  register int i;
 
-#ifdef FD_SETSIZE
   if (xports == NULL)
     {
-      xports = (SVCXPRT **)
-       mem_alloc (FD_SETSIZE * sizeof (SVCXPRT *));
+      xports = (SVCXPRT **) malloc (_rpc_dtablesize () * sizeof (SVCXPRT *));
+      if (xports == NULL) /* Don´t add handle */
+       return;
     }
+
   if (sock < _rpc_dtablesize ())
     {
       xports[sock] = xprt;
-      FD_SET (sock, &svc_fdset);
+      if (sock < FD_SETSIZE)
+       FD_SET (sock, &svc_fdset);
+
+      /* Check if we have an empty slot */
+      for (i = 0; i < svc_max_pollfd; ++i)
+       if (svc_pollfd[i].fd == -1)
+         {
+           svc_pollfd[i].fd = sock;
+           svc_pollfd[i].events = (POLLIN | POLLPRI |
+                                   POLLRDNORM | POLLRDBAND);
+           return;
+         }
+
+      ++svc_max_pollfd;
+      svc_pollfd = realloc (svc_pollfd,
+                           sizeof (struct pollfd) * svc_max_pollfd);
+      if (svc_pollfd == NULL) /* Out of memory */
+       return;
+
+      svc_pollfd[svc_max_pollfd - 1].fd = sock;
+      svc_pollfd[svc_max_pollfd - 1].events = (POLLIN | POLLPRI |
+                                              POLLRDNORM | POLLRDBAND);
     }
-#else
-  if (sock < NOFILE)
-    {
-      xports[sock] = xprt;
-      svc_fds |= (1 << sock);
-    }
-#endif /* def FD_SETSIZE */
-
 }
 
-/*
- * De-activate a transport handle.
- */
+/* De-activate a transport handle. */
 void
-xprt_unregister (xprt)
-     SVCXPRT *xprt;
+xprt_unregister (SVCXPRT *xprt)
 {
   register int sock = xprt->xp_sock;
+  register int i;
 
-#ifdef FD_SETSIZE
   if ((sock < _rpc_dtablesize ()) && (xports[sock] == xprt))
     {
       xports[sock] = (SVCXPRT *) 0;
-      FD_CLR (sock, &svc_fdset);
-    }
-#else
-  if ((sock < NOFILE) && (xports[sock] == xprt))
-    {
-      xports[sock] = (SVCXPRT *) 0;
-      svc_fds &= ~(1 << sock);
+
+      if (sock < FD_SETSIZE)
+       FD_CLR (sock, &svc_fdset);
+
+      for (i = 0; i < svc_max_pollfd; ++i)
+       if (svc_pollfd[i].fd == sock)
+         svc_pollfd[i].fd = -1;
     }
-#endif /* def FD_SETSIZE */
 }
 
 
 /* ********************** CALLOUT list related stuff ************* */
 
-/*
- * Add a service program to the callout list.
- * The dispatch routine will be called when a rpc request for this
- * program number comes in.
- */
+/* Search the callout list for a program number, return the callout
+   struct. */
+static struct svc_callout *
+svc_find (rpcprog_t prog, rpcvers_t vers, struct svc_callout **prev)
+{
+  register struct svc_callout *s, *p;
+
+  p = NULL_SVC;
+  for (s = svc_head; s != NULL_SVC; s = s->sc_next)
+    {
+      if ((s->sc_prog == prog) && (s->sc_vers == vers))
+       goto done;
+      p = s;
+    }
+done:
+  *prev = p;
+  return s;
+}
+
+/* Add a service program to the callout list.
+   The dispatch routine will be called when a rpc request for this
+   program number comes in. */
 bool_t
-svc_register (SVCXPRT *xprt, u_long prog, u_long vers,
-             void (*dispatch) (struct svc_req *, SVCXPRT *), u_long protocol)
+svc_register (SVCXPRT * xprt, rpcprog_t prog, rpcvers_t vers,
+             void (*dispatch) (struct svc_req *, SVCXPRT *),
+             rpcproc_t protocol)
 {
   struct svc_callout *prev;
   register struct svc_callout *s;
@@ -156,81 +164,49 @@ svc_register (SVCXPRT *xprt, u_long prog, u_long vers,
     }
   s = (struct svc_callout *) mem_alloc (sizeof (struct svc_callout));
   if (s == (struct svc_callout *) 0)
-    {
-      return FALSE;
-    }
+    return FALSE;
+
   s->sc_prog = prog;
   s->sc_vers = vers;
   s->sc_dispatch = dispatch;
   s->sc_next = svc_head;
   svc_head = s;
+
 pmap_it:
   /* now register the information with the local binder service */
   if (protocol)
-    {
-      return pmap_set (prog, vers, protocol, xprt->xp_port);
-    }
+    return pmap_set (prog, vers, protocol, xprt->xp_port);
+
   return TRUE;
 }
 
-/*
- * Remove a service program from the callout list.
- */
+/* Remove a service program from the callout list. */
 void
-svc_unregister (prog, vers)
-     u_long prog;
-     u_long vers;
+svc_unregister (rpcprog_t prog, rpcvers_t vers)
 {
   struct svc_callout *prev;
   register struct svc_callout *s;
 
   if ((s = svc_find (prog, vers, &prev)) == NULL_SVC)
     return;
+
   if (prev == NULL_SVC)
-    {
-      svc_head = s->sc_next;
-    }
+    svc_head = s->sc_next;
   else
-    {
-      prev->sc_next = s->sc_next;
-    }
+    prev->sc_next = s->sc_next;
+
   s->sc_next = NULL_SVC;
   mem_free ((char *) s, (u_int) sizeof (struct svc_callout));
   /* now unregister the information with the local binder service */
-  (void) pmap_unset (prog, vers);
-}
-
-/*
- * Search the callout list for a program number, return the callout
- * struct.
- */
-static struct svc_callout *
-svc_find (u_long prog, u_long vers, struct svc_callout **prev)
-{
-  register struct svc_callout *s, *p;
-
-  p = NULL_SVC;
-  for (s = svc_head; s != NULL_SVC; s = s->sc_next)
-    {
-      if ((s->sc_prog == prog) && (s->sc_vers == vers))
-       goto done;
-      p = s;
-    }
-done:
-  *prev = p;
-  return s;
+  pmap_unset (prog, vers);
 }
 
 /* ******************* REPLY GENERATION ROUTINES  ************ */
 
-/*
- * Send a reply to an rpc request
- */
+/* Send a reply to an rpc request */
 bool_t
-svc_sendreply (xprt, xdr_results, xdr_location)
-     register SVCXPRT *xprt;
-     xdrproc_t xdr_results;
-     caddr_t xdr_location;
+svc_sendreply (register SVCXPRT *xprt, xdrproc_t xdr_results,
+              caddr_t xdr_location)
 {
   struct rpc_msg rply;
 
@@ -243,12 +219,9 @@ svc_sendreply (xprt, xdr_results, xdr_location)
   return SVC_REPLY (xprt, &rply);
 }
 
-/*
- * No procedure error reply
- */
+/* No procedure error reply */
 void
-svcerr_noproc (xprt)
-     register SVCXPRT *xprt;
+svcerr_noproc (register SVCXPRT *xprt)
 {
   struct rpc_msg rply;
 
@@ -259,12 +232,9 @@ svcerr_noproc (xprt)
   SVC_REPLY (xprt, &rply);
 }
 
-/*
- * Can't decode args error reply
- */
+/* Can't decode args error reply */
 void
-svcerr_decode (xprt)
-     register SVCXPRT *xprt;
+svcerr_decode (register SVCXPRT *xprt)
 {
   struct rpc_msg rply;
 
@@ -275,12 +245,9 @@ svcerr_decode (xprt)
   SVC_REPLY (xprt, &rply);
 }
 
-/*
- * Some system error
- */
+/* Some system error */
 void
-svcerr_systemerr (xprt)
-     register SVCXPRT *xprt;
+svcerr_systemerr (register SVCXPRT *xprt)
 {
   struct rpc_msg rply;
 
@@ -291,13 +258,9 @@ svcerr_systemerr (xprt)
   SVC_REPLY (xprt, &rply);
 }
 
-/*
- * Authentication error reply
- */
+/* Authentication error reply */
 void
-svcerr_auth (xprt, why)
-     SVCXPRT *xprt;
-     enum auth_stat why;
+svcerr_auth (SVCXPRT *xprt, enum auth_stat why)
 {
   struct rpc_msg rply;
 
@@ -308,23 +271,16 @@ svcerr_auth (xprt, why)
   SVC_REPLY (xprt, &rply);
 }
 
-/*
- * Auth too weak error reply
- */
+/* Auth too weak error reply */
 void
-svcerr_weakauth (xprt)
-     SVCXPRT *xprt;
+svcerr_weakauth (SVCXPRT *xprt)
 {
-
   svcerr_auth (xprt, AUTH_TOOWEAK);
 }
 
-/*
- * Program unavailable error reply
- */
+/* Program unavailable error reply */
 void
-svcerr_noprog (xprt)
-     register SVCXPRT *xprt;
+svcerr_noprog (register SVCXPRT *xprt)
 {
   struct rpc_msg rply;
 
@@ -335,14 +291,10 @@ svcerr_noprog (xprt)
   SVC_REPLY (xprt, &rply);
 }
 
-/*
- * Program version mismatch error reply
- */
+/* Program version mismatch error reply */
 void
-svcerr_progvers (xprt, low_vers, high_vers)
-     register SVCXPRT *xprt;
-     u_long low_vers;
-     u_long high_vers;
+svcerr_progvers (register SVCXPRT *xprt, rpcvers_t low_vers,
+                rpcvers_t high_vers)
 {
   struct rpc_msg rply;
 
@@ -376,127 +328,139 @@ svcerr_progvers (xprt, low_vers, high_vers)
 void
 svc_getreq (int rdfds)
 {
-#ifdef FD_SETSIZE
   fd_set readfds;
 
   FD_ZERO (&readfds);
   readfds.fds_bits[0] = rdfds;
   svc_getreqset (&readfds);
-#else
-  int readfds = rdfds & svc_fds;
+}
 
-  svc_getreqset (&readfds);
-#endif /* def FD_SETSIZE */
+void
+svc_getreqset (fd_set *readfds)
+{
+  register u_int32_t mask;
+  register u_int32_t *maskp;
+  register int setsize;
+  register int sock;
+  register int bit;
+
+  setsize = _rpc_dtablesize ();
+  maskp = (u_int32_t *) readfds->fds_bits;
+  for (sock = 0; sock < setsize; sock += 32)
+    for (mask = *maskp++; (bit = ffs (mask)); mask ^= (1 << (bit - 1)))
+      svc_getreq_common (sock + bit - 1);
 }
 
 void
-svc_getreqset (readfds)
-#ifdef FD_SETSIZE
-     fd_set *readfds;
+svc_getreq_poll (struct pollfd *pfdp, int pollretval)
 {
-#else
-     int *readfds;
+  register int i;
+  register int fds_found;
+
+  for (i = fds_found = 0; i < svc_max_pollfd && fds_found < pollretval; ++i)
+    {
+      register struct pollfd *p = &pfdp[i];
+
+      if (p->fd != -1 && p->revents)
+       {
+         /* fd has input waiting */
+         ++fds_found;
+
+         if (p->revents & POLLNVAL)
+           xprt_unregister (p->fd);
+         else
+           svc_getreq_common (p->fd);
+       }
+    }
+}
+
+
+void
+svc_getreq_common (const int fd)
 {
-  int readfds_local = *readfds;
-#endif /* def FD_SETSIZE */
   enum xprt_stat stat;
   struct rpc_msg msg;
-  int prog_found;
-  u_long low_vers;
-  u_long high_vers;
-  struct svc_req r;
   register SVCXPRT *xprt;
-  register u_long mask;
-  register int bit;
-  register u_int32_t *maskp;
-  register int setsize;
-  register int sock;
   char cred_area[2 * MAX_AUTH_BYTES + RQCRED_SIZE];
   msg.rm_call.cb_cred.oa_base = cred_area;
   msg.rm_call.cb_verf.oa_base = &(cred_area[MAX_AUTH_BYTES]);
-  r.rq_clntcred = &(cred_area[2 * MAX_AUTH_BYTES]);
 
+  xprt = xports[fd];
+  /* Do we control fd? */
+  if (xprt == NULL)
+     return;
 
-#ifdef FD_SETSIZE
-  setsize = _rpc_dtablesize ();
-  maskp = (u_int32_t *) readfds->fds_bits;
-  for (sock = 0; sock < setsize; sock += 32)
-    {
-      for (mask = *maskp++; (bit = ffs (mask)); mask ^= (1 << (bit - 1)))
-       {
-         /* sock has input waiting */
-         xprt = xports[sock + bit - 1];
-#else
-  for (sock = 0; readfds_local != 0; sock++, readfds_local >>= 1)
+  /* now receive msgs from xprtprt (support batch calls) */
+  do
     {
-      if ((readfds_local & 1) != 0)
+      if (SVC_RECV (xprt, &msg))
        {
-         /* sock has input waiting */
-         xprt = xports[sock];
-#endif /* def FD_SETSIZE */
-         if (xprt == NULL)
-           /* But do we control sock? */
-           continue;
-
-         /* now receive msgs from xprtprt (support batch calls) */
-         do
+         /* now find the exported program and call it */
+         struct svc_callout *s;
+         struct svc_req r;
+         enum auth_stat why;
+         rpcvers_t low_vers;
+         rpcvers_t high_vers;
+         int prog_found;
+
+         r.rq_clntcred = &(cred_area[2 * MAX_AUTH_BYTES]);
+         r.rq_xprt = xprt;
+         r.rq_prog = msg.rm_call.cb_prog;
+         r.rq_vers = msg.rm_call.cb_vers;
+         r.rq_proc = msg.rm_call.cb_proc;
+         r.rq_cred = msg.rm_call.cb_cred;
+
+         /* first authenticate the message */
+         /* Check for null flavor and bypass these calls if possible */
+
+         if (msg.rm_call.cb_cred.oa_flavor == AUTH_NULL)
            {
-             if (SVC_RECV (xprt, &msg))
-               {
+             r.rq_xprt->xp_verf.oa_flavor = _null_auth.oa_flavor;
+             r.rq_xprt->xp_verf.oa_length = 0;
+           }
+         else if ((why = _authenticate (&r, &msg)) != AUTH_OK)
+           {
+             svcerr_auth (xprt, why);
+             goto call_done;
+           }
+
+         /* now match message with a registered service */
+         prog_found = FALSE;
+         low_vers = 0 - 1;
+         high_vers = 0;
 
-                 /* now find the exported program and call it */
-                 register struct svc_callout *s;
-                 enum auth_stat why;
-
-                 r.rq_xprt = xprt;
-                 r.rq_prog = msg.rm_call.cb_prog;
-                 r.rq_vers = msg.rm_call.cb_vers;
-                 r.rq_proc = msg.rm_call.cb_proc;
-                 r.rq_cred = msg.rm_call.cb_cred;
-                 /* first authenticate the message */
-                 if ((why = _authenticate (&r, &msg)) != AUTH_OK)
+         for (s = svc_head; s != NULL_SVC; s = s->sc_next)
+           {
+             if (s->sc_prog == r.rq_prog)
+               {
+                 if (s->sc_vers == r.rq_vers)
                    {
-                     svcerr_auth (xprt, why);
+                     (*s->sc_dispatch) (&r, xprt);
                      goto call_done;
                    }
-                 /* now match message with a registered service */
-                 prog_found = FALSE;
-                 low_vers = 0 - 1;
-                 high_vers = 0;
-                 for (s = svc_head; s != NULL_SVC; s = s->sc_next)
-                   {
-                     if (s->sc_prog == r.rq_prog)
-                       {
-                         if (s->sc_vers == r.rq_vers)
-                           {
-                             (*s->sc_dispatch) (&r, xprt);
-                             goto call_done;
-                           }   /* found correct version */
-                         prog_found = TRUE;
-                         if (s->sc_vers < low_vers)
-                           low_vers = s->sc_vers;
-                         if (s->sc_vers > high_vers)
-                           high_vers = s->sc_vers;
-                       }       /* found correct program */
-                   }
-                 /*
-                  * if we got here, the program or version
-                  * is not served ...
-                  */
-                 if (prog_found)
-                   svcerr_progvers (xprt, low_vers, high_vers);
-                 else
-                   svcerr_noprog (xprt);
-                 /* Fall through to ... */
-               }
-           call_done:
-             if ((stat = SVC_STAT (xprt)) == XPRT_DIED)
-               {
-                 SVC_DESTROY (xprt);
-                 break;
+                 /* found correct version */
+                 prog_found = TRUE;
+                 if (s->sc_vers < low_vers)
+                   low_vers = s->sc_vers;
+                 if (s->sc_vers > high_vers)
+                   high_vers = s->sc_vers;
                }
+             /* found correct program */
            }
-         while (stat == XPRT_MOREREQS);
+         /* if we got here, the program or version
+            is not served ... */
+         if (prog_found)
+           svcerr_progvers (xprt, low_vers, high_vers);
+         else
+           svcerr_noprog (xprt);
+         /* Fall through to ... */
+       }
+    call_done:
+      if ((stat = SVC_STAT (xprt)) == XPRT_DIED)
+       {
+         SVC_DESTROY (xprt);
+         break;
        }
     }
+  while (stat == XPRT_MOREREQS);
 }
index 799c012..e6ffb0f 100644 (file)
@@ -1,8 +1,3 @@
-/* @(#)svc_run.c       2.1 88/07/29 4.0 RPCSRC */
-#if !defined(lint) && defined(SCCSIDS)
-static char sccsid[] = "@(#)svc_run.c 1.1 87/10/13 Copyr 1984 Sun Micro";
-#endif
-
 /*
  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
  * unrestricted use provided that this legend is included on all tape
@@ -31,60 +26,58 @@ static char sccsid[] = "@(#)svc_run.c 1.1 87/10/13 Copyr 1984 Sun Micro";
  * 2550 Garcia Avenue
  * Mountain View, California  94043
  */
-
 /*
  * This is the rpc server side idle loop
  * Wait for input, call server program.
  */
+
 #include <errno.h>
+#include <unistd.h>
 #include <libintl.h>
+#include <sys/poll.h>
 #include <rpc/rpc.h>
 
-static int svc_stop;
-
 /* This function can be used as a signal handler to terminate the
    server loop.  */
 void
 svc_exit (void)
 {
-  svc_stop = 1;
+  free (svc_pollfd);
+  svc_pollfd = NULL;
+  svc_max_pollfd = 0;
 }
 
 void
 svc_run (void)
 {
-#ifdef FD_SETSIZE
-  fd_set readfds;
-#else
-  int readfds;
-#endif /* def FD_SETSIZE */
-
-  svc_stop = 0;
+  int i;
 
   for (;;)
     {
-      if (svc_stop)
+      struct pollfd *my_pollfd;
+
+      if (svc_max_pollfd == 0 && svc_pollfd == NULL)
        return;
 
-#ifdef FD_SETSIZE
-      readfds = svc_fdset;
-#else
-      readfds = svc_fds;
-#endif /* def FD_SETSIZE */
-      switch (__select (_rpc_dtablesize (), &readfds, (fd_set *)NULL,
-                       (fd_set *)NULL, (struct timeval *) 0))
+      my_pollfd = malloc (sizeof (struct pollfd) * svc_max_pollfd);
+      for (i = 0; i < svc_max_pollfd; ++i)
+       {
+         my_pollfd[i].fd = svc_pollfd[i].fd;
+         my_pollfd[i].events = svc_pollfd[i].events;
+         my_pollfd[i].revents = 0;
+       }
+
+      switch (i = __poll (my_pollfd, svc_max_pollfd, -1))
        {
        case -1:
          if (errno == EINTR)
-           {
-             continue;
-           }
-         perror (_("svc_run: - select failed"));
+           continue;
+         perror (_("svc_run: - poll failed"));
          return;
        case 0:
          continue;
        default:
-         svc_getreqset (&readfds);
+         svc_getreq_poll (my_pollfd, i);
        }
     }
 }
index 8100b0d..d79087b 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1999 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
 #include <features.h>
 
 /* Return number of configured processors.  */
-extern int __get_nprocs_conf __P ((void));
 extern int get_nprocs_conf __P ((void));
 
 /* Return number of available processors.  */
-extern int __get_nprocs __P ((void));
 extern int get_nprocs __P ((void));
 
 
 /* Return number of physical pages of memory in the system.  */
-extern int __get_phys_pages __P ((void));
 extern int get_phys_pages __P ((void));
 
 /* Return number of available physical pages of memory in the system.  */
-extern int __get_avphys_pages __P ((void));
 extern int get_avphys_pages __P ((void));
 
 #endif /* sys/sysinfo.h */
diff --git a/sysdeps/unix/sysv/linux/alpha/getsysstats.c b/sysdeps/unix/sysv/linux/alpha/getsysstats.c
new file mode 100644 (file)
index 0000000..8588903
--- /dev/null
@@ -0,0 +1,54 @@
+/* Determine various system internal values, Linux/Alpha version.
+   Copyright (C) 1999 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Andreas Schwab <schwab@suse.de>
+
+   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.  */
+
+
+/* We need to define a special parser for /proc/cpuinfo.  */
+#define GET_NPROCS_PARSER(FP, BUFFER, RESULT)                            \
+  do                                                                     \
+    {                                                                    \
+      (RESULT) = 0;                                                      \
+      /* Find the line that contains the information about the number of  \
+        active cpus.  We don't have to fear extremely long lines since   \
+        the kernel will not generate them.  8192 bytes are really        \
+        enough.  */                                                      \
+      while (fgets_unlocked (BUFFER, sizeof (BUFFER), FP) != NULL)       \
+       if (sscanf (BUFFER, "CPUs probed %*d active %d", &(RESULT)) == 1) \
+         break;                                                          \
+    }                                                                    \
+  while (0)
+
+
+/* On the Alpha we can distinguish between the number of configured and
+   active cpus.  */
+#define GET_NPROCS_CONF_PARSER(FP, BUFFER, RESULT)                      \
+  do                                                                    \
+    {                                                                   \
+      (RESULT) = 0;                                                     \
+      /* Find the line that contains the information about the number of \
+        probed cpus.  We don't have to fear extremely long lines since  \
+        the kernel will not generate them.  8192 bytes are really       \
+        enough.  */                                                     \
+      while (fgets_unlocked ((BUFFER), sizeof (BUFFER), (FP)) != NULL)  \
+       if (sscanf (buffer, "CPUs probed %d", &(RESULT)) == 1)           \
+         break;                                                         \
+    }                                                                   \
+  while (0)
+
+#include <sysdeps/unix/sysv/linux/getsysstats.c>
index 58f55ac..be23753 100644 (file)
@@ -1,5 +1,5 @@
 /* Determine various system internal values, Linux version.
-   Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
 
@@ -67,6 +67,25 @@ get_proc_path (char *buffer, size_t bufsize)
 
    But not all systems have support for the /proc filesystem.  If it
    is not available we simply return 1 since there is no way.  */
+
+/* Other architectures use different formats for /proc/cpuinfo.  This
+   provides a hook for alternative parsers.  */
+#ifndef GET_NPROCS_PARSER
+# define GET_NPROCS_PARSER(FP, BUFFER, RESULT)                         \
+  do                                                                   \
+    {                                                                  \
+      (RESULT) = 0;                                                    \
+      /* Read all lines and count the lines starting with the string   \
+        "processor".  We don't have to fear extremely long lines since \
+        the kernel will not generate them.  8192 bytes are really      \
+        enough.  */                                                    \
+      while (fgets_unlocked (BUFFER, sizeof (BUFFER), FP) != NULL)     \
+       if (strncmp (BUFFER, "processor", 9) == 0)                      \
+         ++(RESULT);                                                   \
+    }                                                                  \
+  while (0)
+#endif
+
 int
 __get_nprocs ()
 {
@@ -89,15 +108,7 @@ __get_nprocs ()
       fp = fopen (proc_cpuinfo, "r");
       if (fp != NULL)
        {
-         result = 0;
-         /* Read all lines and count the lines starting with the
-            string "processor".  We don't have to fear extremely long
-            lines since the kernel will not generate them.  8192
-            bytes are really enough.  */
-         while (fgets_unlocked (buffer, sizeof buffer, fp) != NULL)
-           if (strncmp (buffer, "processor", 9) == 0)
-             ++result;
-
+         GET_NPROCS_PARSER (fp, buffer, result);
          fclose (fp);
        }
     }
@@ -106,12 +117,46 @@ __get_nprocs ()
 }
 weak_alias (__get_nprocs, get_nprocs)
 
+
+#ifdef GET_NPROCS_CONF_PARSER
+/* On some architectures it is possible to distinguish between configured
+   and active cpus.  */
+int
+__get_nprocs_conf ()
+{
+  FILE *fp;
+  char buffer[8192];
+  char *proc_path;
+  int result = 1;
+
+  /* XXX Here will come a test for the new system call.  */
+
+  /* Get mount point of proc filesystem.  */
+  proc_path = get_proc_path (buffer, sizeof buffer);
+
+  /* If we haven't found an appropriate entry return 1.  */
+  if (proc_path != NULL)
+    {
+      char *proc_cpuinfo = alloca (strlen (proc_path) + sizeof ("/cpuinfo"));
+      __stpcpy (__stpcpy (proc_cpuinfo, proc_path), "/cpuinfo");
+
+      fp = fopen (proc_cpuinfo, "r");
+      if (fp != NULL)
+       {
+         GET_NPROCS_CONF_PARSER (fp, buffer, result);
+         fclose (fp);
+       }
+    }
+
+  return result;
+}
+#else
 /* As far as I know Linux has no separate numbers for configured and
    available processors.  So make the `get_nprocs_conf' function an
    alias.  */
 strong_alias (__get_nprocs, __get_nprocs_conf)
-weak_alias (__get_nprocs, get_nprocs_conf)
-
+#endif
+weak_alias (__get_nprocs_conf, get_nprocs_conf)
 
 /* General function to get information about memory status from proc
    filesystem.  */
index dc435d6..2c17cf2 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1999 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
@@ -31,20 +31,16 @@ extern int sysinfo __P ((struct sysinfo *__info));
 
 
 /* Return number of configured processors.  */
-extern int __get_nprocs_conf __P ((void));
 extern int get_nprocs_conf __P ((void));
 
 /* Return number of available processors.  */
-extern int __get_nprocs __P ((void));
 extern int get_nprocs __P ((void));
 
 
 /* Return number of physical pages of memory in the system.  */
-extern int __get_phys_pages __P ((void));
 extern int get_phys_pages __P ((void));
 
 /* Return number of available physical pages of memory in the system.  */
-extern int __get_avphys_pages __P ((void));
 extern int get_avphys_pages __P ((void));
 
 __END_DECLS