summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Rules.mak4
-rw-r--r--include/ctype.h4
-rw-r--r--include/features.h4
-rw-r--r--include/sys/vt.h1
-rw-r--r--include/ucontext.h52
-rw-r--r--include/unistd.h1024
-rw-r--r--libc/inet/resolv.c4
-rw-r--r--libc/misc/Makefile8
-rw-r--r--libc/misc/ctype/ctype.c1
-rw-r--r--libc/misc/lock/.indent.pro33
-rw-r--r--libc/misc/lock/Makefile44
-rw-r--r--libc/misc/lock/flock.c54
-rw-r--r--libc/misc/time/Makefile2
-rw-r--r--libc/misc/time/clock.c45
-rw-r--r--libc/misc/time/difftime.c67
-rw-r--r--libc/pwd_grp/Makefile2
-rw-r--r--libc/signal/Makefile3
-rw-r--r--libc/signal/sigaddset.c2
-rw-r--r--libc/signal/sigdelset.c2
-rw-r--r--libc/stdio/getdelim.c4
-rw-r--r--libc/stdlib/malloc/malloc.c3
-rw-r--r--libc/string/strsignal.c2
-rw-r--r--libc/sysdeps/linux/common/Makefile3
-rw-r--r--libc/sysdeps/linux/common/syscalls.c4
-rw-r--r--libc/sysdeps/linux/i386/bits/confname.h408
-rw-r--r--libc/sysdeps/linux/i386/bits/posix_opt.h110
-rw-r--r--libc/unistd/Makefile3
-rw-r--r--libc/unistd/execlp.c1
-rw-r--r--libc/unistd/execvp.c1
-rw-r--r--libc/unistd/sleep.c2
-rw-r--r--libc/unistd/sysconf.c855
31 files changed, 2609 insertions, 143 deletions
diff --git a/Rules.mak b/Rules.mak
index de53f9420..419f25bbb 100644
--- a/Rules.mak
+++ b/Rules.mak
@@ -41,10 +41,10 @@ CFLAGS=$(ARCH_CFLAGS) $(CCFLAGS) $(DEFS)
ifeq ($(DODEBUG),true)
CFLAGS += -Wall -g
- LDFLAGS = -nostdlib
+ LDFLAGS = -nostdlib -Wl,-warn-common
else
CFLAGS += -Wall #-fomit-frame-pointer
- LDFLAGS = -s -nostdlib
+ LDFLAGS = -s -nostdlib -Wl,-warn-common
endif
ifndef $(PREFIX)
diff --git a/include/ctype.h b/include/ctype.h
index ddfb1094a..a4fab9bca 100644
--- a/include/ctype.h
+++ b/include/ctype.h
@@ -4,6 +4,10 @@
#ifndef __CTYPE_H
#define __CTYPE_H
+/* For now, just always use the functions instead of the macros...*/
+#define USE_CTYPE_C_FUNCTIONS
+
+
#ifdef USE_CTYPE_C_FUNCTIONS
/* function prototpes */
extern int isalnum(int c);
diff --git a/include/features.h b/include/features.h
index bc80fc541..119fd9215 100644
--- a/include/features.h
+++ b/include/features.h
@@ -22,7 +22,8 @@
#ifdef __STDC__
-#define __P(x) x
+#define __P(x) x
+#define __PMT(x) x
#define __const const
/* Almost ansi */
@@ -53,7 +54,6 @@
#define __USE_POSIX
#define __USE_POSIX2
#define __USE_XOPEN
-#define _POSIX_THREAD_SAFE_FUNCTIONS
#include <sys/cdefs.h>
diff --git a/include/sys/vt.h b/include/sys/vt.h
new file mode 100644
index 000000000..834abfbc8
--- /dev/null
+++ b/include/sys/vt.h
@@ -0,0 +1 @@
+#include <linux/vt.h>
diff --git a/include/ucontext.h b/include/ucontext.h
new file mode 100644
index 000000000..d99e95e65
--- /dev/null
+++ b/include/ucontext.h
@@ -0,0 +1,52 @@
+/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ 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. */
+
+/* System V ABI compliant user-level context switching support. */
+
+#ifndef _UCONTEXT_H
+#define _UCONTEXT_H 1
+
+#include <features.h>
+
+/* Get machine dependent definition of data structures. */
+#include <sys/ucontext.h>
+
+__BEGIN_DECLS
+
+/* Get user context and store it in variable pointed to by UCP. */
+extern int getcontext __P ((ucontext_t *__ucp));
+
+/* Set user context from information of variable pointed to by UCP. */
+extern int setcontext __P ((__const ucontext_t *__ucp));
+
+/* Save current context in context variable pointed to by OUCP and set
+ context from variable pointed to by UCP. */
+extern int swapcontext __P ((ucontext_t *__oucp, __const ucontext_t *__ucp));
+
+/* Manipulate user context UCP to continue with calling functions FUNC
+ and the ARGC-1 parameters following ARGC when the context is used
+ the next time in `setcontext' or `swapcontext'.
+
+ We cannot say anything about the parameters FUNC takes; `void'
+ is as good as any other choice. */
+extern void makecontext __P ((ucontext_t *__ucp, void (*__func) (void),
+ int __argc, ...));
+
+__END_DECLS
+
+#endif /* ucontext.h */
diff --git a/include/unistd.h b/include/unistd.h
index 85b49297a..a9f9e4179 100644
--- a/include/unistd.h
+++ b/include/unistd.h
@@ -1,95 +1,588 @@
-/* unistd.h <ndf@linux.mit.edu> */
+/* Copyright (C) 1991-1999, 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. */
+
+/*
+ * POSIX Standard: 2.10 Symbolic Constants <unistd.h>
+ */
+
+#ifndef _UNISTD_H
+#define _UNISTD_H 1
+
#include <features.h>
-#include <sys/types.h>
-#ifndef __UNISTD_H
-#define __UNISTD_H
+__BEGIN_DECLS
+
+/* These may be used to determine what facilities are present at compile time.
+ Their values can be obtained at run time from `sysconf'. */
+
+/* POSIX Standard approved as ISO/IEC 9945-1 as of August, 1988 and
+ extended by POSIX-1b (aka POSIX-4) and POSIX-1c (aka POSIX threads). */
+#define _POSIX_VERSION 199506L
+
+/* These are not #ifdef __USE_POSIX2 because they are
+ in the theoretically application-owned namespace. */
+
+/* POSIX Standard approved as ISO/IEC 9945-2 as of December, 1993. */
+#define _POSIX2_C_VERSION 199209L
+
+/* The utilities on GNU systems also correspond to this version. */
+#define _POSIX2_VERSION 199209L
-#include <errno.h>
-#ifdef __mc68000__
-#include <asm/unistd.h>
+/* If defined, the implementation supports the
+ C Language Bindings Option. */
+#define _POSIX2_C_BIND 1
+
+/* If defined, the implementation supports the
+ C Language Development Utilities Option. */
+#define _POSIX2_C_DEV 1
+
+/* If defined, the implementation supports the
+ Software Development Utilities Option. */
+#define _POSIX2_SW_DEV 1
+
+/* If defined, the implementation supports the
+ creation of locales with the localedef utility. */
+#define _POSIX2_LOCALEDEF 1
+
+/* X/Open version number to which the library conforms. It is selectable. */
+#ifdef __USE_UNIX98
+# define _XOPEN_VERSION 500
+#else
+# define _XOPEN_VERSION 4
+#endif
+
+/* Commands and utilities from XPG4 are available. */
+#define _XOPEN_XCU_VERSION 4
+
+/* We are compatible with the old published standards as well. */
+#define _XOPEN_XPG2 1
+#define _XOPEN_XPG3 1
+#define _XOPEN_XPG4 1
+
+/* The X/Open Unix extensions are available. */
+#define _XOPEN_UNIX 1
+
+/* Encryption is present. */
+#define _XOPEN_CRYPT 1
+
+/* The enhanced internationalization capabilities according to XPG4.2
+ are present. */
+#define _XOPEN_ENH_I18N 1
+
+/* The legacy interfaces are also available. */
+#define _XOPEN_LEGACY 1
+
+
+/* Get values of POSIX options:
+
+ If these symbols are defined, the corresponding features are
+ always available. If not, they may be available sometimes.
+ The current values can be obtained with `sysconf'.
+
+ _POSIX_JOB_CONTROL Job control is supported.
+ _POSIX_SAVED_IDS Processes have a saved set-user-ID
+ and a saved set-group-ID.
+ _POSIX_REALTIME_SIGNALS Real-time, queued signals are supported.
+ _POSIX_PRIORITY_SCHEDULING Priority scheduling is supported.
+ _POSIX_TIMERS POSIX.4 clocks and timers are supported.
+ _POSIX_ASYNCHRONOUS_IO Asynchronous I/O is supported.
+ _POSIX_PRIORITIZED_IO Prioritized asynchronous I/O is supported.
+ _POSIX_SYNCHRONIZED_IO Synchronizing file data is supported.
+ _POSIX_FSYNC The fsync function is present.
+ _POSIX_MAPPED_FILES Mapping of files to memory is supported.
+ _POSIX_MEMLOCK Locking of all memory is supported.
+ _POSIX_MEMLOCK_RANGE Locking of ranges of memory is supported.
+ _POSIX_MEMORY_PROTECTION Setting of memory protections is supported.
+ _POSIX_MESSAGE_PASSING POSIX.4 message queues are supported.
+ _POSIX_SEMAPHORES POSIX.4 counting semaphores are supported.
+ _POSIX_SHARED_MEMORY_OBJECTS POSIX.4 shared memory objects are supported.
+ _POSIX_THREADS POSIX.1c pthreads are supported.
+ _POSIX_THREAD_ATTR_STACKADDR Thread stack address attribute option supported.
+ _POSIX_THREAD_ATTR_STACKSIZE Thread stack size attribute option supported.
+ _POSIX_THREAD_SAFE_FUNCTIONS Thread-safe functions are supported.
+ _POSIX_THREAD_PRIORITY_SCHEDULING
+ POSIX.1c thread execution scheduling supported.
+ _POSIX_THREAD_PRIO_INHERIT Thread priority inheritance option supported.
+ _POSIX_THREAD_PRIO_PROTECT Thread priority protection option supported.
+ _POSIX_THREAD_PROCESS_SHARED Process-shared synchronization supported.
+ _POSIX_PII Protocol-independent interfaces are supported.
+ _POSIX_PII_XTI XTI protocol-indep. interfaces are supported.
+ _POSIX_PII_SOCKET Socket protocol-indep. interfaces are supported.
+ _POSIX_PII_INTERNET Internet family of protocols supported.
+ _POSIX_PII_INTERNET_STREAM Connection-mode Internet protocol supported.
+ _POSIX_PII_INTERNET_DGRAM Connectionless Internet protocol supported.
+ _POSIX_PII_OSI ISO/OSI family of protocols supported.
+ _POSIX_PII_OSI_COTS Connection-mode ISO/OSI service supported.
+ _POSIX_PII_OSI_CLTS Connectionless ISO/OSI service supported.
+ _POSIX_POLL Implementation supports `poll' function.
+ _POSIX_SELECT Implementation supports `select' and `pselect'.
+
+ _XOPEN_REALTIME X/Open realtime support is available.
+ _XOPEN_REALTIME_THREADS X/Open realtime thread support is available.
+ _XOPEN_SHM Shared memory interface according to XPG4.2.
+
+ _XBS5_ILP32_OFF32 Implementation provides environment with 32-bit
+ int, long, pointer, and off_t types.
+ _XBS5_ILP32_OFFBIG Implementation provides environment with 32-bit
+ int, long, and pointer and off_t with at least
+ 64 bits.
+ _XBS5_LP64_OFF64 Implementation provides environment with 32-bit
+ int, and 64-bit long, pointer, and off_t types.
+ _XBS5_LPBIG_OFFBIG Implementation provides environment with at
+ least 32 bits int and long, pointer, and off_t
+ with at least 64 bits.
+
+ If any of these symbols is defined as -1, the corresponding option is not
+ true for any file. If any is defined as other than -1, the corresponding
+ option is true for all files. If a symbol is not defined at all, the value
+ for a specific file can be obtained from `pathconf' and `fpathconf'.
+
+ _POSIX_CHOWN_RESTRICTED Only the super user can use `chown' to change
+ the owner of a file. `chown' can only be used
+ to change the group ID of a file to a group of
+ which the calling process is a member.
+ _POSIX_NO_TRUNC Pathname components longer than
+ NAME_MAX generate an error.
+ _POSIX_VDISABLE If defined, if the value of an element of the
+ `c_cc' member of `struct termios' is
+ _POSIX_VDISABLE, no character will have the
+ effect associated with that element.
+ _POSIX_SYNC_IO Synchronous I/O may be performed.
+ _POSIX_ASYNC_IO Asynchronous I/O may be performed.
+ _POSIX_PRIO_IO Prioritized Asynchronous I/O may be performed.
+
+ Support for the Large File Support interface is not generally available.
+ If it is available the following constants are defined to one.
+ _LFS64_LARGEFILE Low-level I/O supports large files.
+ _LFS64_STDIO Standard I/O supports large files.
+ */
+
+#include <bits/posix_opt.h>
+
+/* Get the environment definitions from Unix98. */
+#ifdef __USE_UNIX98
+# include <bits/environments.h>
#endif
-#define STDIN_FILENO 0
-#define STDOUT_FILENO 1
-#define STDERR_FILENO 2
+/* Standard file descriptors. */
+#define STDIN_FILENO 0 /* Standard input. */
+#define STDOUT_FILENO 1 /* Standard output. */
+#define STDERR_FILENO 2 /* Standard error output. */
-/* NULL-terminated array of "NAME=VALUE" environment variables. */
-extern char **__environ;
-extern char **environ;
+/* All functions that are not declared anywhere else. */
+
+#include <bits/types.h>
+
+#ifndef ssize_t
+typedef __ssize_t ssize_t;
+# define ssize_t ssize_t
+#endif
+
+#define __need_size_t
+#define __need_NULL
+#include <stddef.h>
+
+#ifdef __USE_XOPEN
+/* The Single Unix specification says that some more types are
+ available here. */
+# ifndef gid_t
+typedef __gid_t gid_t;
+# define gid_t gid_t
+# endif
+
+# ifndef uid_t
+typedef __uid_t uid_t;
+# define uid_t uid_t
+# endif
+
+# ifndef off_t
+# ifndef __USE_FILE_OFFSET64
+typedef __off_t off_t;
+# else
+typedef __off64_t off_t;
+# endif
+# define off_t off_t
+# endif
+# if defined __USE_LARGEFILE64 && !defined off64_t
+typedef __off64_t off64_t;
+# define off64_t off64_t
+# endif
+
+# ifndef pid_t
+typedef __pid_t pid_t;
+# define pid_t pid_t
+# endif
+#endif /* X/Open */
+
+#ifdef __USE_UNIX98
+# ifndef intptr_t
+typedef __intptr_t intptr_t;
+# define intptr_t intptr_t
+# endif
+#endif /* Unix98 */
+
+/* Values for the second argument to access.
+ These may be OR'd together. */
+#define R_OK 4 /* Test for read permission. */
+#define W_OK 2 /* Test for write permission. */
+#define X_OK 1 /* Test for execute permission. */
+#define F_OK 0 /* Test for existence. */
+
+/* Test for access to NAME using the real UID and real GID. */
+extern int access __P ((__const char *__name, int __type));
+
+#ifdef __USE_GNU
+/* Test for access to NAME using the effective UID and GID
+ (as normal file operations use). */
+extern int euidaccess __P ((__const char *__name, int __type));
+#endif
+
+
+/* Values for the WHENCE argument to lseek. */
+#ifndef _STDIO_H /* <stdio.h> has the same definitions. */
+# define SEEK_SET 0 /* Seek from beginning of file. */
+# define SEEK_CUR 1 /* Seek from current position. */
+# define SEEK_END 2 /* Seek from end of file. */
+#endif
+
+#if defined __USE_BSD && !defined L_SET
+/* Old BSD names for the same constants; just for compatibility. */
+# define L_SET SEEK_SET
+# define L_INCR SEEK_CUR
+# define L_XTND SEEK_END
+#endif
+
+
+/* Move FD's file position to OFFSET bytes from the
+ beginning of the file (if WHENCE is SEEK_SET),
+ the current position (if WHENCE is SEEK_CUR),
+ or the end of the file (if WHENCE is SEEK_END).
+ Return the new file position. */
+extern __off_t __lseek __P ((int __fd, __off_t __offset, int __whence));
+#ifndef __USE_FILE_OFFSET64
+extern __off_t lseek __P ((int __fd, __off_t __offset, int __whence));
+#else
+# ifdef __REDIRECT
+extern __off64_t __REDIRECT (lseek,
+ __P ((int __fd, __off64_t __offset,
+ int __whence)),
+ lseek64);
+# else
+# define lseek lseek64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern __off64_t lseek64 __P ((int __fd, __off64_t __offset, int __whence));
+#endif
-extern int close __P ((int));
-extern size_t read __P ((int __fd, char * __buf, size_t __nbytes));
-extern size_t write __P ((int __fd, __const char * __buf, size_t __n));
-extern off_t lseek __P ((int __fd, off_t __n, int __whence));
+/* Close the file descriptor FD. */
+extern int __close __P ((int __fd));
+extern int close __P ((int __fd));
+
+/* Read NBYTES into BUF from FD. Return the
+ number read, -1 for errors or 0 for EOF. */
+extern ssize_t __read __P ((int __fd, __ptr_t __buf, size_t __nbytes));
+extern ssize_t read __P ((int __fd, __ptr_t __buf, size_t __nbytes));
+
+/* Write N bytes of BUF to FD. Return the number written, or -1. */
+extern ssize_t __write __P ((int __fd, __const __ptr_t __buf, size_t __n));
+extern ssize_t write __P ((int __fd, __const __ptr_t __buf, size_t __n));
+
+#ifdef __USE_UNIX98
+/* Read NBYTES into BUF from FD at the given position OFFSET without
+ changing the file pointer. Return the number read, -1 for errors
+ or 0 for EOF. */
+extern ssize_t __pread64 __P ((int __fd, __ptr_t __buf, size_t __nbytes,
+ __off64_t __offset));
+/* Write N bytes of BUF to FD at the given position OFFSET without
+ changing the file pointer. Return the number written, or -1. */
+extern ssize_t __pwrite64 __P ((int __fd, __const __ptr_t __buf, size_t __n,
+ __off64_t __offset));
+
+# ifndef __USE_FILE_OFFSET64
+extern ssize_t pread __P ((int __fd, __ptr_t __buf, size_t __nbytes,
+ __off_t __offset));
+extern ssize_t pwrite __P ((int __fd, __const __ptr_t __buf, size_t __n,
+ __off_t __offset));
+# else
+# ifdef __REDIRECT
+extern ssize_t __REDIRECT (pread, __P ((int __fd, __ptr_t __buf,
+ size_t __nbytes,__off64_t __offset)),
+ pread64);
+extern ssize_t __REDIRECT (pwrite, __P ((int __fd, __const __ptr_t __buf,
+ size_t __nbytes, __off64_t __offset)),
+ pwrite64);
+# else
+# define pread pread64
+# define pwrite pwrite64
+# endif
+# endif
+
+# ifdef __USE_LARGEFILE64
+extern ssize_t pread64 __P ((int __fd, __ptr_t __buf, size_t __nbytes,
+ __off64_t __offset));
+extern ssize_t pwrite64 __P ((int __fd, __const __ptr_t __buf, size_t __n,
+ __off64_t __offset));
+# endif
+#endif
+
+/* Create a one-way communication channel (pipe).
+ If successful, two file descriptors are stored in PIPEDES;
+ bytes written on PIPEDES[1] can be read from PIPEDES[0].
+ Returns 0 if successful, -1 if not. */
extern int pipe __P ((int __pipedes[2]));
+
+/* Schedule an alarm. In SECONDS seconds, the process will get a SIGALRM.
+ If SECONDS is zero, any currently scheduled alarm will be cancelled.
+ The function returns the number of seconds remaining until the last
+ alarm scheduled would have signaled, or zero if there wasn't one.
+ There is no return value to indicate an error, but you can set `errno'
+ to 0 and check its value after calling `alarm', and this might tell you.
+ The signal may come late due to processor scheduling. */
extern unsigned int alarm __P ((unsigned int __seconds));
+
+/* Make the process sleep for SECONDS seconds, or until a signal arrives
+ and is not ignored. The function returns the number of seconds less
+ than SECONDS which it actually slept (thus zero if it slept the full time).
+ If a signal handler does a `longjmp' or modifies the handling of the
+ SIGALRM signal while inside `sleep' call, the handling of the SIGALRM
+ signal afterwards is undefined. There is no return value to indicate
+ error, but if `sleep' returns SECONDS, it probably didn't work. */
extern unsigned int sleep __P ((unsigned int __seconds));
-extern void usleep __P ((unsigned long __microseconds));
+
+#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
+/* Set an alarm to go off (generating a SIGALRM signal) in VALUE
+ microseconds. If INTERVAL is nonzero, when the alarm goes off, the
+ timer is reset to go off every INTERVAL microseconds thereafter.
+ Returns the number of microseconds remaining before the alarm. */
+extern unsigned int ualarm __P ((unsigned int __value,
+ unsigned int __interval));
+
+/* Sleep USECONDS microseconds, or until a signal arrives that is not blocked
+ or ignored. */
+extern void usleep __P ((unsigned int __useconds));
+#endif
+
+
+/* Suspend the process until a signal arrives.
+ This always returns -1 and sets `errno' to EINTR. */
extern int pause __P ((void));
-extern char* crypt __P((__const char *__key, __const char *__salt));
-extern int isatty __P ((int __fd));
-extern char *ttyname __P ((int __fd));
-extern int readlink __P ((__const char *__path, char *__buf, size_t __len));
-extern int link __P ((__const char *__from, __const char *__to));
-extern int symlink __P ((__const char *__from, __const char *__to));
-extern int readlink __P ((__const char *__path, char *__buf, size_t __len));
-extern int unlink __P ((__const char *__name));
+
+
+/* Change the owner and group of FILE. */
+extern int chown __P ((__const char *__file, __uid_t __owner,
+ __gid_t __group));
+
+#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
+/* Change the owner and group of the file that FD is open on. */
+extern int fchown __P ((int __fd, __uid_t __owner, __gid_t __group));
+
+
+/* Change owner and group of FILE, if it is a symbolic
+ link the ownership of the symbolic link is changed. */
+extern int lchown __P ((__const char *__file, __uid_t __owner,
+ __gid_t __group));
+
+#endif /* Use BSD || X/Open Unix. */
+
+/* Change the process's working directory to PATH. */
+extern int chdir __P ((__const char *__path));
+
+#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
+/* Change the process's working directory to the one FD is open on. */
+extern int fchdir __P ((int __fd));
+#endif
+
+/* Get the pathname of the current working directory,
+ and put it in SIZE bytes of BUF. Returns NULL if the
+ directory couldn't be determined or SIZE was too small.
+ If successful, returns BUF. In GNU, if BUF is NULL,
+ an array is allocated with `malloc'; the array is SIZE
+ bytes long, unless SIZE == 0, in which case it is as
+ big as necessary. */
extern char *getcwd __P ((char *__buf, size_t __size));
+
+#ifdef __USE_GNU
+/* Return a malloc'd string containing the current directory name.
+ If the environment variable `PWD' is set, and its value is correct,
+ that value is used. */
+extern char *get_current_dir_name __P ((void));
+#endif
+
+#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
+/* Put the absolute pathname of the current working directory in BUF.
+ If successful, return BUF. If not, put an error message in
+ BUF and return NULL. BUF should be at least PATH_MAX bytes long. */
+extern char *getwd __P ((char *__buf));
+#endif
+
+
/* Duplicate FD, returning a new file descriptor on the same file. */
extern int dup __P ((int __fd));
+
/* Duplicate FD to FD2, closing FD2 and making it open on the same file. */
extern int dup2 __P ((int __fd, int __fd2));
-extern int fchdir __P ((int __fd));
-extern int chdir __P ((__const char *__path));
-extern int chown __P ((__const char *__file,
- uid_t __owner, gid_t __group));
-extern int fchown __P ((int __fd,
- uid_t __owner, gid_t __group));
+/* NULL-terminated array of "NAME=VALUE" environment variables. */
+extern char **__environ;
+#ifdef __USE_GNU
+extern char **environ;
+#endif
-extern int fsync __P ((int __fd));
-extern int sync __P ((void));
+/* Replace the current process, executing PATH with arguments ARGV and
+ environment ENVP. ARGV and ENVP are terminated by NULL pointers. */
+extern int execve __P ((__const char *__path, char *__const __argv[],
+ char *__const __envp[]));
-extern int rmdir __P ((__const char *__path));
+#ifdef __USE_GNU
+/* Execute the file FD refers to, overlaying the running program image.
+ ARGV and ENVP are passed to the new program, as for `execve'. */
+extern int fexecve __P ((int __fd,
+ char *__const __argv[], char *__const __envp[]));
-extern int rename __P((__const char* _old, __const char* _new));
+#endif
-extern int access __P ((__const char *__name, int __type));
-extern int reboot __P ((int __magic, int __magic_too, int __flag));
+/* Execute PATH with arguments ARGV and environment from `environ'. */
+extern int execv __P ((__const char *__path, char *__const __argv[]));
-extern int mkstemp __P ((char * __template));
-extern char * mktemp __P ((char * __template));
+/* Execute PATH with all arguments after PATH until a NULL pointer,
+ and the argument after that for environment. */
+extern int execle __P ((__const char *__path, __const char *__arg, ...));
-extern int _clone __P ((int (*fn)(void *arg), void *child_stack, int flags, void *arg));
+/* Execute PATH with all arguments after PATH until
+ a NULL pointer and environment from `environ'. */
+extern int execl __P ((__const char *__path, __const char *__arg, ...));
-/* Return the current machine's Internet number. */
-extern long int gethostid __P ((void));
+/* Execute FILE, searching in the `PATH' environment variable if it contains
+ no slashes, with arguments ARGV and environment from `environ'. */
+extern int execvp __P ((__const char *__file, char *__const __argv[]));
-/* Put the name of the current host in no more than LEN bytes of NAME.
- The result is null-terminated if LEN is large enough for the full
- name and the terminator. */
-extern int gethostname __P ((char *__name, size_t __len));
+/* Execute FILE, searching in the `PATH' environment variable if
+ it contains no slashes, with all arguments after FILE until a
+ NULL pointer and environment from `environ'. */
+extern int execlp __P ((__const char *__file, __const char *__arg, ...));
-/* Set the name of the current host to NAME, which is LEN bytes long.
- This call is restricted to the super-user. */
-extern int sethostname __P ((__const char *__name, size_t __len));
+#if defined __USE_MISC || defined __USE_XOPEN
+/* Add INC to priority of the current process. */
+extern int nice __P ((int __inc));
+#endif
-/* Set the user ID of the calling process to UID.
- If the calling process is the super-user, set the real
- and effective user IDs, and the saved set-user-ID to UID;
- if not, the effective user ID is set to UID. */
-extern int setuid __P ((__uid_t __uid));
+
+/* Terminate program execution with the low-order 8 bits of STATUS. */
+extern void _exit __PMT ((int __status)) __attribute__ ((__noreturn__));
+
+
+/* Get the `_PC_*' symbols for the NAME argument to `pathconf' and `fpathconf';
+ the `_SC_*' symbols for the NAME argument to `sysconf';
+ and the `_CS_*' symbols for the NAME argument to `confstr'. */
+#include <bits/confname.h>
+
+/* Get file-specific configuration information about PATH. */
+extern long int pathconf __P ((__const char *__path, int __name));
+
+/* Get file-specific configuration about descriptor FD. */
+extern long int fpathconf __P ((int __fd, int __name));
+
+/* Get the value of the system variable NAME. */
+extern long int sysconf __P ((int __name));
+
+#ifdef __USE_POSIX2
+/* Get the value of the string-valued system variable NAME. */
+extern size_t confstr __P ((int __name, char *__buf, size_t __len));
+#endif
+
+
+/* Get the process ID of the calling process. */
+extern __pid_t __getpid __P ((void));
+extern __pid_t getpid __P ((void));
+
+/* Get the process ID of the calling process's parent. */
+extern __pid_t getppid __P ((void));
+
+/* Get the process group ID of the calling process.
+ This function is different on old BSD. */
+#ifndef __FAVOR_BSD
+extern __pid_t getpgrp __P ((void));
+#else
+# ifdef __REDIRECT
+extern __pid_t __REDIRECT (getpgrp, __P ((__pid_t __pid)), __getpgid);
+# else
+# define getpgrp __getpgid
+# endif
+#endif
+
+/* Get the process group ID of process PID. */
+extern __pid_t __getpgid __P ((__pid_t __pid));
+#ifdef __USE_XOPEN_EXTENDED
+extern __pid_t getpgid __P ((__pid_t __pid));
+#endif
+
+
+/* Set the process group ID of the process matching PID to PGID.
+ If PID is zero, the current process's process group ID is set.
+ If PGID is zero, the process ID of the process is used. */
+extern int __setpgid __P ((__pid_t __pid, __pid_t __pgid));
+extern int setpgid __P ((__pid_t __pid, __pid_t __pgid));
+
+#if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN_EXTENDED
+/* Both System V and BSD have `setpgrp' functions, but with different
+ calling conventions. The BSD function is the same as POSIX.1 `setpgid'
+ (above). The System V function takes no arguments and puts the calling
+ process in its on group like `setpgid (0, 0)'.
+
+ New programs should always use `setpgid' instead.
+
+ The default in GNU is to provide the System V function. The BSD
+ function is available under -D_BSD_SOURCE. */
+
+# ifndef __FAVOR_BSD
+
+/* Set the process group ID of the calling process to its own PID.
+ This is exactly the same as `setpgid (0, 0)'. */
+extern int setpgrp __P ((void));
+
+# else
+
+/* Another name for `setpgid' (above). */
+# ifdef __REDIRECT
+extern int __REDIRECT (setpgrp, __P ((__pid_t __pid, __pid_t __pgrp)),
+ setpgid);
+# else
+# define setpgrp setpgid
+# endif
+
+# endif /* Favor BSD. */
+#endif /* Use SVID or BSD. */
/* Create a new session with the calling process as its leader.
The process group IDs of the session and the calling process
are set to the process ID of