diff options
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/generic/putenv.c | 55 | ||||
-rw-r--r-- | sysdeps/generic/setenv.c | 92 | ||||
-rw-r--r-- | sysdeps/stub/setenv.c | 19 | ||||
-rw-r--r-- | sysdeps/stub/timebits.h | 49 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/timebits.h | 41 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/errnos.h | 30 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/resourcebits.h | 186 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/timebits.h | 49 |
8 files changed, 412 insertions, 109 deletions
diff --git a/sysdeps/generic/putenv.c b/sysdeps/generic/putenv.c index d8258cf270..e5031c4285 100644 --- a/sysdeps/generic/putenv.c +++ b/sysdeps/generic/putenv.c @@ -1,51 +1,50 @@ -/* Copyright (C) 1991, 1994, 1995 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1994, 1995, 1996 Free Software Foundation, Inc. + This file is part of the GNU C Library. -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 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. -The GNU C Library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ + 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. */ #if defined (_AIX) && !defined (__GNUC__) #pragma alloca #endif -#ifdef HAVE_CONFIG_H -#include <config.h> +#if HAVE_CONFIG_H +# include <config.h> #endif #if _LIBC || HAVE_STDLIB_H -#include <stdlib.h> +# include <stdlib.h> #endif #if _LIBC || HAVE_STRING_H -#include <string.h> +# include <string.h> #endif #if !__GNU_LIBRARY__ && !HAVE_STRCHR -#define strchr index +# define strchr index #endif #ifndef _LIBC -#ifdef HAVE_ALLOCA_H -#include <alloca.h> -#else -#ifdef __GNUC__ -#define alloca __builtin_alloca -#else +# ifdef HAVE_ALLOCA_H +# include <alloca.h> +# else +# ifdef __GNUC__ +# define alloca __builtin_alloca +# else extern char *alloca (); -#endif /* __GNUC__ */ -#endif /* HAVE_ALLOCA_H */ +# endif /* __GNUC__ */ +# endif /* HAVE_ALLOCA_H */ #endif /* _LIBC */ diff --git a/sysdeps/generic/setenv.c b/sysdeps/generic/setenv.c index 44830e9aa7..9403ccb035 100644 --- a/sysdeps/generic/setenv.c +++ b/sysdeps/generic/setenv.c @@ -1,52 +1,57 @@ /* Copyright (C) 1992, 1995, 1996 Free Software Foundation, Inc. -This file is part of the GNU C Library. + 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 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. + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ + 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. */ -#ifdef HAVE_CONFIG_H -#include <config.h> +#if HAVE_CONFIG_H +# include <config.h> #endif #include <errno.h> #if _LIBC || HAVE_STDLIB_H -#include <stdlib.h> +# include <stdlib.h> #endif #if _LIBC || HAVE_STRING_H -#include <string.h> +# include <string.h> #endif #if _LIBC || HAVE_UNISTD_H -#include <unistd.h> +# include <unistd.h> #endif #if _LIBC - 0 == 0 -#define __environ environ +# define __environ environ #endif #if _LIBC - 0 /* This lock protects against simultaneous modifications of `environ'. */ -#include <libc-lock.h> +# include <libc-lock.h> __libc_lock_define_initialized (static, envlock) -#define LOCK __libc_lock_lock (envlock) -#define UNLOCK __libc_lock_unlock (envlock) +# define LOCK __libc_lock_lock (envlock) +# define UNLOCK __libc_lock_unlock (envlock) #else -#define LOCK -#define UNLOCK +# define LOCK +# define UNLOCK #endif +/* If this variable is not a null pointer we allocated the current + environment. */ +static char **last_environ; + + int setenv (name, value, replace) const char *name; @@ -61,17 +66,17 @@ setenv (name, value, replace) LOCK; size = 0; - for (ep = __environ; *ep != NULL; ++ep) - if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=') - break; - else - ++size; + if (__environ != NULL) + for (ep = __environ; *ep != NULL; ++ep) + if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=') + break; + else + ++size; - if (*ep == NULL) + if (__environ == NULL || *ep == NULL) { - static char **last_environ; char **new_environ; - if (__environ == last_environ) + if (__environ == last_environ && __environ != NULL) /* We allocated this space; we can extend it. */ new_environ = (char **) realloc (last_environ, (size + 2) * sizeof (char *)); @@ -151,3 +156,26 @@ unsetenv (name) UNLOCK; } + +/* The `clearenv' was planned to be added to POSIX.1 but probably + never made it. Nevertheless the POSIX.9 standard (POSIX bindings + for Fortran 77) requires this function. */ +int +clearenv () +{ + LOCK; + + if (__environ == last_environ && __environ != NULL) + { + /* We allocated this environment so we can free it. */ + free (__environ); + last_environ = NULL; + } + + /* Clear the environment pointer removes the whole environment. */ + __environ = NULL; + + UNLOCK; + + return 0; +} diff --git a/sysdeps/stub/setenv.c b/sysdeps/stub/setenv.c index f318475718..a5172fab37 100644 --- a/sysdeps/stub/setenv.c +++ b/sysdeps/stub/setenv.c @@ -30,3 +30,22 @@ setenv (name, value, replace) } stub_warning (setenv) + +void +unsetenv (name) + const char *name; +{ + __set_errno (ENOSYS); +} + +stub_warning (unseenv) + + +int +clearenv (void) +{ + __set_errno (ENOSYS); + return -1; +} + +stub_warning (clearenv) diff --git a/sysdeps/stub/timebits.h b/sysdeps/stub/timebits.h index 8de0ebce8e..45185cc356 100644 --- a/sysdeps/stub/timebits.h +++ b/sysdeps/stub/timebits.h @@ -1,21 +1,36 @@ /* System-dependent timing definitions. Stub version. -Copyright (C) 1996 Free Software Foundation, Inc. -This file is part of the GNU C Library. - -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -The GNU C Library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ + Copyright (C) 1996 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + 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. */ + +#ifdef __need_timeval +# undef __need_timeval +# ifndef _STRUCT_TIMEVAL +# define _STRUCT_TIMEVAL 1 +/* A time value that is accurate to the nearest + microsecond but also has a range of years. */ +struct timeval + { + time_t tv_sec; /* Seconds. */ + time_t tv_usec; /* Microseconds. */ + }; +# endif /* struct timeval */ +#endif /* need timeval */ + #ifndef _TIMEBITS_H #define _TIMEBITS_H 1 diff --git a/sysdeps/unix/sysv/linux/alpha/timebits.h b/sysdeps/unix/sysv/linux/alpha/timebits.h new file mode 100644 index 0000000000..f777dc2aa8 --- /dev/null +++ b/sysdeps/unix/sysv/linux/alpha/timebits.h @@ -0,0 +1,41 @@ +/* System-dependent timing definitions. Linux/Alpha version. + Copyright (C) 1996 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + 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. */ + +#ifdef __need_timeval +# undef __need_timeval +# ifndef _STRUCT_TIMEVAL +# define _STRUCT_TIMEVAL 1 +/* A time value that is accurate to the nearest + microsecond but also has a range of years. */ +struct timeval + { + int tv_sec; /* Seconds. */ + int tv_usec; /* Microseconds. */ + }; +# endif /* struct timeval */ +#endif /* need timeval */ + + +#ifndef _TIMEBITS_H +#define _TIMEBITS_H 1 + +#include <asm/param.h> +#define CLOCKS_PER_SEC HZ /* XXX names not kosher */ + +#endif /* timebits.h */ diff --git a/sysdeps/unix/sysv/linux/errnos.h b/sysdeps/unix/sysv/linux/errnos.h index 4456e570f0..53a2ec053d 100644 --- a/sysdeps/unix/sysv/linux/errnos.h +++ b/sysdeps/unix/sysv/linux/errnos.h @@ -1,21 +1,21 @@ /* errnos.h - error constants. Linux specific version. -Copyright (C) 1996 Free Software Foundation, Inc. -This file is part of the GNU C Library. + Copyright (C) 1996 Free Software Foundation, Inc. + This file is part of the GNU C Library. -The GNU C Library is free software; you can redistribute it and/or -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 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. + 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. */ + 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. */ #ifdef _ERRNO_H @@ -24,13 +24,13 @@ Boston, MA 02111-1307, USA. */ # include <linux/errno.h> # ifndef __ASSEMBLER__ -# ifdef _LIBC /* We now need a declaration of the `errno' variable. */ extern int errno; /* Function to get address of global `errno' variable. */ extern int *__errno_location __P ((void)) __attribute__ ((__const__)); +# if defined _LIBC # ifdef _LIBC_REENTRANT static inline int __set_errno (int __err) diff --git a/sysdeps/unix/sysv/linux/resourcebits.h b/sysdeps/unix/sysv/linux/resourcebits.h new file mode 100644 index 0000000000..69a0cfdc7d --- /dev/null +++ b/sysdeps/unix/sysv/linux/resourcebits.h @@ -0,0 +1,186 @@ +/* Bit values & structures for resource limits. Linux version. +Copyright (C) 1994, 1996 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#include <asm/resource.h> + +/* Transmute defines to enumerations. The macro re-definitions are + necessary because some programs want to test for operating system + features with #ifdef RUSAGE_SELF. In ISO C the reflexive + definition is a no-op. */ + +/* Kinds of resource limit. */ +enum __rlimit_resource +{ + /* Per-process CPU limit, in seconds. */ + _RLIMIT_CPU = RLIMIT_CPU, +#undef RLIMIT_CPU + RLIMIT_CPU = _RLIMIT_CPU, +#define RLIMIT_CPU RLIMIT_CPU + + /* Largest file that can be created, in bytes. */ + _RLIMIT_FSIZE = RLIMIT_FSIZE, +#undef RLIMIT_FSIZE + RLIMIT_FSIZE = _RLIMIT_FSIZE, +#define RLIMIT_FSIZE RLIMIT_FSIZE + + /* Maximum size of data segment, in bytes. */ + _RLIMIT_DATA = RLIMIT_DATA, +#undef RLIMIT_DATA + RLIMIT_DATA = _RLIMIT_DATA, +#define RLIMIT_DATA RLIMIT_DATA + + /* Maximum size of stack segment, in bytes. */ + _RLIMIT_STACK = RLIMIT_STACK, +#undef RLIMIT_STACK + RLIMIT_STACK = _RLIMIT_STACK, +#define RLIMIT_STACK RLIMIT_STACK + + /* Largest core file that can be created, in bytes. */ + _RLIMIT_CORE = RLIMIT_CORE, +#undef RLIMIT_CORE + RLIMIT_CORE = _RLIMIT_CORE, +#define RLIMIT_CORE RLIMIT_CORE + + /* Largest resident set size, in bytes. + This affects swapping; processes that are exceeding their + resident set size will be more likely to have physical memory + taken from them. */ + _RLIMIT_RSS = RLIMIT_RSS, +#undef RLIMIT_RSS + RLIMIT_RSS = _RLIMIT_RSS, +#define RLIMIT_RSS RLIMIT_RSS + + /* Number of open files. */ + _RLIMIT_NOFILE = RLIMIT_NOFILE, +#undef RLIMIT_NOFILE + RLIMIT_NOFILE = _RLIMIT_NOFILE, + RLIMIT_OFILE = RLIMIT_NOFILE, /* BSD name for same. */ +#define RLIMIT_NOFILE RLIMIT_NOFILE +#define RLIMIT_OFILE RLIMIT_OFILE + + /* Address space limit (?) */ + _RLIMIT_AS = RLIMIT_AS, +#undef RLIMIT_AS + RLIMIT_AS = _RLIMIT_AS, +#define RLIMIT_AS RLIMIT_AS + + /* Number of processes. */ + _RLIMIT_NPROC = RLIMIT_NPROC, +#undef RLIMIT_NPROC + RLIMIT_NPROC = _RLIMIT_NPROC, +#define RLIMIT_NPROC RLIMIT_NPROC + + /* Locked-in-memory address space. */ + _RLIMIT_MEMLOCK = RLIMIT_MEMLOCK, +#undef RLIMIT_MEMLOCK + RLIMIT_MEMLOCK = _RLIMIT_MEMLOCK, +#define RLIMIT_MEMLOCK RLIMIT_MEMLOCK + + RLIMIT_NLIMITS = RLIM_NLIMITS, +#undef RLIM_NLIMITS + RLIM_NLIMITS = RLIMIT_NLIMITS, +#define RLIMIT_NLIMITS RLIMIT_NLIMITS +#define RLIM_NLIMITS RLIM_NLIMITS + + /* Value to indicate that there is no limit. */ + RLIM_INFINITY = (long int)(~0UL >> 1) +#define RLIM_INFINITY RLIM_INFINITY +}; + +struct rlimit +{ + /* The current (soft) limit. */ + long int rlim_cur; + /* The hard limit. */ + long int rlim_max; +}; + +/* Whose usage statistics do you want? */ +enum __rusage_who +{ + /* The calling process. */ + RUSAGE_SELF = 0, +#define RUSAGE_SELF RUSAGE_SELF + + /* All of its terminated child processes. */ + RUSAGE_CHILDREN = -1, +#define RUSAGE_CHILDREN RUSAGE_CHILDREN + + /* Both. */ + RUSAGE_BOTH = -2 +#define RUSAGE_BOTH RUSAGE_BOTH +}; + +#include <sys/time.h> /* For `struct timeval'. */ + +/* Structure which says how much of each resource has been used. */ +struct rusage +{ + /* Total amount of user time used. */ + struct timeval ru_utime; + /* Total amount of system time used. */ + struct timeval ru_stime; + /* Maximum resident set size (in kilobytes). */ + long int ru_maxrss; + /* Amount of sharing of text segment memory + with other processes (kilobyte-seconds). */ + long int ru_ixrss; + /* Amount of data segment memory used (kilobyte-seconds). */ + long int ru_idrss; + /* Amount of stack memory used (kilobyte-seconds). */ + long int ru_isrss; + /* Number of soft page faults (i.e. those serviced by reclaiming + a page from the list of pages awaiting reallocation. */ + long int ru_minflt; + /* Number of hard page faults (i.e. those that required I/O). */ + long int ru_majflt; + /* Number of times a process was swapped out of physical memory. */ + long int ru_nswap; + /* Number of input operations via the file system. Note: This + and `ru_oublock' do not include operations with the cache. */ + long int ru_inblock; + /* Number of output operations via the file system. */ + long int ru_oublock; + /* Number of IPC messages sent. */ + long int ru_msgsnd; + /* Number of IPC messages received. */ + long int ru_msgrcv; + /* Number of signals delivered. */ + long int ru_nsignals; + /* Number of voluntary context switches, i.e. because the process + gave up the process before it had to (usually to wait for some + resource to be available). */ + long int ru_nvcsw; + /* Number of involuntary context switches, i.e. a higher priority process + became runnable or the current process used up its time slice. */ + long int ru_nivcsw; +}; + +/* Priority limits. */ +#define PRIO_MIN -20 /* Minimum priority a process can have. */ +#define PRIO_MAX 20 /* Maximum priority a process can have. */ + +/* The type of the WHICH argument to `getpriority' and `setpriority', + indicating what flavor of entity the WHO argument specifies. */ +enum __priority_which +{ + PRIO_PROCESS = 0, /* WHO is a process ID. */ + PRIO_PGRP = 1, /* WHO is a process group ID. */ + PRIO_USER = 2 /* WHO is a user ID. */ +}; diff --git a/sysdeps/unix/sysv/linux/timebits.h b/sysdeps/unix/sysv/linux/timebits.h index b5eaec91b0..8aed9e94df 100644 --- a/sysdeps/unix/sysv/linux/timebits.h +++ b/sysdeps/unix/sysv/linux/timebits.h @@ -1,21 +1,36 @@ /* System-dependent timing definitions. Linux version. -Copyright (C) 1996 Free Software Foundation, Inc. -This file is part of the GNU C Library. - -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -The GNU C Library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ + Copyright (C) 1996 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + 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. */ + +#ifdef __need_timeval +# undef __need_timeval +# ifndef _STRUCT_TIMEVAL +# define _STRUCT_TIMEVAL 1 +/* A time value that is accurate to the nearest + microsecond but also has a range of years. */ +struct timeval + { + time_t tv_sec; /* Seconds. */ + time_t tv_usec; /* Microseconds. */ + }; +# endif /* struct timeval */ +#endif /* need timeval */ + #ifndef _TIMEBITS_H #define _TIMEBITS_H 1 |