diff options
Diffstat (limited to 'libc')
-rw-r--r-- | libc/inet/resolv.c | 4 | ||||
-rw-r--r-- | libc/misc/Makefile | 8 | ||||
-rw-r--r-- | libc/misc/ctype/ctype.c | 1 | ||||
-rw-r--r-- | libc/misc/lock/.indent.pro | 33 | ||||
-rw-r--r-- | libc/misc/lock/Makefile | 44 | ||||
-rw-r--r-- | libc/misc/lock/flock.c | 54 | ||||
-rw-r--r-- | libc/misc/time/Makefile | 2 | ||||
-rw-r--r-- | libc/misc/time/clock.c | 45 | ||||
-rw-r--r-- | libc/misc/time/difftime.c | 67 | ||||
-rw-r--r-- | libc/pwd_grp/Makefile | 2 | ||||
-rw-r--r-- | libc/signal/Makefile | 3 | ||||
-rw-r--r-- | libc/signal/sigaddset.c | 2 | ||||
-rw-r--r-- | libc/signal/sigdelset.c | 2 | ||||
-rw-r--r-- | libc/stdio/getdelim.c | 4 | ||||
-rw-r--r-- | libc/stdlib/malloc/malloc.c | 3 | ||||
-rw-r--r-- | libc/string/strsignal.c | 2 | ||||
-rw-r--r-- | libc/sysdeps/linux/common/Makefile | 3 | ||||
-rw-r--r-- | libc/sysdeps/linux/common/syscalls.c | 4 | ||||
-rw-r--r-- | libc/sysdeps/linux/i386/bits/confname.h | 408 | ||||
-rw-r--r-- | libc/sysdeps/linux/i386/bits/posix_opt.h | 110 | ||||
-rw-r--r-- | libc/unistd/Makefile | 3 | ||||
-rw-r--r-- | libc/unistd/execlp.c | 1 | ||||
-rw-r--r-- | libc/unistd/execvp.c | 1 | ||||
-rw-r--r-- | libc/unistd/sleep.c | 2 | ||||
-rw-r--r-- | libc/unistd/sysconf.c | 855 |
25 files changed, 1640 insertions, 23 deletions
diff --git a/libc/inet/resolv.c b/libc/inet/resolv.c index ae23064bb..7b367ed4c 100644 --- a/libc/inet/resolv.c +++ b/libc/inet/resolv.c @@ -689,12 +689,12 @@ int resolve_mailbox(const char *address, #endif extern int nameservers; -extern const char *__const nameserver[3]; +extern const char *nameserver[3]; #ifdef L_opennameservers int nameservers; -const char *__const nameserver[3]; +const char * nameserver[3]; int open_nameservers() { diff --git a/libc/misc/Makefile b/libc/misc/Makefile index 7ff8da188..dcd40319c 100644 --- a/libc/misc/Makefile +++ b/libc/misc/Makefile @@ -20,12 +20,12 @@ # other sundry sources. Files within this library are copyright by their # respective copyright holders. +TOPDIR=../ +include $(TOPDIR)Rules.mak +LIBC=$(TOPDIR)libc.a -DIRS = assert crypt fnmatch glob internals lsearch mntent syslog regex shm time -ifeq ($(USE_CTYPE_C_FUNCTIONS),true) - DIRS+=ctype -endif +DIRS = assert crypt ctype fnmatch glob internals lsearch mntent syslog regex shm time all: libc.a diff --git a/libc/misc/ctype/ctype.c b/libc/misc/ctype/ctype.c index 78e1f8891..1063f443d 100644 --- a/libc/misc/ctype/ctype.c +++ b/libc/misc/ctype/ctype.c @@ -6,6 +6,7 @@ * under the GNU Library General Public License. */ +#define USE_CTYPE_C_FUNCTIONS #include <ctype.h> int diff --git a/libc/misc/lock/.indent.pro b/libc/misc/lock/.indent.pro new file mode 100644 index 000000000..492ecf1c7 --- /dev/null +++ b/libc/misc/lock/.indent.pro @@ -0,0 +1,33 @@ +--blank-lines-after-declarations +--blank-lines-after-procedures +--break-before-boolean-operator +--no-blank-lines-after-commas +--braces-on-if-line +--braces-on-struct-decl-line +--comment-indentation25 +--declaration-comment-column25 +--no-comment-delimiters-on-blank-lines +--cuddle-else +--continuation-indentation4 +--case-indentation0 +--else-endif-column33 +--space-after-cast +--line-comments-indentation0 +--declaration-indentation1 +--dont-format-first-column-comments +--dont-format-comments +--honour-newlines +--indent-level4 +/* changed from 0 to 4 */ +--parameter-indentation4 +--line-length78 /* changed from 75 */ +--continue-at-parentheses +--no-space-after-function-call-names +--dont-break-procedure-type +--dont-star-comments +--leave-optional-blank-lines +--dont-space-special-semicolon +--tab-size4 +/* additions by Mark */ +--case-brace-indentation0 +--leave-preprocessor-space diff --git a/libc/misc/lock/Makefile b/libc/misc/lock/Makefile new file mode 100644 index 000000000..e319c11df --- /dev/null +++ b/libc/misc/lock/Makefile @@ -0,0 +1,44 @@ +# Makefile for uCLibc +# +# Copyright (C) 2000 by Lineo, inc. +# +# This program 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. +# +# This program 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 General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., 59 Temple +# Place, Suite 330, Boston, MA 02111-1307 USA +# +# Derived in part from the Linux-8086 C library, the GNU C Library, and several +# other sundry sources. Files within this library are copyright by their +# respective copyright holders. + +TOPDIR=../../ +include $(TOPDIR)Rules.mak +LIBC=$(TOPDIR)libc.a + +CSRC=flock.c +COBJS=$(patsubst %.c,%.o, $(CSRC)) +OBJS=$(COBJS) + +all: $(OBJS) $(LIBC) + +$(LIBC): ar-target + +ar-target: $(OBJS) + $(AR) $(ARFLAGS) $(LIBC) $(OBJS) + +$(COBJS): + $(CC) $(CFLAGS) $< -c $*.c -o $*.o + $(STRIPTOOL) -x -R .note -R .comment $*.o + +clean: + rm -f *.[oa] *~ core + diff --git a/libc/misc/lock/flock.c b/libc/misc/lock/flock.c new file mode 100644 index 000000000..3c1264655 --- /dev/null +++ b/libc/misc/lock/flock.c @@ -0,0 +1,54 @@ +/* Copyright (C) 1992, 1995, 1996, 1997 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. */ + +/* This file implements the `flock' function in terms of the POSIX.1 `fcntl' + locking mechanism. In 4BSD, these are two incompatible locking mechanisms, + perhaps with different semantics? */ + +#include <errno.h> +#include <unistd.h> +#include <fcntl.h> +#include <sys/file.h> + +/* Apply or remove an advisory lock, according to OPERATION, + on the file FD refers to. */ +int flock( int fd, int operation) +{ + struct flock lbuf; + + switch (operation & ~LOCK_NB) { + case LOCK_SH: + lbuf.l_type = F_RDLCK; + break; + case LOCK_EX: + lbuf.l_type = F_WRLCK; + break; + case LOCK_UN: + lbuf.l_type = F_UNLCK; + break; + default: + errno = EINVAL; + return -1; + } + + lbuf.l_whence = SEEK_SET; + lbuf.l_start = lbuf.l_len = 0L; /* Lock the whole file. */ + + return fcntl(fd, (operation & LOCK_NB) ? F_SETLK : F_SETLKW, &lbuf); +} + diff --git a/libc/misc/time/Makefile b/libc/misc/time/Makefile index 0d24f43e4..70ee192c4 100644 --- a/libc/misc/time/Makefile +++ b/libc/misc/time/Makefile @@ -26,7 +26,7 @@ LIBC=$(TOPDIR)libc.a CSRC=localtime.c gmtime.c asctime.c ctime.c asc_conv.c tm_conv.c mktime.c \ localtime_r.c gmtime_r.c asctime_r.c ctime_r.c utimes.c adjtime.c \ - strftime.c + strftime.c clock.c times.c difftime.c COBJS=$(patsubst %.c,%.o, $(CSRC)) OBJS=$(COBJS) diff --git a/libc/misc/time/clock.c b/libc/misc/time/clock.c new file mode 100644 index 000000000..4d1a17869 --- /dev/null +++ b/libc/misc/time/clock.c @@ -0,0 +1,45 @@ +/* Copyright (C) 1991, 1992, 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 + 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 <sys/times.h> +#include <time.h> +#include <unistd.h> + +/* Return the time used by the program so far (user time + system time). */ +clock_t +clock (void) +{ + struct tms buf; + long clk_tck = sysconf (_SC_CLK_TCK); + + /* We don't check for errors here. The only error the kernel + returns is EFAULT if the value cannot be written to the struct we + pass a pointer to. Otherwise the kernel returns an `unsigned + long' value which is the number of jiffies since system start. + But this number can be negative (when read as `long') when the + system is up for some time. Ignoring errors should therefore + have no negative impacts but solve the problem. */ + times (&buf); + + return + (clk_tck <= CLOCKS_PER_SEC) + ? ((unsigned long) buf.tms_utime + buf.tms_stime) * (CLOCKS_PER_SEC + / clk_tck) + : ((unsigned long) buf.tms_utime + buf.tms_stime) / (clk_tck + / CLOCKS_PER_SEC); +} diff --git a/libc/misc/time/difftime.c b/libc/misc/time/difftime.c new file mode 100644 index 000000000..6a9b708ea --- /dev/null +++ b/libc/misc/time/difftime.c @@ -0,0 +1,67 @@ +/* Copyright (C) 1991, 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., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <time.h> +#include <limits.h> +#include <sys/types.h> + + +/* Return the difference between TIME1 and TIME0. */ +double +difftime (time1, time0) + time_t time1; + time_t time0; +{ + /* Algorithm courtesy Paul Eggert (eggert@twinsun.com). */ + + time_t delta, hibit; + + if (sizeof (time_t) < sizeof (double)) + return (double) time1 - (double) time0; + if (sizeof (time_t) < sizeof (long double)) + return (long double) time1 - (long double) time0; + + if (time1 < time0) + return - difftime (time0, time1); + + /* As much as possible, avoid loss of precision by computing the + difference before converting to double. */ + delta = time1 - time0; + if (delta >= 0) + return delta; + + /* Repair delta overflow. */ + hibit = (~ (time_t) 0) << ((sizeof (time_t) * CHAR_BIT) - 1); + + /* The following expression rounds twice, which means the result may not + be the closest to the true answer. For example, suppose time_t is + 64-bit signed int, long_double is IEEE 754 double with default + rounding, time1 = 9223372036854775807 and time0 = -1536. Then the + true difference is 9223372036854777343, which rounds to + 9223372036854777856 with a total error of 513. But delta overflows to + -9223372036854774273, which rounds to -9223372036854774784, and + correcting this by subtracting 2 * (long_double) hibit (i.e. by adding + 2**64 = 18446744073709551616) yields 9223372036854776832, which rounds + to 9223372036854775808 with a total error of 1535 instead. This + problem occurs only with very large differences. It's too painful to + fix this portably. We are not alone in this problem; many C compilers + round twice when converting large unsigned types to small floating + types, so if time_t is unsigned the "return delta" above has the same + double-rounding problem. */ + return delta - 2 * (long double) hibit; +} diff --git a/libc/pwd_grp/Makefile b/libc/pwd_grp/Makefile index 5b5218c27..cc0ff909a 100644 --- a/libc/pwd_grp/Makefile +++ b/libc/pwd_grp/Makefile @@ -26,7 +26,7 @@ LIBC=$(TOPDIR)libc.a CSRC=__getpwent.c pwent.c getpwnam.c getpwuid.c putpwent.c getpw.c fgetpwent.c \ __getgrent.c grent.c getgrnam.c getgrgid.c fgetgrent.c initgroups.c \ - utent.c + utent.c getpass.c COBJS=$(patsubst %.c,%.o, $(CSRC)) OBJS=$(COBJS) diff --git a/libc/signal/Makefile b/libc/signal/Makefile index 5de28d7f0..8d21168a1 100644 --- a/libc/signal/Makefile +++ b/libc/signal/Makefile @@ -25,8 +25,7 @@ include $(TOPDIR)Rules.mak LIBC=$(TOPDIR)libc.a CSRC=bsd_sig.c raise.c sigblock.c siggtmsk.c sigjmp.c signal.c \ - sigpause.c sigstmsk.c sigaddset.c sigdelset.c \ - sigismem.c sigemptyset.c + sigpause.c sigstmsk.c sigaddset.c sigdelset.c sigismem.c sigemptyset.c COBJS=$(patsubst %.c,%.o, $(CSRC)) OBJS=$(COBJS) diff --git a/libc/signal/sigaddset.c b/libc/signal/sigaddset.c index e6848a76d..ec1c96e9b 100644 --- a/libc/signal/sigaddset.c +++ b/libc/signal/sigaddset.c @@ -18,8 +18,6 @@ #include <errno.h> #include <features.h> -#define _EXTERN_INLINE -#define __USE_EXTERN_INLINES 1 #include "signal.h" diff --git a/libc/signal/sigdelset.c b/libc/signal/sigdelset.c index 6206e7d39..daa545624 100644 --- a/libc/signal/sigdelset.c +++ b/libc/signal/sigdelset.c @@ -17,8 +17,6 @@ Boston, MA 02111-1307, USA. */ #include "errno.h" -#define _EXTERN_INLINE -#define __USE_EXTERN_INLINES 1 #include "signal.h" /* Add SIGNO to SET. */ diff --git a/libc/stdio/getdelim.c b/libc/stdio/getdelim.c index 99d48bb32..f8341cb0d 100644 --- a/libc/stdio/getdelim.c +++ b/libc/stdio/getdelim.c @@ -58,13 +58,13 @@ size_t getdelim(char **linebuf, size_t *linebufsz, int delimiter, FILE *file) return -1; } } - *linebuf[idx++] = (char)ch; + (*linebuf)[idx++] = (char)ch; if ((char)ch == delimiter) break; } if (idx != 0) - *linebuf[idx] = 0; + (*linebuf)[idx] = 0; return idx; } diff --git a/libc/stdlib/malloc/malloc.c b/libc/stdlib/malloc/malloc.c index 88d8698b2..d7df5d243 100644 --- a/libc/stdlib/malloc/malloc.c +++ b/libc/stdlib/malloc/malloc.c @@ -101,13 +101,12 @@ typedef int mutex_t; #define mutex_unlock(x) #define mutex_init(x) #define MUTEX_INITIALIZER 0 +//static mutex_t malloc_lock = MUTEX_INITIALIZER; #endif static int mmalloc_initialized = -1; /* -1 == uninitialized, 0 == initializing, 1 == initialized */ -static mutex_t malloc_lock = MUTEX_INITIALIZER; - #ifndef MAP_FAILED #define MAP_FAILED ((void*)-1) #endif diff --git a/libc/string/strsignal.c b/libc/string/strsignal.c index 83a862bfb..91895a8ae 100644 --- a/libc/string/strsignal.c +++ b/libc/string/strsignal.c @@ -8,6 +8,8 @@ #include <malloc.h> #include <signal.h> +extern char *itoa(int i); + const char *const sys_siglist[] = { "Unknown signal", "Hangup", diff --git a/libc/sysdeps/linux/common/Makefile b/libc/sysdeps/linux/common/Makefile index 0c361ba48..8d2b93830 100644 --- a/libc/sysdeps/linux/common/Makefile +++ b/libc/sysdeps/linux/common/Makefile @@ -29,7 +29,8 @@ LIBC=$(TOPDIR)libc.a CSRC =closedir.o dirfd.o getdents.o getdnnm.o gethstnm.o getpagesize.o \ isatty.o kernel_version.o mkfifo.o opendir.o readdir.o rewinddir.o \ seekdir.o setegid.o seteuid.o setpgrp.o statfix.o tcgetatr.o tell.o \ - telldir.o wait.o wait3.o _xmknod.o _fxstat.o _lxstat.o _xstat.o + telldir.o wait.o wait3.o _xmknod.o _fxstat.o _lxstat.o _xstat.o \ + libc_init.o COBJS=$(patsubst %.c,%.o, $(CSRC)) diff --git a/libc/sysdeps/linux/common/syscalls.c b/libc/sysdeps/linux/common/syscalls.c index c7d4343be..6b18c356d 100644 --- a/libc/sysdeps/linux/common/syscalls.c +++ b/libc/sysdeps/linux/common/syscalls.c @@ -44,13 +44,13 @@ _syscall0(pid_t, fork); //#define __NR_read 3 #ifdef L_read #include <unistd.h> -_syscall3(size_t, read, int, fd, char *, buf, size_t, count); +_syscall3(ssize_t, read, int, fd, __ptr_t, buf, size_t, count); #endif //#define __NR_write 4 #ifdef L_write #include <unistd.h> -_syscall3(size_t, write, int, fd, const char *, buf, size_t, count); +_syscall3(ssize_t, write, int, fd, const __ptr_t, buf, size_t, count); #endif //#define __NR_open 5 diff --git a/libc/sysdeps/linux/i386/bits/confname.h b/libc/sysdeps/linux/i386/bits/confname.h new file mode 100644 index 000000000..229088d67 --- /dev/null +++ b/libc/sysdeps/linux/i386/bits/confname.h @@ -0,0 +1,408 @@ +/* `sysconf', `pathconf', and `confstr' NAME values. Generic version. + Copyright (C) 1993, 1995, 1996, 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 + 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 _UNISTD_H +# error "Never use <bits/confname.h> directly; include <unistd.h> instead." +#endif + +/* Values for the NAME argument to `pathconf' and `fpathconf'. */ +enum + { + _PC_LINK_MAX, +#define _PC_LINK_MAX _PC_LINK_MAX + _PC_MAX_CANON, +#define _PC_MAX_CANON _PC_MAX_CANON + _PC_MAX_INPUT, +#define _PC_MAX_INPUT _PC_MAX_INPUT + _PC_NAME_MAX, +#define _PC_NAME_MAX _PC_NAME_MAX + _PC_PATH_MAX, +#define _PC_PATH_MAX _PC_PATH_MAX + _PC_PIPE_BUF, +#define _PC_PIPE_BUF _PC_PIPE_BUF + _PC_CHOWN_RESTRICTED, +#define _PC_CHOWN_RESTRICTED _PC_CHOWN_RESTRICTED + _PC_NO_TRUNC, +#define _PC_NO_TRUNC _PC_NO_TRUNC + _PC_VDISABLE, +#define _PC_VDISABLE _PC_VDISABLE + _PC_SYNC_IO, +#define _PC_SYNC_IO _PC_SYNC_IO + _PC_ASYNC_IO, +#define _PC_ASYNC_IO _PC_ASYNC_IO + _PC_PRIO_IO, +#define _PC_PRIO_IO _PC_PRIO_IO + _PC_SOCK_MAXBUF, +#define _PC_SOCK_MAXBUF _PC_SOCK_MAXBUF + _PC_FILESIZEBITS +#define _PC_FILESIZEBITS _PC_FILESIZEBITS + }; + +/* Values for the argument to `sysconf'. */ +enum + { + _SC_ARG_MAX, +#define _SC_ARG_MAX _SC_ARG_MAX + _SC_CHILD_MAX, +#define _SC_CHILD_MAX _SC_CHILD_MAX + _SC_CLK_TCK, +#define _SC_CLK_TCK _SC_CLK_TCK + _SC_NGROUPS_MAX, +#define _SC_NGROUPS_MAX _SC_NGROUPS_MAX + _SC_OPEN_MAX, +#define _SC_OPEN_MAX _SC_OPEN_MAX + _SC_STREAM_MAX, +#define _SC_STREAM_MAX _SC_STREAM_MAX + _SC_TZNAME_MAX, +#define _SC_TZNAME_MAX _SC_TZNAME_MAX + _SC_JOB_CONTROL, +#define _SC_JOB_CONTROL _SC_JOB_CONTROL + _SC_SAVED_IDS, +#define _SC_SAVED_IDS _SC_SAVED_IDS + _SC_REALTIME_SIGNALS, +#define _SC_REALTIME_SIGNALS _SC_REALTIME_SIGNALS + _SC_PRIORITY_SCHEDULING, +#define _SC_PRIORITY_SCHEDULING _SC_PRIORITY_SCHEDULING + _SC_TIMERS, +#define _SC_TIMERS _SC_TIMERS + _SC_ASYNCHRONOUS_IO, +#define _SC_ASYNCHRONOUS_IO _SC_ASYNCHRONOUS_IO + _SC_PRIORITIZED_IO, +#define _SC_PRIORITIZED_IO _SC_PRIORITIZED_IO + _SC_SYNCHRONIZED_IO, +#define _SC_SYNCHRONIZED_IO _SC_SYNCHRONIZED_IO + _SC_FSYNC, +#define _SC_FSYNC _SC_FSYNC + _SC_MAPPED_FILES, +#define _SC_MAPPED_FILES _SC_MAPPED_FILES + _SC_MEMLOCK, +#define _SC_MEMLOCK _SC_MEMLOCK + _SC_MEMLOCK_RANGE, +#define _SC_MEMLOCK_RANGE _SC_MEMLOCK_RANGE + _SC_MEMORY_PROTECTION, +#define _SC_MEMORY_PROTECTION _SC_MEMORY_PROTECTION + _SC_MESSAGE_PASSING, +#define _SC_MESSAGE_PASSING _SC_MESSAGE_PASSING + _SC_SEMAPHORES, +#define _SC_SEMAPHORES _SC_SEMAPHORES + _SC_SHARED_MEMORY_OBJECTS, +#define _SC_SHARED_MEMORY_OBJECTS _SC_SHARED_MEMORY_OBJECTS + _SC_AIO_LISTIO_MAX, +#define _SC_AIO_LISTIO_MAX _SC_AIO_LISTIO_MAX + _SC_AIO_MAX, +#define _SC_AIO_MAX _SC_AIO_MAX + _SC_AIO_PRIO_DELTA_MAX, +#define _SC_AIO_PRIO_DELTA_MAX _SC_AIO_PRIO_DELTA_MAX + _SC_DELAYTIMER_MAX, +#define _SC_DELAYTIMER_MAX _SC_DELAYTIMER_MAX + _SC_MQ_OPEN_MAX, +#define _SC_MQ_OPEN_MAX _SC_MQ_OPEN_MAX + _SC_MQ_PRIO_MAX, +#define _SC_MQ_PRIO_MAX _SC_MQ_PRIO_MAX + _SC_VERSION, +#define _SC_VERSION _SC_VERSION + _SC_PAGESIZE, +#define _SC_PAGESIZE _SC_PAGESIZE +#define _SC_PAGE_SIZE _SC_PAGESIZE + _SC_RTSIG_MAX, +#define _SC_RTSIG_MAX _SC_RTSIG_MAX + _SC_SEM_NSEMS_MAX, +#define _SC_SEM_NSEMS_MAX _SC_SEM_NSEMS_MAX + _SC_SEM_VALUE_MAX, +#define _SC_SEM_VALUE_MAX _SC_SEM_VALUE_MAX + _SC_SIGQUEUE_MAX, +#define _SC_SIGQUEUE_MAX _SC_SIGQUEUE_MAX + _SC_TIMER_MAX, +#define _SC_TIMER_MAX _SC_TIMER_MAX + + /* Values for the argument to `sysconf' + corresponding to _POSIX2_* symbols. */ + _SC_BC_BASE_MAX, +#define _SC_BC_BASE_MAX _SC_BC_BASE_MAX + _SC_BC_DIM_MAX, +#define _SC_BC_DIM_MAX _SC_BC_DIM_MAX + _SC_BC_SCALE_MAX, +#define _SC_BC_SCALE_MAX _SC_BC_SCALE_MAX + _SC_BC_STRING_MAX, +#define _SC_BC_STRING_MAX _SC_BC_STRING_MAX + _SC_COLL_WEIGHTS_MAX, +#define _SC_COLL_WEIGHTS_MAX _SC_COLL_WEIGHTS_MAX + _SC_EQUIV_CLASS_MAX, +#define _SC_EQUIV_CLASS_MAX _SC_EQUIV_CLASS_MAX + _SC_EXPR_NEST_MAX, +#define _SC_EXPR_NEST_MAX _SC_EXPR_NEST_MAX + _SC_LINE_MAX, +#define _SC_LINE_MAX _SC_LINE_MAX + _SC_RE_DUP_MAX, +#define _SC_RE_DUP_MAX _SC_RE_DUP_MAX + _SC_CHARCLASS_NAME_MAX, +#define _SC_CHARCLASS_NAME_MAX _SC_CHARCLASS_NAME_MAX + + _SC_2_VERSION, +#define _SC_2_VERSION _SC_2_VERSION + _SC_2_C_BIND, +#define _SC_2_C_BIND _SC_2_C_BIND + _SC_2_C_DEV, +#define _SC_2_C_DEV _SC_2_C_DEV + _SC_2_FORT_DEV, +#define _SC_2_FORT_DEV _SC_2_FORT_DEV + _SC_2_FORT_RUN, +#define _SC_2_FORT_RUN _SC_2_FORT_RUN + _SC_2_SW_DEV, +#define _SC_2_SW_DEV _SC_2_SW_DEV + _SC_2_LOCALEDEF, +#define _SC_2_LOCALEDEF _SC_2_LOCALEDEF + + _SC_PII, +#define _SC_PII _SC_PII + _SC_PII_XTI, +#define _SC_PII_XTI _SC_PII_XTI + _SC_PII_SOCKET, +#define _SC_PII_SOCKET _SC_PII_SOCKET + _SC_PII_INTERNET, +#define _SC_PII_INTERNET _SC_PII_INTERNET + _SC_PII_OSI, +#define _SC_PII_OSI _SC_PII_OSI + _SC_POLL, +#define _SC_POLL _SC_POLL + _SC_SELECT, +#define _SC_SELECT _SC_SELECT + _SC_UIO_MAXIOV, +#define _SC_UIO_MAXIOV _SC_UIO_MAXIOV + _SC_PII_INTERNET_STREAM, +#define _SC_PII_INTERNET_STREAM _SC_PII_INTERNET_STREAM + _SC_PII_INTERNET_DGRAM, +#define _SC_PII_INTERNET_DGRAM _SC_PII_INTERNET_DGRAM + _SC_PII_OSI_COTS, +#define _SC_PII_OSI_COTS _SC_PII_OSI_COTS + _SC_PII_OSI_CLTS, +#define _SC_PII_OSI_CLTS _SC_PII_OSI_CLTS + _SC_PII_OSI_M, +#define _SC_PII_OSI_M _SC_PII_OSI_M + _SC_T_IOV_MAX, +#define _SC_T_IOV_MAX _SC_T_IOV_MAX + + /* Values according to POSIX 1003.1c (POSIX threads). */ + _SC_THREADS, +#define _SC_THREADS _SC_THREADS + _SC_THREAD_SAFE_FUNCTIONS, +#define _SC_THREAD_SAFE_FUNCTIONS _SC_THREAD_SAFE_FUNCTIONS + _SC_GETGR_R_SIZE_MAX, +#define _SC_GETGR_R_SIZE_MAX _SC_GETGR_R_SIZE_MAX + _SC_GETPW_R_SIZE_MAX, +#define _SC_GETPW_R_SIZE_MAX _SC_GETPW_R_SIZE_MAX + _SC_LOGIN_NAME_MAX, +#define _SC_LOGIN_NAME_MAX _SC_LOGIN_NAME_MAX + _SC_TTY_NAME_MAX, +#define _SC_TTY_NAME_MAX _SC_TTY_NAME_MAX + _SC_THREAD_DESTRUCTOR_ITERATIONS, +#define _SC_THREAD_DESTRUCTOR_ITERATIONS _SC_THREAD_DESTRUCTOR_ITERATIONS + _SC_THREAD_KEYS_MAX, +#define _SC_THREAD_KEYS_MAX _SC_THREAD_KEYS_MAX + _SC_THREAD_STACK_MIN, +#define _SC_THREAD_STACK_MIN _SC_THREAD_STACK_MIN + _SC_THREAD_THREADS_MAX, +#define _SC_THREAD_THREADS_MAX _SC_THREAD_THREADS_MAX + _SC_THREAD_ATTR_STACKADDR, +#define _SC_THREAD_ATTR_STACKADDR _SC_THREAD_ATTR_STACKADDR + _SC_THREAD_ATTR_STACKSIZE, +#define _SC_THREAD_ATTR_STACKSIZE _SC_THREAD_ATTR_STACKSIZE + _SC_THREAD_PRIORITY_SCHEDULING, +#define _SC_THREAD_PRIORITY_SCHEDULING _SC_THREAD_PRIORITY_SCHEDULING + _SC_THREAD_PRIO_INHERIT, +#define _SC_THREAD_PRIO_INHERIT _SC_THREAD_PRIO_INHERIT + _SC_THREAD_PRIO_PROTECT, +#define _SC_THREAD_PRIO_PROTECT _SC_THREAD_PRIO_PROTECT + _SC_THREAD_PROCESS_SHARED, +#define _SC_THREAD_PROCESS_SHARED _SC_THREAD_PROCESS_SHARED + + _SC_NPROCESSORS_CONF, +#define _SC_NPROCESSORS_CONF _SC_NPROCESSORS_CONF + _SC_NPROCESSORS_ONLN, +#define _SC_NPROCESSORS_ONLN _SC_NPROCESSORS_ONLN + _SC_PHYS_PAGES, +#define _SC_PHYS_PAGES _SC_PHYS_PAGES + _SC_AVPHYS_PAGES, +#define _SC_AVPHYS_PAGES _SC_AVPHYS_PAGES + _SC_ATEXIT_MAX, +#define _SC_ATEXIT_MAX _SC_ATEXIT_MAX + _SC_PASS_MAX, +#define _SC_PASS_MAX _SC_PASS_MAX + + _SC_XOPEN_VERSION, +#define _SC_XOPEN_VERSION _SC_XOPEN_VERSION + _SC_XOPEN_XCU_VERSION, +#define _SC_XOPEN_XCU_VERSION _SC_XOPEN_XCU_VERSION + _SC_XOPEN_UNIX, +#define _SC_XOPEN_UNIX _SC_XOPEN_UNIX + _SC_XOPEN_CRYPT, +#define _SC_XOPEN_CRYPT _SC_XOPEN_CRYPT + _SC_XOPEN_ENH_I18N, +#define _SC_XOPEN_ENH_I18N _SC_XOPEN_ENH_I18N + _SC_XOPEN_SHM, +#define _SC_XOPEN_SHM _SC_XOPEN_SHM + + _SC_2_CHAR_TERM, +#define _SC_2_CHAR_TERM _SC_2_CHAR_TERM + _SC_2_C_VERSION, +#define _SC_2_C_VERSION _SC_2_C_VERSION + _SC_2_UPE, +#define _SC_2_UPE _SC_2_UPE + + _SC_XOPEN_XPG2, +#define _SC_XOPEN_XPG2 _SC_XOPEN_XPG2 + _SC_XOPEN_XPG3, +#define _SC_XOPEN_XPG3 _SC_XOPEN_XPG3 + _SC_XOPEN_XPG4, +#define _SC_XOPEN_XPG4 _SC_XOPEN_XPG4 + + _SC_CHAR_BIT, +#define _SC_CHAR_BIT _SC_CHAR_BIT + _SC_CHAR_MAX, +#define _SC_CHAR_MAX _SC_CHAR_MAX + _SC_CHAR_MIN, +#define _SC_CHAR_MIN _SC_CHAR_MIN + _SC_INT_MAX, +#define _SC_INT_MAX _SC_INT_MAX + _SC_INT_MIN, +#define _SC_INT_MIN _SC_INT_MIN + _SC_LONG_BIT, +#define _SC_LONG_BIT _SC_LONG_BIT + _SC_WORD_BIT, +#define _SC_WORD_BIT _SC_WORD_BIT + _SC_MB_LEN_MAX, +#define _SC_MB_LEN_MAX _SC_MB_LEN_MAX + _SC_NZERO, +#define _SC_NZERO _SC_NZERO + _SC_SSIZE_MAX, +#define _SC_SSIZE_MAX _SC_SSIZE_MAX + _SC_SCHAR_MAX, +#define _SC_SCHAR_MAX _SC_SCHAR_MAX + _SC_SCHAR_MIN, +#define _SC_SCHAR_MIN _SC_SCHAR_MIN + _SC_SHRT_MAX, +#define _SC_SHRT_MAX _SC_SHRT_MAX + _SC_SHRT_MIN, +#define _SC_SHRT_MIN _SC_SHRT_MIN + _SC_UCHAR_MAX, +#define _SC_UCHAR_MAX _SC_UCHAR_MAX + _SC_UINT_MAX, +#define _SC_UINT_MAX _SC_UINT_MAX + _SC_ULONG_MAX, +#define _SC_ULONG_MAX _SC_ULONG_MAX + _SC_USHRT_MAX, +#define _SC_USHRT_MAX _SC_USHRT_MAX + + _SC_NL_ARGMAX, +#define _SC_NL_ARGMAX _SC_NL_ARGMAX + _SC_NL_LANGMAX, +#define _SC_NL_LANGMAX _SC_NL_LANGMAX + _SC_NL_MSGMAX, +#define _SC_NL_MSGMAX _SC_NL_MSGMAX + _SC_NL_NMAX, +#define _SC_NL_NMAX _SC_NL_NMAX + _SC_NL_SETMAX, +#define _SC_NL_SETMAX _SC_NL_SETMAX + _SC_NL_TEXTMAX, +#define _SC_NL_TEXTMAX _SC_NL_TEXTMAX + + _SC_XBS5_ILP32_OFF32, +#define _SC_XBS5_ILP32_OFF32 _SC_XBS5_ILP32_OFF32 + _SC_XBS5_ILP32_OFFBIG, +#define _SC_XBS5_ILP32_OFFBIG _SC_XBS5_ILP32_OFFBIG + _SC_XBS5_LP64_OFF64, +#define _SC_XBS5_LP64_OFF64 _SC_XBS5_LP64_OFF64 + _SC_XBS5_LPBIG_OFFBIG, +#define _SC_XBS5_LPBIG_OFFBIG _SC_XBS5_LPBIG_OFFBIG + + _SC_XOPEN_LEGACY, +#define _SC_XOPEN_LEGACY _SC_XOPEN_LEGACY + _SC_XOPEN_REALTIME, +#define _SC_XOPEN_REALTIME _SC_XOPEN_REALTIME + _SC_XOPEN_REALTIME_THREADS +#define _SC_XOPEN_REALTIME_THREADS _SC_XOPEN_REALTIME_THREADS + }; + +#if (defined __USE_POSIX2 || defined __USE_UNIX98 \ + || defined __USE_FILE_OFFSET64 || defined __USE_LARGEFILE64 \ + || defined __USE_LARGEFILE) +/* Values for the NAME argument to `confstr'. */ +enum + { + _CS_PATH /* The default search path. */ +#define _CS_PATH _CS_PATH + +#if (defined __USE_FILE_OFFSET64 || defined __USE_LARGEFILE64 \ + || defined __USE_LARGEFILE) + , + _CS_LFS_CFLAGS = 1000, +# define _CS_LFS_CFLAGS _CS_LFS_CFLAGS + _CS_LFS_LDFLAGS, +# define _CS_LFS_LDFLAGS _CS_LFS_LDFLAGS + _CS_LFS_LIBS, +# define _CS_LFS_LIBS _CS_LFS_LIBS + _CS_LFS_LINTFLAGS, +# define _CS_LFS_LINTFLAGS _CS_LFS_LINTFLAGS + _CS_LFS64_CFLAGS, +# define _CS_LFS64_CFLAGS _CS_LFS64_CFLAGS + _CS_LFS64_LDFLAGS, +# define _CS_LFS64_LDFLAGS _CS_LFS64_LDFLAGS + _CS_LFS64_LIBS, +# define _CS_LFS64_LIBS _CS_LFS64_LIBS + _CS_LFS64_LINTFLAGS +# define _CS_LFS64_LINTFLAGS _CS_LFS64_LINTFLAGS +#endif + +#ifdef __USE_UNIX98 + , + _CS_XBS5_ILP32_OFF32_CFLAGS = 1100, +# define _CS_XBS5_ILP32_OFF32_CFLAGS _CS_XBS5_ILP32_OFF32_CFLAGS + _CS_XBS5_ILP32_OFF32_LDFLAGS, +# define _CS_XBS5_ILP32_OFF32_LDFLAGS _CS_XBS5_ILP32_OFF32_LDFLAGS + _CS_XBS5_ILP32_OFF32_LIBS, +# define _CS_XBS5_ILP32_OFF32_LIBS _CS_XBS5_ILP32_OFF32_LIBS + _CS_XBS5_ILP32_OFF32_LINTFLAGS, +# define _CS_XBS5_ILP32_OFF32_LINTFLAGS _CS_XBS5_ILP32_OFF32_LINTFLAGS + _CS_XBS5_ILP32_OFFBIG_CFLAGS, +# define _CS_XBS5_ILP32_OFFBIG_CFLAGS _CS_XBS5_ILP32_OFFBIG_CFLAGS + _CS_XBS5_ILP32_OFFBIG_LDFLAGS, +# define _CS_XBS5_ILP32_OFFBIG_LDFLAGS _CS_XBS5_ILP32_OFFBIG_LDFLAGS + _CS_XBS5_ILP32_OFFBIG_LIBS, +# define _CS_XBS5_ILP32_OFFBIG_LIBS _CS_XBS5_ILP32_OFFBIG_LIBS + _CS_XBS5_ILP32_OFFBIG_LINTFLAGS, +# define _CS_XBS5_ILP32_OFFBIG_LINTFLAGS _CS_XBS5_ILP32_OFFBIG_LINTFLAGS + _CS_XBS5_LP64_OFF64_CFLAGS, +# define _CS_XBS5_LP64_OFF64_CFLAGS _CS_XBS5_LP64_OFF64_CFLAGS + _CS_XBS5_LP64_OFF64_LDFLAGS, +# define _CS_XBS5_LP64_OFF64_LDFLAGS _CS_XBS5_LP64_OFF64_LDFLAGS + _CS_XBS5_LP64_OFF64_LIBS, +# define _CS_XBS5_LP64_OFF64_LIBS _CS_XBS5_LP64_OFF64_LIBS + _CS_XBS5_LP64_OFF64_LINTFLAGS, +# define _CS_XBS5_LP64_OFF64_LINTFLAGS _CS_XBS5_LP64_OFF64_LINTFLAGS + _CS_XBS5_LPBIG_OFFBIG_CFLAGS, +# define _CS_XBS5_LPBIG_OFFBIG_CFLAGS _CS_XBS5_LPBIG_OFFBIG_CFLAGS + _CS_XBS5_LPBIG_OFFBIG_LDFLAGS, +# define _CS_XBS5_LPBIG_OFFBIG_LDFLAGS _CS_XBS5_LPBIG_OFFBIG_LDFLAGS + _CS_XBS5_LPBIG_OFFBIG_LIBS, +# define _CS_XBS5_LPBIG_OFFBIG_LIBS _CS_XBS5_LPBIG_OFFBIG_LIBS + _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS +# define _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS +#endif + }; +#endif diff --git a/libc/sysdeps/linux/i386/bits/posix_opt.h b/libc/sysdeps/linux/i386/bits/posix_opt.h new file mode 100644 index 000000000..15683b77e --- /dev/null +++ b/libc/sysdeps/linux/i386/bits/posix_opt.h @@ -0,0 +1,110 @@ +/* Define POSIX options for Linux. + Copyright (C) 1996, 1997, 1998, 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 + 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 _POSIX_OPT_H +#define _POSIX_OPT_H 1 + +/* Job control is supported. */ +#define _POSIX_JOB_CONTROL 1 + +/* Processes have a saved set-user-ID and a saved set-group-ID. */ +#define _POSIX_SAVED_IDS 1 + +/* Priority scheduling is supported. */ +#define _POSIX_PRIORITY_SCHEDULING 1 + +/* Synchronizing file data is supported. */ +#define _POSIX_SYNCHRONIZED_IO 1 + +/* The fsync function is present. */ +#define _POSIX_FSYNC 1 + +/* Mapping of files to memory is supported. */ +#define _POSIX_MAPPED_FILES 1 + +/* Locking of all memory is supported. */ +#define _POSIX_MEMLOCK 1 + +/* Locking of ranges of memory is supported. */ +#define _POSIX_MEMLOCK_RANGE 1 + +/* Setting of memory protections is supported. */ +#define _POSIX_MEMORY_PROTECTION 1 + +/* Implementation supports `poll' function. */ +#define _POSIX_POLL 1 + +/* Implementation supports `select' and `pselect' functions. */ +#define _POSIX_SELECT 1 + +/* Only root can change owner of file. */ +#define _POSIX_CHOWN_RESTRICTED 1 + +/* `c_cc' member of 'struct termios' structure can be disabled by + using the value _POSIX_VDISABLE. */ +#define _POSIX_VDISABLE '\0' + +/* Filenames are not silently truncated. */ +#define _POSIX_NO_TRUNC 1 + +/* X/Open realtime support is available. */ +#define _XOPEN_REALTIME 1 + +/* X/Open realtime thread support is available. */ +#define _XOPEN_REALTIME_THREADS 1 + +/* XPG4.2 shared memory is supported. */ +#define _XOPEN_SHM 1 + +/* Tell we have POSIX threads. */ +#define _POSIX_THREADS 1 + +/* We have the reentrant functions described in POSIX. */ +#define _POSIX_REENTRANT_FUNCTIONS 1 +#define _POSIX_THREAD_SAFE_FUNCTIONS 1 + +/* We provide priority scheduling for threads. */ +#define _POSIX_THREAD_PRIORITY_SCHEDULING 1 + +/* We support user-defined stack sizes. */ +#define _POSIX_THREAD_ATTR_STACKSIZE 1 + +/* We support user-defined stacks. */ +#define _POSIX_THREAD_ATTR_STACKADDR 1 + +/* We support POSIX.1b semaphores, but only the non-shared form for now. */ +/*#define _POSIX_SEMAPHORES 1 XXX We are not quite there now. */ + +/* Real-time signals are supported. */ +#define _POSIX_REALTIME_SIGNALS 1 + +/* We support asynchronous I/O. */ +#define _POSIX_ASYNCHRONOUS_IO 1 +/* Alternative name for Unix98. */ +#define _LFS_ASYNCHRONOUS_IO 1 + +/* The LFS support in asynchronous I/O is also available. */ +#define _LFS64_ASYNCHRONOUS_IO 1 + +/* The rest of the LFS is also available. */ +#define _LFS_LARGEFILE 1 +#define _LFS64_LARGEFILE 1 +#define _LFS64_STDIO 1 + +#endif /* posix_opt.h */ diff --git a/libc/unistd/Makefile b/libc/unistd/Makefile index 4e5e5fc8a..db8c0c019 100644 --- a/libc/unistd/Makefile +++ b/libc/unistd/Makefile @@ -25,7 +25,8 @@ include $(TOPDIR)Rules.mak LIBC=$(TOPDIR)libc.a -CSRC=execl.c execlp.c execv.c execvep.c execvp.c getcwd.c getopt.c sleep.c +CSRC=execl.c execlp.c execv.c execvep.c execvp.c getcwd.c getopt.c \ + sleep.c sysconf.c COBJS=$(patsubst %.c,%.o, $(CSRC)) OBJS=$(COBJS) diff --git a/libc/unistd/execlp.c b/libc/unistd/execlp.c index 571ab71b0..50fb4a032 100644 --- a/libc/unistd/execlp.c +++ b/libc/unistd/execlp.c @@ -4,6 +4,7 @@ #include <stdarg.h> extern char **environ; +extern int execvep(const char *path, char *__const argv[], char *__const envp[]); int execlp(__const char *file, __const char *arg, ...) { diff --git a/libc/unistd/execvp.c b/libc/unistd/execvp.c index b2aeee917..943303332 100644 --- a/libc/unistd/execvp.c +++ b/libc/unistd/execvp.c @@ -2,6 +2,7 @@ #include <unistd.h> extern char **environ; +extern int execvep(const char *path, char *__const argv[], char *__const envp[]); int execvp(__const char *path, char *__const argv[]) { diff --git a/libc/unistd/sleep.c b/libc/unistd/sleep.c index 5b458e07a..e11770563 100644 --- a/libc/unistd/sleep.c +++ b/libc/unistd/sleep.c @@ -4,7 +4,7 @@ #include <sys/types.h> #include <unistd.h> -void usleep(unsigned long usec) +void usleep(unsigned int usec) { struct timeval tv; diff --git a/libc/unistd/sysconf.c b/libc/unistd/sysconf.c new file mode 100644 index 000000000..96aa30122 --- /dev/null +++ b/libc/unistd/sysconf.c @@ -0,0 +1,855 @@ +/* Copyright (C) 1991, 93, 95, 96, 97, 2000 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 <errno.h> +#include <limits.h> +#include <grp.h> +#include <pwd.h> +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <unistd.h> +#include <sys/sysinfo.h> +#include <sys/types.h> +#include <regex.h> + + +/* Get the value of the system variable NAME. */ +long int sysconf(int name) +{ + switch (name) + { + default: + errno=EINVAL; + return -1; + + case _SC_ARG_MAX: +#ifdef ARG_MAX + return ARG_MAX; +#else + return -1; +#endif + + case _SC_CHILD_MAX: +#ifdef CHILD_MAX + return CHILD_MAX; +#else + return -1; +#endif + + case _SC_CLK_TCK: +#ifdef CLK_TCK + return CLK_TCK; +#else + return 60; +#endif + + case _SC_NGROUPS_MAX: +#ifdef NGROUPS_MAX + return NGROUPS_MAX; +#else + return -1; +#endif + + case _SC_OPEN_MAX: +#if 0 + return getdtablesize (); +#else + return -1; +#endif + + case _SC_STREAM_MAX: +#ifdef STREAM_MAX + return STREAM_MAX; +#else + return FOPEN_MAX; +#endif + + case _SC_TZNAME_MAX: +#if 0 + return tzname_max (); +#else + return -1; +#endif + + case _SC_JOB_CONTROL: +#ifdef _POSIX_JOB_CONTROL + return 1; +#else + return -1; +#endif + + case _SC_SAVED_IDS: +#ifdef _POSIX_SAVED_IDS + return 1; +#else + return -1; +#endif + + case _SC_REALTIME_SIGNALS: +#ifdef _POSIX_REALTIME_SIGNALS + return 1; +#else + return -1; +#endif + + case _SC_PRIORITY_SCHEDULING: +#ifdef _POSIX_PRIORITY_SCHEDULING + return 1; +#else + return -1; +#endif + + case _SC_TIMERS: +#ifdef _POSIX_TIMERS + return 1; +#else + return -1; +#endif + + case _SC_ASYNCHRONOUS_IO: +#ifdef _POSIX_ASYNCHRONOUS_IO + return 1; +#else + return -1; +#endif + + case _SC_PRIORITIZED_IO: +#ifdef _POSIX_PRIORITIZED_IO + return 1; +#else + return -1; +#endif + + case _SC_SYNCHRONIZED_IO: +#ifdef _POSIX_SYNCHRONIZED_IO + return 1; +#else + return -1; +#endif + + case _SC_FSYNC: +#ifdef _POSIX_FSYNC + return 1; +#else + return -1; +#endif + + case _SC_MAPPED_FILES: +#ifdef _POSIX_MAPPED_FILES + return 1; +#else + return -1; +#endif + + case _SC_MEMLOCK: +#ifdef _POSIX_MEMLOCK + return 1; +#else + return -1; +#endif + + case _SC_MEMLOCK_RANGE: +#ifdef _POSIX_MEMLOCK_RANGE + return 1; +#else + return -1; +#endif + + case _SC_MEMORY_PROTECTION: +#ifdef _POSIX_MEMORY_PROTECTION + return 1; +#else + return -1; +#endif + + case _SC_MESSAGE_PASSING: +#ifdef _POSIX_MESSAGE_PASSING + return 1; +#else + return -1; +#endif + + case _SC_SEMAPHORES: +#ifdef _POSIX_SEMAPHORES + return 1; +#else + return -1; +#endif + + case _SC_SHARED_MEMORY_OBJECTS: +#ifdef _POSIX_SHARED_MEMORY_OBJECTS + return 1; +#else + return -1; +#endif + + case _SC_VERSION: + return _POSIX_VERSION; + + case _SC_PAGESIZE: +#if 0 + return __getpagesize (); +#else + return -1; +#endif + + case _SC_AIO_LISTIO_MAX: +#ifdef AIO_LISTIO_MAX + return AIO_LISTIO_MAX; +#else + return -1; +#endif + + case _SC_AIO_MAX: +#ifdef AIO_MAX + return AIO_MAX; +#else + return -1; +#endif + + case _SC_AIO_PRIO_DELTA_MAX: +#ifdef AIO_PRIO_DELTA_MAX + return AIO_PRIO_DELTA_MAX; +#else + return -1; +#endif + + case _SC_DELAYTIMER_MAX: +#ifdef DELAYTIMER_MAX + return DELAYTIMER_MAX; +#else + return -1; +#endif + + case _SC_MQ_OPEN_MAX: +#ifdef MQ_OPEN_MAX + return MQ_OPEN_MAX; +#else + return -1; +#endif + + case _SC_MQ_PRIO_MAX: +#ifdef MQ_PRIO_MAX + return MQ_PRIO_MAX; +#else + return -1; +#endif + + case _SC_RTSIG_MAX: +#ifdef RTSIG_MAX + return RTSIG_MAX; +#else + return -1; +#endif + + case _SC_SEM_NSEMS_MAX: +#ifdef SEM_NSEMS_MAX + return SEM_NSEMS_MAX; +#else + return -1; +#endif + + case _SC_SEM_VALUE_MAX: +#ifdef SEM_VALUE_MAX + return SEM_VALUE_MAX; +#else + return -1; +#endif + + case _SC_SIGQUEUE_MAX: +#ifdef SIGQUEUE_MAX + return SIGQUEUE_MAX; +#else + return -1; +#endif + + case _SC_TIMER_MAX: +#ifdef TIMER_MAX + return TIMER_MAX; +#else + return -1; +#endif + + case _SC_BC_BASE_MAX: +#ifdef BC_BASE_MAX + return BC_BASE_MAX; +#else + return -1; +#endif + + case _SC_BC_DIM_MAX: +#ifdef BC_DIM_MAX + return BC_DIM_MAX; +#else + return -1; +#endif + + case _SC_BC_SCALE_MAX: +#ifdef BC_SCALE_MAX + return BC_SCALE_MAX; +#else + return -1; +#endif + + case _SC_BC_STRING_MAX: +#ifdef BC_STRING_MAX + return BC_STRING_MAX; +#else + return -1; +#endif + + case _SC_COLL_WEIGHTS_MAX: +#ifdef COLL_WEIGHTS_MAX + return COLL_WEIGHTS_MAX; +#else + return -1; +#endif + + case _SC_EQUIV_CLASS_MAX: +#ifdef EQUIV_CLASS_MAX + return EQUIV_CLASS_MAX; +#else + return -1; +#endif + + case _SC_EXPR_NEST_MAX: +#ifdef EXPR_NEST_MAX + return EXPR_NEST_MAX; +#else + return -1; +#endif + + case _SC_LINE_MAX: +#ifdef LINE_MAX + return LINE_MAX; +#else + return -1; +#endif + + case _SC_RE_DUP_MAX: +#ifdef RE_DUP_MAX + return RE_DUP_MAX; +#else + return -1; +#endif + + case _SC_CHARCLASS_NAME_MAX: +#ifdef CHARCLASS_NAME_MAX + return CHARCLASS_NAME_MAX; +#else + return -1; +#endif + + case _SC_PII: +#ifdef _POSIX_PII + return 1; +#else + return -1; +#endif + + case _SC_PII_XTI: +#ifdef _POSIX_PII_XTI + return 1; +#else + return -1; +#endif + + case _SC_PII_SOCKET: +#ifdef _POSIX_PII_SOCKET + return 1; +#else + return -1; +#endif + + case _SC_PII_INTERNET: +#ifdef _POSIX_PII_INTERNET + return 1; +#else + return -1; +#endif + + case _SC_PII_OSI: +#ifdef _POSIX_PII_OSI + return 1; +#else + return -1; +#endif + + case _SC_POLL: +#ifdef _POSIX_POLL + return 1; +#else + return -1; +#endif + + case _SC_SELECT: +#ifdef _POSIX_SELECT + return 1; +#else + return -1; +#endif + + case _SC_UIO_MAXIOV: +#ifdef UIO_MAXIOV + return UIO_MAXIOV; +#else + return -1; +#endif + + case _SC_PII_INTERNET_STREAM: +#ifdef _POSIX_PII_INTERNET_STREAM + return 1; +#else + return -1; +#endif + + case _SC_PII_INTERNET_DGRAM: +#ifdef _POSIX_PII_INTERNET_DGRAM + return 1; +#else + return -1; +#endif + + case _SC_PII_OSI_COTS: +#ifdef _POSIX_PII_OSI_COTS + return 1; +#else + return -1; +#endif + + case _SC_PII_OSI_CLTS: +#ifdef _POSIX_PII_OSI_CLTS + return 1; +#else + return -1; +#endif + + case _SC_PII_OSI_M: +#ifdef _POSIX_PII_OSI_M + return 1; +#else + return -1; +#endif + + case _SC_T_IOV_MAX: +#ifdef _T_IOV_MAX + return _T_IOV_MAX; +#else + return -1; +#endif + + case _SC_2_VERSION: + return _POSIX2_VERSION; + + case _SC_2_C_BIND: +#ifdef _POSIX2_C_BIND + return _POSIX2_C_BIND; +#else + return -1; +#endif + + case _SC_2_C_DEV: +#ifdef _POSIX2_C_DEV + return _POSIX2_C_DEV; +#else + return -1; +#endif + + case _SC_2_C_VERSION: +#ifdef _POSIX2_C_VERSION + return _POSIX2_C_VERSION; +#else + return -1; +#endif + + case _SC_2_FORT_DEV: +#ifdef _POSIX2_FORT_DEV + return _POSIX2_FORT_DEV; +#else + return -1; +#endif + + case _SC_2_LOCALEDEF: +#ifdef _POSIX2_LOCALEDEF + return _POSIX2_LOCALEDEF; +#else + return -1; +#endif + + case _SC_2_SW_DEV: +#ifdef _POSIX2_SW_DEV + return _POSIX2_SW_DEV; +#else + return -1; +#endif + + case _SC_2_CHAR_TERM: +#ifdef _POSIX2_CHAR_TERM + return _POSIX2_CHAR_TERM; +#else + return -1; +#endif + + case _SC_2_UPE: +#ifdef _POSIX2_UPE + return _POSIX2_UPE; +#else + return -1; +#endif + + /* POSIX 1003.1c (POSIX Threads). */ + case _SC_THREADS: +#ifdef _POSIX_THREADS + return 1; +#else + return -1; +#endif + + case _SC_THREAD_SAFE_FUNCTIONS: +#ifdef _POSIX_THREAD_SAFE_FUNCTIONS + return 1; +#else + return -1; +#endif + + case _SC_GETGR_R_SIZE_MAX: +#ifdef NSS_BUFLEN_GROUP + return NSS_BUFLEN_GROUP; +#else + return -1; +#endif + + case _SC_GETPW_R_SIZE_MAX: +#ifdef NSS_BUFLEN_PASSWD + return NSS_BUFLEN_PASSWD; +#else + return -1; +#endif + + case _SC_LOGIN_NAME_MAX: +#ifdef _POSIX_LOGIN_NAME_MAX + return _POSIX_LOGIN_NAME_MAX; +#else + return -1; +#endif + + case _SC_TTY_NAME_MAX: +#ifdef _POSIX_TTY_NAME_MAX + return _POSIX_TTY_NAME_MAX; +#else + return -1; +#endif + + case _SC_THREAD_DESTRUCTOR_ITERATIONS: +#ifdef _POSIX_THREAD_DESTRUCTOR_ITERATIONS + return _POSIX_THREAD_DESTRUCTOR_ITERATIONS; +#else + return -1; +#endif + + case _SC_THREAD_KEYS_MAX: +#ifdef PTHREAD_KEYS_MAX + return PTHREAD_KEYS_MAX; +#else + return -1; +#endif + + case _SC_THREAD_STACK_MIN: +#ifdef PTHREAD_STACK_MIN + return PTHREAD_STACK_MIN; +#else + return -1; +#endif + + case _SC_THREAD_THREADS_MAX: +#ifdef PTHREAD_THREADS_MAX + return PTHREAD_THREADS_MAX; +#else + return -1; +#endif + + case _SC_THREAD_ATTR_STACKADDR: +#ifdef _POSIX_THREAD_ATTR_STACKADDR + return 1; +#else + return -1; +#endif + + case _SC_THREAD_ATTR_STACKSIZE: +#ifdef _POSIX_THREAD_ATTR_STACKSIZE + return 1; +#else + return -1; +#endif + + case _SC_THREAD_PRIORITY_SCHEDULING: +#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING + return 1; +#else + return -1; +#endif + + case _SC_THREAD_PRIO_INHERIT: +#ifdef _POSIX_THREAD_PRIO_INHERIT + return 1; +#else + return -1; +#endif + + case _SC_THREAD_PRIO_PROTECT: +#ifdef _POSIX_THREAD_PRIO_PROTECT + return 1; +#else + return -1; +#endif + + case _SC_THREAD_PROCESS_SHARED: +#ifdef _POSIX_THREAD_PROCESS_SHARED + return 1; +#else + return -1; +#endif + + case _SC_NPROCESSORS_CONF: +#if 0 + return get_nprocs_conf (); +#else + return -1; +#endif + + case _SC_NPROCESSORS_ONLN: +#if 0 + return get_nprocs (); +#else + return -1; +#endif + + case _SC_PHYS_PAGES: +#if 0 + return get_phys_pages (); +#else + return -1; +#endif + + case _SC_AVPHYS_PAGES: +#if 0 + return get_avphys_pages (); +#else + return -1; +#endif + + case _SC_ATEXIT_MAX: + /* We have no limit since we use lists. */ + return INT_MAX; + + case _SC_PASS_MAX: + /* We have no limit but since the return value might be used to + allocate a buffer we restrict the value. */ + return BUFSIZ; + + case _SC_XOPEN_VERSION: + return _XOPEN_VERSION; + + case _SC_XOPEN_XCU_VERSION: + return _XOPEN_XCU_VERSION; + + case _SC_XOPEN_UNIX: + return _XOPEN_UNIX; + + case _SC_XOPEN_CRYPT: +#ifdef _XOPEN_CRYPT + return _XOPEN_CRYPT; +#else + return -1; +#endif + + case _SC_XOPEN_ENH_I18N: +#ifdef _XOPEN_ENH_I18N + return _XOPEN_ENH_I18N; +#else + return -1; +#endif + + case _SC_XOPEN_SHM: +#ifdef _XOPEN_SHM + return _XOPEN_SHM; +#else + return -1; +#endif + + case _SC_XOPEN_XPG2: +#ifdef _XOPEN_XPG2 + return _XOPEN_XPG2; +#else + return -1; +#endif + + case _SC_XOPEN_XPG3: +#ifdef _XOPEN_XPG3 + return _XOPEN_XPG3; +#else + return -1; +#endif + + case _SC_XOPEN_XPG4: +#ifdef _XOPEN_XPG4 + return _XOPEN_XPG4; +#else + return -1; +#endif + + case _SC_CHAR_BIT: + return CHAR_BIT; + + case _SC_CHAR_MAX: + return CHAR_MAX; + + case _SC_CHAR_MIN: + return CHAR_MIN; + + case _SC_INT_MAX: + return INT_MAX; + + case _SC_INT_MIN: + return INT_MIN; + + case _SC_LONG_BIT: + return sizeof (long int) * CHAR_BIT; + + case _SC_WORD_BIT: + return sizeof (int) * CHAR_BIT; + + case _SC_MB_LEN_MAX: + return MB_LEN_MAX; + + case _SC_NZERO: + return NZERO; + + case _SC_SSIZE_MAX: + return _POSIX_SSIZE_MAX; + + case _SC_SCHAR_MAX: + return SCHAR_MAX; + + case _SC_SCHAR_MIN: + return SCHAR_MIN; + + case _SC_SHRT_MAX: + return SHRT_MAX; + + case _SC_SHRT_MIN: + return SHRT_MIN; + + case _SC_UCHAR_MAX: + return UCHAR_MAX; + + case _SC_UINT_MAX: + return UINT_MAX; + + case _SC_ULONG_MAX: + return ULONG_MAX; + + case _SC_USHRT_MAX: + return USHRT_MAX; + + case _SC_NL_ARGMAX: +#ifdef NL_ARGMAX + return NL_ARGMAX; +#else + return -1; +#endif + + case _SC_NL_LANGMAX: +#ifdef NL_LANGMAX + return NL_LANGMAX; +#else + return -1; +#endif + + case _SC_NL_MSGMAX: +#ifdef NL_MSGMAX + return NL_MSGMAX; +#else + return -1; +#endif + + case _SC_NL_NMAX: +#ifdef NL_NMAX + return NL_NMAX; +#else + return -1; +#endif + + case _SC_NL_SETMAX: +#ifdef NL_SETMAX + return NL_SETMAX; +#else + return -1; +#endif + + case _SC_NL_TEXTMAX: +#ifdef NL_TEXTMAX + return NL_TEXTMAX; +#else + return -1; +#endif + + case _SC_XBS5_ILP32_OFF32: +#ifdef _XBS5_ILP32_OFF32 + return _XBS5_ILP32_OFF32; +#else + return -1; +#endif + case _SC_XBS5_ILP32_OFFBIG: +#ifdef _XBS5_ILP32_OFFBIG + return _XBS5_ILP32_OFFBIG; +#else + return -1; +#endif + case _SC_XBS5_LP64_OFF64: +#ifdef _XBS5_LP64_OFF64 + return _XBS5_LP64_OFF64; +#else + return -1; +#endif + case _SC_XBS5_LPBIG_OFFBIG: +#ifdef _XBS5_LPBIG_OFFBIG + return _XBS5_LPBIG_OFFBIG; +#else + return -1; +#endif + + case _SC_XOPEN_LEGACY: + return _XOPEN_LEGACY; + + case _SC_XOPEN_REALTIME: +#ifdef _XOPEN_REALTIME + return _XOPEN_REALTIME; +#else + return -1; +#endif + case _SC_XOPEN_REALTIME_THREADS: +#ifdef _XOPEN_REALTIME_THREADS + return _XOPEN_REALTIME_THREADS; +#else + return -1; +#endif + } +} + |