glibc/sysdeps/unix/sysv/linux/getsysstats.c
Ulrich Drepper 46ec036de6 update from main archive 961020
Mon Oct 21 01:32:36 1996  Ulrich Drepper  <drepper@cygnus.com>

	* elf/rtld.c (dl_main): Move initialization of `_dl_starting_up'
	to beginning of function.  So libc functions can use this flag.
	* sysdeps/generic/_strerror.c: Don't use dgettext for message
	translation while `_dl_starting_up' is nonzero.

	* elf/dl-deps.c (_dl_map_object_deps): Add new parameter
 	TRACE_MODE.
	Pass parameter value to _dl_map_object.
	* elf/dl-load (_dl_map_object): Add new parameter TRACE_MODE.
	If TRACE_MODE is nonzero don#t signal error when shared lib
	is not found.  Instead create fake entry for link map.
	* dl-open.c (dl-open): Pass 0 for new argument to _dl_map_object.
	* dl-runtime.c (_dl_object_relocation_scope): Pass 0 for new
	argument to _dl_map_object_deps.
	* elf/link.h: Add new parameter TRACE_MODE for prototypes of
	_dl_map_object and _dl_map_object_deps.
	* elf/rtld.c (dl_main): Pass 0 for new argument to _dl_map_object
	and _dl_map_object_deps.
	When mode == trace test for l_opencount == 0 before printing
	link information since this means the lib is not found.

Sun Oct 20 22:19:58 1996  Ulrich Drepper  <drepper@cygnus.com>

	* rpm/template: Add INSTALL to %doc line to follow copyright
	restrictions which demand the distribution of the copyright
	messages in INSTALL even for binary distributions.

	* features.h: Rename to...
	* features.h.in: ...this.  Change value of __GNU_LIBRARY__ to 2
	(for major version numberof package) and add __GNU_LIBRARY_MINOR__
	and __GNU_LIBRARY_INTERFACE__.
	* Makefile ($(objpfx)features.h): New rule to generate features.h
	from template features.h.in.

	* sysdeps/unix/sysv/linux/getsysstats.c: Include <paths.h>.

Sun Oct 20 00:00:13 1996  Richard Henderson  <rth@tamu.edu>

	* locale/programs/linereader.c (lr_open): Cast away const before free.
	(lr_close): Likewise.

	* misc/mntent.h: Move _PATH_MNTTAB & _PATH_MOUNTED to paths.h.
	* misc/paths.h: Move to ...
	* sysdeps/generic/paths.h: ... here.
	* paths.h: Remove.
	* sysdeps/unix/sysv/linux/paths.h: New file.  Correct _PATH_STDPATH,
	_PATH_MAILDIR, _PATH_MOUNTED, _PATH_UNIX to comply with the fsstd.

	* nss/nss_db/db-netgrp.h: Include <string.h>.

	* stdio-common/psignal.c: De-ansidecl-ify.  Allow NULL entries in
	_sys_siglist, which result in the "Unknown signal" message.
	* string/strsignal.c: Likewise.
	* sysdeps/generic/Makefile [stdio-common]: If $(inhibit-siglist),
	don't auto-generate siglist.c.
	* sysdeps/unix/sysv/linux/Makefile [stdio-common]: Set inhibit-siglist.
	* sysdeps/unix/sysv/linux/siglist.c: New file.  Not needing to
	autogenerate makes bootstrapping and cross-compiling much easier.
	* sysdeps/unix/sysv/linux/siglist.h: New file.

	* stdlib/longlong.h: Prototype __udiv_qrnnd.

	* sysdeps/unix/sysv/linux/alpha/Makefile (sysdep_headers): Remove
	sys/io.h.  It is already added in .../linux/Makefile.

	* sysdeps/unix/sysv/linux/alpha/sigaction.h: New file.
	* sysdeps/unix/sysv/linux/alpha/signum.h: New file.
	* sysdeps/unix/sysv/linux/alpha/statbuf.h: New file.

Sun Oct 20 17:17:12 1996  Ulrich Drepper  <drepper@cygnus.com>

	Add implementation of POSIX.1g function getaddrinfo.
	* posix/Makefile (routines): Add getaddrinfo.
	* sysdeps/posix/getaddrinfo.c.: New file.  Add implementation by
 	Craig Metz.
	* sysdeps/stub/getaddrinfo.c: New file.  Stub implementation.
	* resolv/netdb.h [__USE_POSIX]: Add getaddrinfo prototypes and
	related constants and structures.

Sun Oct 20 13:02:34 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/stub/lockfile.c: Rename functions to __internal_*.
	Make all old names weak alises so that they can be replaced
	by libpthread.

	* stdio-common/vfprintf.c: Only declare __flockfile and __funlockfile
	for !USE_IN_LIBIO.
	[USE_IN_LIBIO]: Call _IO_flockfile and _IO_funlockfile instead of
	__flockfile and __funlockfile.
	Reported by NIIBE Yutaka.

	* crypt/md5.c: Change form of copyright message according to GNITS
	rules.
	Add warning for requirement on RESBUF parameter for `md5_finish_ctx'
	and `md5_read_ctx' function.
	* crypt/md5.h: Likewise.

	* grp/testgrp.c: Don't use perror for error cases since getgr* and
	getpw* functions do not return usable error codes.

Sun Oct 19 23:05:32 1996  Jim Meyering  <meyering@asic.sc.ti.com>

	* crypt/md5.c (md5_process_bytes): Used casting for pointer
 	arithmetic.

Sun Oct 20 03:53:23 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sunrpc/Makefile (others): Remove portmap here, too.
1996-10-21 01:26:31 +00:00

199 lines
5.9 KiB
C

/* getsysstats - Determine various system internal values, Linux version.
Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
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 <errno.h>
#include <mntent.h>
#include <paths.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/sysinfo.h>
/* Determine the path to the /proc filesystem if available. */
static char *
get_proc_path (char *buffer, size_t bufsize)
{
FILE *fp;
struct mntent mount_point;
struct mntent *entry;
char *result = NULL;
/* First find the mount point of the proc filesystem. */
fp = __setmntent (_PATH_MNTTAB, "r");
if (fp != NULL)
{
while ((entry = __getmntent_r (fp, &mount_point, buffer, bufsize))
!= NULL)
if (strcmp (mount_point.mnt_type, "proc") == 0)
{
result = mount_point.mnt_dir;
break;
}
__endmntent (fp);
}
return result;
}
/* How we can determine the number of available processors depends on
the configuration. There is currently (as of version 2.0.21) no
system call to determine the number. It is planned for the 2.1.x
series to add this, though.
One possibility to implement it for systems using Linux 2.0 is to
examine the pseudo file /proc/meminfo. Here we have one entry for
each processor.
But not all systems have support for the /proc filesystem. If it
is not available we simply return 1 since there is no way. */
int
__get_nprocs ()
{
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)
{
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 (buffer, sizeof buffer, fp) != NULL)
if (strncmp (buffer, "processor", 9) == 0)
++result;
fclose (fp);
}
}
return result;
}
weak_alias (__get_nprocs, get_nprocs)
/* 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)
/* General function to get information about memory status from proc
filesystem. */
static int
phys_pages_info (const char *format)
{
FILE *fp;
char buffer[8192];
char *proc_path;
int result = -1;
/* 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_meminfo = alloca (strlen (proc_path) + sizeof ("/meminfo"));
__stpcpy (__stpcpy (proc_meminfo, proc_path), "/meminfo");
fp = fopen (proc_meminfo, "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 (buffer, sizeof buffer, fp) != NULL)
if (sscanf (buffer, format, &result) == 1)
{
result /= (__getpagesize () / 1024);
break;
}
fclose (fp);
}
}
if (result == -1)
/* We cannot get the needed value: signal an error. */
__set_errno (ENOSYS);
return result;
}
/* Return the number of pages of physical memory in the system. There
is currently (as of version 2.0.21) no system call to determine the
number. It is planned for the 2.1.x series to add this, though.
One possibility to implement it for systems using Linux 2.0 is to
examine the pseudo file /proc/cpuinfo. Here we have one entry for
each processor.
But not all systems have support for the /proc filesystem. If it
is not available we return -1 as an error signal. */
int
__get_phys_pages ()
{
/* XXX Here will come a test for the new system call. */
return phys_pages_info ("MemTotal: %d kB");
}
weak_alias (__get_phys_pages, get_phys_pages)
/* Return the number of available pages of physical memory in the
system. There is currently (as of version 2.0.21) no system call
to determine the number. It is planned for the 2.1.x series to add
this, though.
One possibility to implement it for systems using Linux 2.0 is to
examine the pseudo file /proc/cpuinfo. Here we have one entry for
each processor.
But not all systems have support for the /proc filesystem. If it
is not available we return -1 as an error signal. */
int
__get_avphys_pages ()
{
/* XXX Here will come a test for the new system call. */
return phys_pages_info ("MemFree: %d kB");
}
weak_alias (__get_avphys_pages, get_avphys_pages)