diff options
author | gcc <gcc@7b3dc134-2b1b-0410-93df-9e9f96275f8d> | 2006-08-17 01:18:26 +0000 |
---|---|---|
committer | gcc <gcc@7b3dc134-2b1b-0410-93df-9e9f96275f8d> | 2006-08-17 01:18:26 +0000 |
commit | 15f34685e7a9b5caf761af2ebf6afa20438d440b (patch) | |
tree | dc04ce3cdf040f198743c15b64557824de174680 /libc/sysdeps/gnu | |
parent | 1e848e0e775a36f6359161f5deb890942ef42ff3 (diff) | |
download | eglibc2-15f34685e7a9b5caf761af2ebf6afa20438d440b.tar.gz |
Import glibc-mainline for 2006-08-16
git-svn-id: svn://svn.eglibc.org/fsf/trunk@4 7b3dc134-2b1b-0410-93df-9e9f96275f8d
Diffstat (limited to 'libc/sysdeps/gnu')
-rw-r--r-- | libc/sysdeps/gnu/Makefile | 79 | ||||
-rw-r--r-- | libc/sysdeps/gnu/_G_config.h | 103 | ||||
-rw-r--r-- | libc/sysdeps/gnu/bits/ipc.h | 52 | ||||
-rw-r--r-- | libc/sysdeps/gnu/bits/msq.h | 77 | ||||
-rw-r--r-- | libc/sysdeps/gnu/bits/sem.h | 88 | ||||
-rw-r--r-- | libc/sysdeps/gnu/bits/shm.h | 97 | ||||
-rw-r--r-- | libc/sysdeps/gnu/bits/utmp.h | 125 | ||||
-rw-r--r-- | libc/sysdeps/gnu/bits/utmpx.h | 103 | ||||
-rw-r--r-- | libc/sysdeps/gnu/errlist-compat.awk | 129 | ||||
-rw-r--r-- | libc/sysdeps/gnu/errlist.awk | 121 | ||||
-rw-r--r-- | libc/sysdeps/gnu/errlist.c | 1472 | ||||
-rw-r--r-- | libc/sysdeps/gnu/getutmp.c | 33 | ||||
-rw-r--r-- | libc/sysdeps/gnu/getutmpx.c | 1 | ||||
-rw-r--r-- | libc/sysdeps/gnu/glob64.c | 25 | ||||
-rw-r--r-- | libc/sysdeps/gnu/ifaddrs.c | 163 | ||||
-rw-r--r-- | libc/sysdeps/gnu/net/if.h | 205 | ||||
-rw-r--r-- | libc/sysdeps/gnu/netinet/ip_icmp.h | 283 | ||||
-rw-r--r-- | libc/sysdeps/gnu/netinet/tcp.h | 225 | ||||
-rw-r--r-- | libc/sysdeps/gnu/netinet/udp.h | 79 | ||||
-rw-r--r-- | libc/sysdeps/gnu/siglist.c | 77 | ||||
-rw-r--r-- | libc/sysdeps/gnu/sys/mtio.h | 277 | ||||
-rw-r--r-- | libc/sysdeps/gnu/updwtmp.c | 30 | ||||
-rw-r--r-- | libc/sysdeps/gnu/utmp_file.c | 30 | ||||
-rw-r--r-- | libc/sysdeps/gnu/utmpx.h | 127 |
24 files changed, 4001 insertions, 0 deletions
diff --git a/libc/sysdeps/gnu/Makefile b/libc/sysdeps/gnu/Makefile new file mode 100644 index 000000000..5b9a0a56e --- /dev/null +++ b/libc/sysdeps/gnu/Makefile @@ -0,0 +1,79 @@ +# Copyright (C) 1996,1997,1998,1999,2001,2002,2003,2004,2005,2006 +# 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 Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 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 +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, write to the Free +# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +# 02111-1307 USA. + +# Generate the list of strings for errno codes from the section of the +# manual which documents the codes. + +$(..)sysdeps/gnu/errlist.c: $(..)sysdeps/gnu/errlist.awk \ + $(..)manual/errno.texi + $(AWK) -f $^ > $@-tmp +# Make it unwritable so noone will edit it by mistake. + -chmod a-w $@-tmp + mv -f $@-tmp $@ +ifeq ($(with-cvs),yes) + test ! -d CVS || cvs commit -m'Regenerated from $^' $@ +endif + +ifeq ($(subdir),stdio-common) + +errlist-c = $(firstword $(wildcard $(addsuffix /errlist.c,$(sysdirs) .))) + +ifeq ($(versioning),yes) +$(objpfx)errlist-compat.c: $(errlist-c) $(..)sysdeps/gnu/errlist-compat.awk \ + $(common-objpfx)Versions.v.i $(before-compile) +else +$(objpfx)errlist-compat.c: $(errlist-c) $(..)sysdeps/gnu/errlist-compat.awk \ + $(before-compile) +endif + $(make-target-directory) + $(AWK) -v maxerr=`\ + $(CC) -S $(CPPFLAGS) $(CFLAGS) -DNOT_IN_libc -DEMIT_ERR_MAX $< -o - \ + | sed -n 's/^.*@@@[^0-9]*\([0-9]*\)[^0-9]*@@@.*$$/\1/p'` \ + -f $(..)sysdeps/gnu/errlist-compat.awk \ + $(wildcard $(sysdirs:=/Versions)) > $@T +# Make it unwritable so noone will edit it by mistake. + -chmod a-w $@T + mv -f $@T $@ +$(objpfx)errlist-compat.h: $(objpfx)errlist-compat.c + sed -n '1p;/ERR_MAX/p' $< > $@T + -chmod a-w $@T + mv -f $@T $@ +generated += errlist-compat.c errlist-compat.h + +# This will force the generation above to happy if need be. +$(foreach o,$(object-suffixes) $(object-suffixes:=.d),\ + $(objpfx)errlist$o): $(objpfx)errlist-compat.h +endif + +ifeq ($(subdir),login) +sysdep_routines += setutxent getutxent endutxent getutxid getutxline \ + pututxline utmpxname updwtmpx getutmpx getutmp + +sysdep_headers += utmpx.h bits/utmpx.h +endif + + +ifeq ($(subdir),inet) +sysdep_headers += netinet/udp.h netinet/ip_icmp.h +endif + + +ifeq ($(subdir),misc) +sysdep_headers += sys/mtio.h +endif diff --git a/libc/sysdeps/gnu/_G_config.h b/libc/sysdeps/gnu/_G_config.h new file mode 100644 index 000000000..83c78f0b9 --- /dev/null +++ b/libc/sysdeps/gnu/_G_config.h @@ -0,0 +1,103 @@ +/* This file is needed by libio to define various configuration parameters. + These are always the same in the GNU C library. */ + +#ifndef _G_config_h +#define _G_config_h 1 + +/* Define types for libio in terms of the standard internal type names. */ + +#include <bits/types.h> +#define __need_size_t +#define __need_wchar_t +#define __need_wint_t +#define __need_NULL +#include <stddef.h> +#ifndef _WINT_T +/* Integral type unchanged by default argument promotions that can + hold any value corresponding to members of the extended character + set, as well as at least one value that does not correspond to any + member of the extended character set. */ +# define _WINT_T +typedef unsigned int wint_t; +#endif +#define __need_mbstate_t +#include <wchar.h> +#define _G_size_t size_t +typedef struct +{ + __off_t __pos; + __mbstate_t __state; +} _G_fpos_t; +typedef struct +{ + __off64_t __pos; + __mbstate_t __state; +} _G_fpos64_t; +#define _G_ssize_t __ssize_t +#define _G_off_t __off_t +#define _G_off64_t __off64_t +#define _G_pid_t __pid_t +#define _G_uid_t __uid_t +#define _G_wchar_t wchar_t +#define _G_wint_t wint_t +#define _G_stat64 stat64 +#include <gconv.h> +typedef union +{ + struct __gconv_info __cd; + struct + { + struct __gconv_info __cd; + struct __gconv_step_data __data; + } __combined; +} _G_iconv_t; + +typedef int _G_int16_t __attribute__ ((__mode__ (__HI__))); +typedef int _G_int32_t __attribute__ ((__mode__ (__SI__))); +typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__))); +typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__))); + +#define _G_HAVE_BOOL 1 + + +/* These library features are always available in the GNU C library. */ +#define _G_HAVE_ATEXIT 1 +#define _G_HAVE_SYS_CDEFS 1 +#define _G_HAVE_SYS_WAIT 1 +#define _G_NEED_STDARG_H 1 +#define _G_va_list __gnuc_va_list + +#define _G_HAVE_PRINTF_FP 1 +#define _G_HAVE_MMAP 1 +#define _G_HAVE_MREMAP 1 +#define _G_HAVE_LONG_DOUBLE_IO 1 +#define _G_HAVE_IO_FILE_OPEN 1 +#define _G_HAVE_IO_GETLINE_INFO 1 + +#define _G_IO_IO_FILE_VERSION 0x20001 + +#define _G_OPEN64 __open64 +#define _G_LSEEK64 __lseek64 +#define _G_MMAP64 __mmap64 +#define _G_FSTAT64(fd,buf) __fxstat64 (_STAT_VER, fd, buf) + +/* This is defined by <bits/stat.h> if `st_blksize' exists. */ +#define _G_HAVE_ST_BLKSIZE defined (_STATBUF_ST_BLKSIZE) + +#define _G_BUFSIZ 8192 + +/* These are the vtbl details for ELF. */ +#define _G_NAMES_HAVE_UNDERSCORE 0 +#define _G_VTABLE_LABEL_HAS_LENGTH 1 +#define _G_USING_THUNKS 1 +#define _G_VTABLE_LABEL_PREFIX "__vt_" +#define _G_VTABLE_LABEL_PREFIX_ID __vt_ + + +#if defined __cplusplus || defined __STDC__ +# define _G_ARGS(ARGLIST) ARGLIST +#else +# define _G_ARGS(ARGLIST) () +#endif + +#endif /* _G_config.h */ diff --git a/libc/sysdeps/gnu/bits/ipc.h b/libc/sysdeps/gnu/bits/ipc.h new file mode 100644 index 000000000..36cdf0e19 --- /dev/null +++ b/libc/sysdeps/gnu/bits/ipc.h @@ -0,0 +1,52 @@ +/* Copyright (C) 1995-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 Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#ifndef _SYS_IPC_H +# error "Never use <bits/ipc.h> directly; include <sys/ipc.h> instead." +#endif + +#include <bits/types.h> + +/* Mode bits for `msgget', `semget', and `shmget'. */ +#define IPC_CREAT 01000 /* Create key if key does not exist. */ +#define IPC_EXCL 02000 /* Fail if key exists. */ +#define IPC_NOWAIT 04000 /* Return error on wait. */ + +/* Control commands for `msgctl', `semctl', and `shmctl'. */ +#define IPC_RMID 0 /* Remove identifier. */ +#define IPC_SET 1 /* Set `ipc_perm' options. */ +#define IPC_STAT 2 /* Get `ipc_perm' options. */ +#ifdef __USE_GNU +# define IPC_INFO 3 /* See ipcs. */ +#endif + +/* Special key values. */ +#define IPC_PRIVATE ((__key_t) 0) /* Private key. */ + + +/* Data structure used to pass permission information to IPC operations. */ +struct ipc_perm + { + __key_t __key; /* Key. */ + unsigned short int uid; /* Owner's user ID. */ + unsigned short int gid; /* Owner's group ID. */ + unsigned short int cuid; /* Creator's user ID. */ + unsigned short int cgid; /* Creator's group ID. */ + unsigned short int mode; /* Read/write permission. */ + unsigned short int __seq; /* Sequence number. */ + }; diff --git a/libc/sysdeps/gnu/bits/msq.h b/libc/sysdeps/gnu/bits/msq.h new file mode 100644 index 000000000..5ca58ba39 --- /dev/null +++ b/libc/sysdeps/gnu/bits/msq.h @@ -0,0 +1,77 @@ +/* Copyright (C) 1995, 1996, 1997, 2000, 2002 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 Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#ifndef _SYS_MSG_H +# error "Never use <bits/msq.h> directly; include <sys/msg.h> instead." +#endif + +#include <bits/types.h> +#include <bits/ipctypes.h> + +/* Define options for message queue functions. */ +#define MSG_NOERROR 010000 /* no error if message is too big */ +#ifdef __USE_GNU +# define MSG_EXCEPT 020000 /* recv any msg except of specified type */ +#endif + +/* Types used in the structure definition. */ +typedef unsigned short int msgqnum_t; +typedef unsigned short int msglen_t; + + +/* Structure of record for one message inside the kernel. + The type `struct msg' is opaque. */ +struct msqid_ds +{ + struct ipc_perm msg_perm; /* structure describing operation permission */ + struct msg *__unbounded __msg_first; /* pointer to first message on queue */ + struct msg *__unbounded __msg_last; /* pointer to last message on queue */ + __time_t msg_stime; /* time of last msgsnd command */ + __time_t msg_rtime; /* time of last msgrcv command */ + __time_t msg_ctime; /* time of last change */ + struct wait_queue *__unbounded __wwait; /* ??? */ + struct wait_queue *__unbounded __rwait; /* ??? */ + unsigned short int __msg_cbytes;/* current number of bytes on queue */ + msgqnum_t msg_qnum; /* number of messages currently on queue */ + msglen_t msg_qbytes; /* max number of bytes allowed on queue */ + __ipc_pid_t msg_lspid; /* pid of last msgsnd() */ + __ipc_pid_t msg_lrpid; /* pid of last msgrcv() */ +}; + +#ifdef __USE_MISC + +# define msg_cbytes __msg_cbytes + +/* ipcs ctl commands */ +# define MSG_STAT 11 +# define MSG_INFO 12 + +/* buffer for msgctl calls IPC_INFO, MSG_INFO */ +struct msginfo + { + int msgpool; + int msgmap; + int msgmax; + int msgmnb; + int msgmni; + int msgssz; + int msgtql; + unsigned short int msgseg; + }; + +#endif /* __USE_MISC */ diff --git a/libc/sysdeps/gnu/bits/sem.h b/libc/sysdeps/gnu/bits/sem.h new file mode 100644 index 000000000..a2eea0d83 --- /dev/null +++ b/libc/sysdeps/gnu/bits/sem.h @@ -0,0 +1,88 @@ +/* Copyright (C) 1995, 1996, 1997, 1998, 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 Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#ifndef _SYS_SEM_H +# error "Never include <bits/sem.h> directly; use <sys/sem.h> instead." +#endif + +#include <sys/types.h> + +/* Flags for `semop'. */ +#define SEM_UNDO 0x1000 /* undo the operation on exit */ + +/* Commands for `semctl'. */ +#define GETPID 11 /* get sempid */ +#define GETVAL 12 /* get semval */ +#define GETALL 13 /* get all semval's */ +#define GETNCNT 14 /* get semncnt */ +#define GETZCNT 15 /* get semzcnt */ +#define SETVAL 16 /* set semval */ +#define SETALL 17 /* set all semval's */ + + +/* Data structure describing a set of semaphores. */ +struct semid_ds +{ + struct ipc_perm sem_perm; /* operation permission struct */ + __time_t sem_otime; /* last semop() time */ + __time_t sem_ctime; /* last time changed by semctl() */ + struct sem *__sembase; /* ptr to first semaphore in array */ + struct __sem_queue *__sem_pending; /* pending operations */ + struct __sem_queue *__sem_pending_last;/* last pending operation */ + struct __sem_undo *__undo; /* ondo requests on this array */ + unsigned short int sem_nsems; /* number of semaphores in set */ +}; + + +/* The user should define a union like the following to use it for arguments + for `semctl'. + + union semun + { + int val; <= value for SETVAL + struct semid_ds *buf; <= buffer for IPC_STAT & IPC_SET + unsigned short int *array; <= array for GETALL & SETALL + struct seminfo *__buf; <= buffer for IPC_INFO + }; + + Previous versions of this file used to define this union but this is + incorrect. One can test the macro _SEM_SEMUN_UNDEFINED to see whether + one must define the union or not. */ +#define _SEM_SEMUN_UNDEFINED 1 + +#ifdef __USE_MISC + +/* ipcs ctl cmds */ +# define SEM_STAT 18 +# define SEM_INFO 19 + +struct seminfo +{ + int semmap; + int semmni; + int semmns; + int semmnu; + int semmsl; + int semopm; + int semume; + int semusz; + int semvmx; + int semaem; +}; + +#endif /* __USE_MISC */ diff --git a/libc/sysdeps/gnu/bits/shm.h b/libc/sysdeps/gnu/bits/shm.h new file mode 100644 index 000000000..cbda9cebb --- /dev/null +++ b/libc/sysdeps/gnu/bits/shm.h @@ -0,0 +1,97 @@ +/* Copyright (C) 1995, 1996, 1997, 2000, 2002, 2004 + 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 Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#ifndef _SYS_SHM_H +# error "Never include <bits/shm.h> directly; use <sys/shm.h> instead." +#endif + +#include <bits/types.h> +#include <bits/ipctypes.h> + +/* Permission flag for shmget. */ +#define SHM_R 0400 /* or S_IRUGO from <linux/stat.h> */ +#define SHM_W 0200 /* or S_IWUGO from <linux/stat.h> */ + +/* Flags for `shmat'. */ +#define SHM_RDONLY 010000 /* attach read-only else read-write */ +#define SHM_RND 020000 /* round attach address to SHMLBA */ +#define SHM_REMAP 040000 /* take-over region on attach */ + +/* Commands for `shmctl'. */ +#define SHM_LOCK 11 /* lock segment (root only) */ +#define SHM_UNLOCK 12 /* unlock segment (root only) */ + +__BEGIN_DECLS + +/* Segment low boundary address multiple. */ +#define SHMLBA (__getpagesize ()) +extern int __getpagesize (void) __THROW __attribute__ ((__const__)); + + +/* Type to count number of attaches. */ +typedef unsigned short int shmatt_t; + +/* Data structure describing a set of semaphores. */ +struct shmid_ds + { + struct ipc_perm shm_perm; /* operation permission struct */ + int shm_segsz; /* size of segment in bytes */ + __time_t shm_atime; /* time of last shmat() */ + __time_t shm_dtime; /* time of last shmdt() */ + __time_t shm_ctime; /* time of last change by shmctl() */ + __ipc_pid_t shm_cpid; /* pid of creator */ + __ipc_pid_t shm_lpid; /* pid of last shmop */ + shmatt_t shm_nattch; /* number of current attaches */ + unsigned short int __shm_npages; /* size of segment (pages) */ + unsigned long int *__shm_pages; /* array of ptrs to frames -> SHMMAX */ + struct vm_area_struct *__attaches; /* descriptors for attaches */ + }; + +#ifdef __USE_MISC + +/* ipcs ctl commands */ +# define SHM_STAT 13 +# define SHM_INFO 14 + +/* shm_mode upper byte flags */ +# define SHM_DEST 01000 /* segment will be destroyed on last detach */ +# define SHM_LOCKED 02000 /* segment will not be swapped */ + +struct shminfo + { + int shmmax; + int shmmin; + int shmmni; + int shmseg; + int shmall; + }; + +struct shm_info + { + int used_ids; + unsigned long int shm_tot; /* total allocated shm */ + unsigned long int shm_rss; /* total resident shm */ + unsigned long int shm_swp; /* total swapped shm */ + unsigned long int swap_attempts; + unsigned long int swap_successes; + }; + +#endif /* __USE_MISC */ + +__END_DECLS diff --git a/libc/sysdeps/gnu/bits/utmp.h b/libc/sysdeps/gnu/bits/utmp.h new file mode 100644 index 000000000..e855ad73f --- /dev/null +++ b/libc/sysdeps/gnu/bits/utmp.h @@ -0,0 +1,125 @@ +/* The `struct utmp' type, describing entries in the utmp file. GNU version. + Copyright (C) 1993, 1996, 1997, 1998, 1999, 2002 + 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 Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#ifndef _UTMP_H +# error "Never include <bits/utmp.h> directly; use <utmp.h> instead." +#endif + +#include <paths.h> +#include <sys/time.h> +#include <sys/types.h> +#include <bits/wordsize.h> + + +#define UT_LINESIZE 32 +#define UT_NAMESIZE 32 +#define UT_HOSTSIZE 256 + + +/* The structure describing an entry in the database of + previous logins. */ +struct lastlog + { +#if __WORDSIZE == 64 && defined __WORDSIZE_COMPAT32 + int32_t ll_time; +#else + __time_t ll_time; +#endif + char ll_line[UT_LINESIZE]; + char ll_host[UT_HOSTSIZE]; + }; + + +/* The structure describing the status of a terminated process. This + type is used in `struct utmp' below. */ +struct exit_status + { + short int e_termination; /* Process termination status. */ + short int e_exit; /* Process exit status. */ + }; + + +/* The structure describing an entry in the user accounting database. */ +struct utmp +{ + short int ut_type; /* Type of login. */ + pid_t ut_pid; /* Process ID of login process. */ + char ut_line[UT_LINESIZE]; /* Devicename. */ + char ut_id[4]; /* Inittab ID. */ + char ut_user[UT_NAMESIZE]; /* Username. */ + char ut_host[UT_HOSTSIZE]; /* Hostname for remote login. */ + struct exit_status ut_exit; /* Exit status of a process marked + as DEAD_PROCESS. */ +/* The ut_session and ut_tv fields must be the same size when compiled + 32- and 64-bit. This allows data files and shared memory to be + shared between 32- and 64-bit applications. */ +#if __WORDSIZE == 64 && defined __WORDSIZE_COMPAT32 + int32_t ut_session; /* Session ID, used for windowing. */ + struct + { + int32_t tv_sec; /* Seconds. */ + int32_t tv_usec; /* Microseconds. */ + } ut_tv; /* Time entry was made. */ +#else + long int ut_session; /* Session ID, used for windowing. */ + struct timeval ut_tv; /* Time entry was made. */ +#endif + + int32_t ut_addr_v6[4]; /* Internet address of remote host. */ + char __unused[20]; /* Reserved for future use. */ +}; + +/* Backwards compatibility hacks. */ +#define ut_name ut_user +#ifndef _NO_UT_TIME +/* We have a problem here: `ut_time' is also used otherwise. Define + _NO_UT_TIME if the compiler complains. */ +# define ut_time ut_tv.tv_sec +#endif +#define ut_xtime ut_tv.tv_sec +#define ut_addr ut_addr_v6[0] + + +/* Values for the `ut_type' field of a `struct utmp'. */ +#define EMPTY 0 /* No valid user accounting information. */ + +#define RUN_LVL 1 /* The system's runlevel. */ +#define BOOT_TIME 2 /* Time of system boot. */ +#define NEW_TIME 3 /* Time after system clock changed. */ +#define OLD_TIME 4 /* Time when system clock changed. */ + +#define INIT_PROCESS 5 /* Process spawned by the init process. */ +#define LOGIN_PROCESS 6 /* Session leader of a logged in user. */ +#define USER_PROCESS 7 /* Normal process. */ +#define DEAD_PROCESS 8 /* Terminated process. */ + +#define ACCOUNTING 9 + +/* Old Linux name for the EMPTY type. */ +#define UT_UNKNOWN EMPTY + + +/* Tell the user that we have a modern system with UT_HOST, UT_PID, + UT_TYPE, UT_ID and UT_TV fields. */ +#define _HAVE_UT_TYPE 1 +#define _HAVE_UT_PID 1 +#define _HAVE_UT_ID 1 +#define _HAVE_UT_TV 1 +#define _HAVE_UT_HOST 1 diff --git a/libc/sysdeps/gnu/bits/utmpx.h b/libc/sysdeps/gnu/bits/utmpx.h new file mode 100644 index 000000000..c84cda6fe --- /dev/null +++ b/libc/sysdeps/gnu/bits/utmpx.h @@ -0,0 +1,103 @@ +/* Structures and definitions for the user accounting database. GNU version. + Copyright (C) 1997, 1998, 2000, 2001, 2002 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 Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#ifndef _UTMPX_H +# error "Never include <bits/utmpx.h> directly; use <utmpx.h> instead." +#endif + +#include <bits/types.h> +#include <sys/time.h> +#include <bits/wordsize.h> + + +#ifdef __USE_GNU +# include <paths.h> +# define _PATH_UTMPX _PATH_UTMP +# define _PATH_WTMPX _PATH_WTMP +#endif + + +#define __UT_LINESIZE 32 +#define __UT_NAMESIZE 32 +#define __UT_HOSTSIZE 256 + + +/* The structure describing the status of a terminated process. This + type is used in `struct utmpx' below. */ +struct __exit_status + { +#ifdef __USE_GNU + short int e_termination; /* Process termination status. */ + short int e_exit; /* Process exit status. */ +#else + short int __e_termination; /* Process termination status. */ + short int __e_exit; /* Process exit status. */ +#endif + }; + + +/* The structure describing an entry in the user accounting database. */ +struct utmpx +{ + short int ut_type; /* Type of login. */ + __pid_t ut_pid; /* Process ID of login process. */ + char ut_line[__UT_LINESIZE]; /* Devicename. */ + char ut_id[4]; /* Inittab ID. */ + char ut_user[__UT_NAMESIZE]; /* Username. */ + char ut_host[__UT_HOSTSIZE]; /* Hostname for remote login. */ + struct __exit_status ut_exit; /* Exit status of a process marked + as DEAD_PROCESS. */ + +/* The fields ut_session and ut_tv must be the same size when compiled + 32- and 64-bit. This allows files and shared memory to be shared + between 32- and 64-bit applications. */ +#if __WORDSIZE == 64 && defined __WORDSIZE_COMPAT32 + __int32_t ut_session; /* Session ID, used for windowing. */ + struct + { + __int32_t tv_sec; /* Seconds. */ + __int32_t tv_usec; /* Microseconds. */ + } ut_tv; /* Time entry was made. */ +#else + long int ut_session; /* Session ID, used for windowing. */ + struct timeval ut_tv; /* Time entry was made. */ +#endif + __int32_t ut_addr_v6[4]; /* Internet address of remote host. */ + char __unused[20]; /* Reserved for future use. */ +}; + + +/* Values for the `ut_type' field of a `struct utmpx'. */ +#define EMPTY 0 /* No valid user accounting information. */ + +#ifdef __USE_GNU +# define RUN_LVL 1 /* The system's runlevel. */ +#endif +#define BOOT_TIME 2 /* Time of system boot. */ +#define NEW_TIME 3 /* Time after system clock changed. */ +#define OLD_TIME 4 /* Time when system clock changed. */ + +#define INIT_PROCESS 5 /* Process spawned by the init process. */ +#define LOGIN_PROCESS 6 /* Session leader of a logged in user. */ +#define USER_PROCESS 7 /* Normal process. */ +#define DEAD_PROCESS 8 /* Terminated process. */ + +#ifdef __USE_GNU +# define ACCOUNTING 9 /* System accounting. */ +#endif diff --git a/libc/sysdeps/gnu/errlist-compat.awk b/libc/sysdeps/gnu/errlist-compat.awk new file mode 100644 index 000000000..ab67a18f6 --- /dev/null +++ b/libc/sysdeps/gnu/errlist-compat.awk @@ -0,0 +1,129 @@ +# awk script to generate errlist-compat.c +# Copyright (C) 2002, 2004 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 Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 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 +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, write to the Free +# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +# 02111-1307 USA. + +# +# This script takes the Versions file as input and looks for #errlist-compat +# magic comments, which have the form: +# #errlist-compat NNN +# where NNN is the number of elements in the sys_errlist for that version set. +# We need the awk variable `maxerr' defined to the current size of sys_errlist. +# +# If there is no magic comment matching the current size, we barf. +# Otherwise we generate code (errlist-compat.c) to define all the +# necessary compatibility symbols for older, smaller versions of sys_errlist. +# + +# These two rules catch the Versions file contents. +NF == 2 && $2 == "{" { last_version = $1; next } +$1 == "#errlist-compat" { + # Don't process any further Versions files + ARGC = ARGIND + 1; + cnt = $2 + 0; + if (cnt < 80) { + print "*** this line seems bogus:", $0 > "/dev/stderr"; + exit 1; + } + version[pos + 0] = cnt SUBSEP last_version; + pos++; + if (cnt < highest) { + printf "*** %s #errlist-compat counts are not sorted\n", ARGV[ARGIND]; + exit 1; + } + if (cnt > highest) + highest = cnt; + highest_version = last_version; + next; +} + +END { + if (! highest_version) { + print "/* No sys_errlist/sys_nerr symbols defined on this platform. */"; + exit 0; + } + + count = maxerr + 1; + + if (highest < count) { + printf "*** errlist.c count %d vs Versions sys_errlist@%s count %d\n", \ + count, highest_version, highest > "/dev/stderr"; + exit 1; + } + + lastv = ""; + for (n = 0; n < pos; ++n) { + split(version[n], t, SUBSEP) + v = t[2]; + gsub(/[^A-Z0-9_]/, "_", v); + if (lastv != "") + compat[lastv] = v; + lastv = v; + vcount[v] = t[1]; + } + + print "/* This file was generated by errlist-compat.awk; DO NOT EDIT! */\n"; + print "#include <shlib-compat.h>\n"; + + if (highest > count) { + printf "*** errlist.c count %d inflated to %s count %d (old errno.h?)\n", \ + count, highest_version, highest > "/dev/stderr"; + printf "#define ERR_MAX %d\n\n", highest; + } + + for (old in compat) { + new = compat[old]; + n = vcount[old]; + printf "#if SHLIB_COMPAT (libc, %s, %s)\n", old, new; + printf "# include <bits/wordsize.h>\n"; + printf "extern const char *const __sys_errlist_%s[NERR];\n", old; + printf "const int __sys_nerr_%s = %d;\n", old, n; + printf "strong_alias (_sys_errlist_internal, __sys_errlist_%s)\n", old; + printf "declare_symbol (__sys_errlist_%s, object, __WORDSIZE/8*%d)\n", \ + old, n; + printf "compat_symbol (libc, __sys_errlist_%s, sys_errlist, %s);\n", \ + old, old; + printf "compat_symbol (libc, __sys_nerr_%s, sys_nerr, %s);\n", old, old; + + printf "extern const char *const ___sys_errlist_%s[NERR];\n", old; + printf "extern const int __sys_nerr_%s;\n", old; + printf "strong_alias (__sys_errlist_%s, ___sys_errlist_%s)\n", old, old; + printf "strong_alias (__sys_nerr_%s, ___sys_nerr_%s)\n", old, old; + printf "compat_symbol (libc, ___sys_errlist_%s, _sys_errlist, %s);\n", \ + old, old; + printf "compat_symbol (libc, ___sys_nerr_%s, _sys_nerr, %s);\n", old, old; + printf "#endif\n\n"; + } + + printf "\ +extern const char *const __sys_errlist_internal[NERR];\n\ +extern const int __sys_nerr_internal;\n\ +strong_alias (_sys_errlist_internal, __sys_errlist_internal)\n\ +strong_alias (_sys_nerr_internal, __sys_nerr_internal)\n\ +extern const char *const sys_errlist[NERR];\n\ +versioned_symbol (libc, _sys_errlist_internal, sys_errlist, %s);\n\ +versioned_symbol (libc, __sys_errlist_internal, _sys_errlist, %s);\n\ +versioned_symbol (libc, _sys_nerr_internal, sys_nerr, %s);\n\ +versioned_symbol (libc, __sys_nerr_internal, _sys_nerr, %s);\n", \ + lastv, lastv, lastv, lastv; + + print "\n\ +link_warning (sys_errlist, \"\ +`sys_errlist' is deprecated; use `strerror' or `strerror_r' instead\")\n\ +link_warning (sys_nerr, \"\ +`sys_nerr' is deprecated; use `strerror' or `strerror_r' instead\")"; +} diff --git a/libc/sysdeps/gnu/errlist.awk b/libc/sysdeps/gnu/errlist.awk new file mode 100644 index 000000000..365ac817c --- /dev/null +++ b/libc/sysdeps/gnu/errlist.awk @@ -0,0 +1,121 @@ +# Copyright (C) 1991-1999,2002,2004,2005 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 Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 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 +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, write to the Free +# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +# 02111-1307 USA. + +# errno.texi contains lines like: +# @comment errno.h +# @comment POSIX.1: Function not implemented +# @deftypevr Macro int ENOSYS +# @comment errno 78 +# Descriptive paragraph... +# @end deftypevr + +BEGIN { + + # Here we list the E* names that might be duplicate names for the + # same integer value on some systems. This causes the code below + # to generate ``#if defined (ALIAS) && ALIAS != ORIGINAL'' in the code, + # so the output does not presume that these are in fact aliases. + # We list here all the known potential cases on any system, + # so that the C source we produce will do the right thing based + # on the actual #define'd values it's compiled with. + alias["EWOULDBLOCK"]= "EAGAIN"; + alias["EDEADLOCK"] = "EDEADLK"; + alias["ENOTSUP"] = "EOPNOTSUPP"; + + print "/* This file is generated from errno.texi by errlist.awk. */" + print ""; + print "#include <errno.h>"; + print "#include <libintl.h>"; + print ""; + print "#ifndef ERR_REMAP"; + print "# define ERR_REMAP(n) n"; + print "#endif"; + print ""; + + print "#if !defined EMIT_ERR_MAX && !defined ERRLIST_NO_COMPAT"; + print "# include <errlist-compat.h>"; + print "#endif"; + print "#ifdef ERR_MAX"; + print "# define ERRLIST_SIZE ERR_MAX + 1"; + print "#else" + print "# define ERRLIST_SIZE"; + print "#endif"; + + print "const char *const _sys_errlist_internal[ERRLIST_SIZE] ="; + print " {"; + print " [0] = N_(\"Success\")," + } + +$1 == "@comment" && $2 == "errno.h" { errnoh=1; next } +errnoh == 1 && $1 == "@comment" \ + { + ++errnoh; + etext = $3; + for (i = 4; i <= NF; ++i) + etext = etext " " $i; + next; + } +errnoh == 2 && $1 == "@deftypevr" && $2 == "Macro" && $3 == "int" \ + { + e = $4; errnoh++; next; + } +errnoh == 3 && $1 == "@comment" && $2 == "errno" \ + { + errno = $3 + 0; + if (alias[e]) + printf "#if defined (%s) && %s != %s\n", e, e, alias[e]; + else + printf "#ifdef %s\n", e; + errnoh = 4; + desc=""; + next; + } +errnoh == 4 && $1 == "@end" && $2 == "deftypevr" \ + { + printf "/*%s */\n", desc; + printf " [ERR_REMAP (%s)] = N_(\"%s\"),\n", e, etext; + printf "# if %s > ERR_MAX\n", e; + print "# undef ERR_MAX"; + printf "# define ERR_MAX %s\n", e; + print "# endif"; + print "#endif"; + errnoh = 0; + next; + } +errnoh == 4 \ + { + # This magic tag in C comments gets them copied into libc.pot. + desc = desc "\nTRANS " $0; next + } +{ errnoh=0 } +END { + print " };"; + print ""; + print "#define NERR \\"; + print " (sizeof _sys_errlist_internal / sizeof _sys_errlist_internal [0])"; + print "const int _sys_nerr_internal = NERR;" + print ""; + print "#if !defined NOT_IN_libc && !ERRLIST_NO_COMPAT"; + print "# include <errlist-compat.c>"; + print "#endif"; + print ""; + print "#ifdef EMIT_ERR_MAX"; + print "void dummy (void)" + print "{ asm volatile (\" @@@ %0 @@@ \" : : \"i\" (ERR_REMAP (ERR_MAX))); }" + print "#endif"; +} diff --git a/libc/sysdeps/gnu/errlist.c b/libc/sysdeps/gnu/errlist.c new file mode 100644 index 000000000..56da01756 --- /dev/null +++ b/libc/sysdeps/gnu/errlist.c @@ -0,0 +1,1472 @@ +/* This file is generated from errno.texi by errlist.awk. */ + +#include <errno.h> +#include <libintl.h> + +#ifndef ERR_REMAP +# define ERR_REMAP(n) n +#endif + +#if !defined EMIT_ERR_MAX && !defined ERRLIST_NO_COMPAT +# include <errlist-compat.h> +#endif +#ifdef ERR_MAX +# define ERRLIST_SIZE ERR_MAX + 1 +#else +# define ERRLIST_SIZE +#endif +const char *const _sys_errlist_internal[ERRLIST_SIZE] = + { + [0] = N_("Success"), +#ifdef EPERM +/* +TRANS Operation not permitted; only the owner of the file (or other resource) +TRANS or processes with special privileges can perform the operation. */ + [ERR_REMAP (EPERM)] = N_("Operation not permitted"), +# if EPERM > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EPERM +# endif +#endif +#ifdef ENOENT +/* +TRANS No such file or directory. This is a ``file doesn't exist'' error +TRANS for ordinary files that are referenced in contexts where they are +TRANS expected to already exist. */ + [ERR_REMAP (ENOENT)] = N_("No such file or directory"), +# if ENOENT > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOENT +# endif +#endif +#ifdef ESRCH +/* +TRANS No process matches the specified process ID. */ + [ERR_REMAP (ESRCH)] = N_("No such process"), +# if ESRCH > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ESRCH +# endif +#endif +#ifdef EINTR +/* +TRANS Interrupted function call; an asynchronous signal occurred and prevented +TRANS completion of the call. When this happens, you should try the call +TRANS again. +TRANS +TRANS You can choose to have functions resume after a signal that is handled, +TRANS rather than failing with @code{EINTR}; see @ref{Interrupted +TRANS Primitives}. */ + [ERR_REMAP (EINTR)] = N_("Interrupted system call"), +# if EINTR > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EINTR +# endif +#endif +#ifdef EIO +/* +TRANS Input/output error; usually used for physical read or write errors. */ + [ERR_REMAP (EIO)] = N_("Input/output error"), +# if EIO > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EIO +# endif +#endif +#ifdef ENXIO +/* +TRANS No such device or address. The system tried to use the device +TRANS represented by a file you specified, and it couldn't find the device. +TRANS This can mean that the device file was installed incorrectly, or that +TRANS the physical device is missing or not correctly attached to the +TRANS computer. */ + [ERR_REMAP (ENXIO)] = N_("No such device or address"), +# if ENXIO > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENXIO +# endif +#endif +#ifdef E2BIG +/* +TRANS Argument list too long; used when the arguments passed to a new program +TRANS being executed with one of the @code{exec} functions (@pxref{Executing a +TRANS File}) occupy too much memory space. This condition never arises in the +TRANS GNU system. */ + [ERR_REMAP (E2BIG)] = N_("Argument list too long"), +# if E2BIG > ERR_MAX +# undef ERR_MAX +# define ERR_MAX E2BIG +# endif +#endif +#ifdef ENOEXEC +/* +TRANS Invalid executable file format. This condition is detected by the +TRANS @code{exec} functions; see @ref{Executing a File}. */ + [ERR_REMAP (ENOEXEC)] = N_("Exec format error"), +# if ENOEXEC > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOEXEC +# endif +#endif +#ifdef EBADF +/* +TRANS Bad file descriptor; for example, I/O on a descriptor that has been +TRANS closed or reading from a descriptor open only for writing (or vice +TRANS versa). */ + [ERR_REMAP (EBADF)] = N_("Bad file descriptor"), +# if EBADF > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EBADF +# endif +#endif +#ifdef ECHILD +/* +TRANS There are no child processes. This error happens on operations that are +TRANS supposed to manipulate child processes, when there aren't any processes +TRANS to manipulate. */ + [ERR_REMAP (ECHILD)] = N_("No child processes"), +# if ECHILD > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ECHILD +# endif +#endif +#ifdef EDEADLK +/* +TRANS Deadlock avoided; allocating a system resource would have resulted in a +TRANS deadlock situation. The system does not guarantee that it will notice +TRANS all such situations. This error means you got lucky and the system +TRANS noticed; it might just hang. @xref{File Locks}, for an example. */ + [ERR_REMAP (EDEADLK)] = N_("Resource deadlock avoided"), +# if EDEADLK > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EDEADLK +# endif +#endif +#ifdef ENOMEM +/* +TRANS No memory available. The system cannot allocate more virtual memory +TRANS because its capacity is full. */ + [ERR_REMAP (ENOMEM)] = N_("Cannot allocate memory"), +# if ENOMEM > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOMEM +# endif +#endif +#ifdef EACCES +/* +TRANS Permission denied; the file permissions do not allow the attempted operation. */ + [ERR_REMAP (EACCES)] = N_("Permission denied"), +# if EACCES > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EACCES +# endif +#endif +#ifdef EFAULT +/* +TRANS Bad address; an invalid pointer was detected. +TRANS In the GNU system, this error never happens; you get a signal instead. */ + [ERR_REMAP (EFAULT)] = N_("Bad address"), +# if EFAULT > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EFAULT +# endif +#endif +#ifdef ENOTBLK +/* +TRANS A file that isn't a block special file was given in a situation that +TRANS requires one. For example, trying to mount an ordinary file as a file +TRANS system in Unix gives this error. */ + [ERR_REMAP (ENOTBLK)] = N_("Block device required"), +# if ENOTBLK > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOTBLK +# endif +#endif +#ifdef EBUSY +/* +TRANS Resource busy; a system resource that can't be shared is already in use. +TRANS For example, if you try to delete a file that is the root of a currently +TRANS mounted filesystem, you get this error. */ + [ERR_REMAP (EBUSY)] = N_("Device or resource busy"), +# if EBUSY > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EBUSY +# endif +#endif +#ifdef EEXIST +/* +TRANS File exists; an existing file was specified in a context where it only +TRANS makes sense to specify a new file. */ + [ERR_REMAP (EEXIST)] = N_("File exists"), +# if EEXIST > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EEXIST +# endif +#endif +#ifdef EXDEV +/* +TRANS An attempt to make an improper link across file systems was detected. +TRANS This happens not only when you use @code{link} (@pxref{Hard Links}) but +TRANS also when you rename a file with @code{rename} (@pxref{Renaming Files}). */ + [ERR_REMAP (EXDEV)] = N_("Invalid cross-device link"), +# if EXDEV > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EXDEV +# endif +#endif +#ifdef ENODEV +/* +TRANS The wrong type of device was given to a function that expects a +TRANS particular sort of device. */ + [ERR_REMAP (ENODEV)] = N_("No such device"), +# if ENODEV > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENODEV +# endif +#endif +#ifdef ENOTDIR +/* +TRANS A file that isn't a directory was specified when a directory is required. */ + [ERR_REMAP (ENOTDIR)] = N_("Not a directory"), +# if ENOTDIR > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOTDIR +# endif +#endif +#ifdef EISDIR +/* +TRANS File is a directory; you cannot open a directory for writing, +TRANS or create or remove hard links to it. */ + [ERR_REMAP (EISDIR)] = N_("Is a directory"), +# if EISDIR > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EISDIR +# endif +#endif +#ifdef EINVAL +/* +TRANS Invalid argument. This is used to indicate various kinds of problems +TRANS with passing the wrong argument to a library function. */ + [ERR_REMAP (EINVAL)] = N_("Invalid argument"), +# if EINVAL > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EINVAL +# endif +#endif +#ifdef EMFILE +/* +TRANS The current process has too many files open and can't open any more. +TRANS Duplicate descriptors do count toward this limit. +TRANS +TRANS In BSD and GNU, the number of open files is controlled by a resource +TRANS limit that can usually be increased. If you get this error, you might +TRANS want to increase the @code{RLIMIT_NOFILE} limit or make it unlimited; +TRANS @pxref{Limits on Resources}. */ + [ERR_REMAP (EMFILE)] = N_("Too many open files"), +# if EMFILE > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EMFILE +# endif +#endif +#ifdef ENFILE +/* +TRANS There are too many distinct file openings in the entire system. Note +TRANS that any number of linked channels count as just one file opening; see +TRANS @ref{Linked Channels}. This error never occurs in the GNU system. */ + [ERR_REMAP (ENFILE)] = N_("Too many open files in system"), +# if ENFILE > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENFILE +# endif +#endif +#ifdef ENOTTY +/* +TRANS Inappropriate I/O control operation, such as trying to set terminal +TRANS modes on an ordinary file. */ + [ERR_REMAP (ENOTTY)] = N_("Inappropriate ioctl for device"), +# if ENOTTY > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOTTY +# endif +#endif +#ifdef ETXTBSY +/* +TRANS An attempt to execute a file that is currently open for writing, or +TRANS write to a file that is currently being executed. Often using a +TRANS debugger to run a program is considered having it open for writing and +TRANS will cause this error. (The name stands for ``text file busy''.) This +TRANS is not an error in the GNU system; the text is copied as necessary. */ + [ERR_REMAP (ETXTBSY)] = N_("Text file busy"), +# if ETXTBSY > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ETXTBSY +# endif +#endif +#ifdef EFBIG +/* +TRANS File too big; the size of a file would be larger than allowed by the system. */ + [ERR_REMAP (EFBIG)] = N_("File too large"), +# if EFBIG > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EFBIG +# endif +#endif +#ifdef ENOSPC +/* +TRANS No space left on device; write operation on a file failed because the +TRANS disk is full. */ + [ERR_REMAP (ENOSPC)] = N_("No space left on device"), +# if ENOSPC > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOSPC +# endif +#endif +#ifdef ESPIPE +/* +TRANS Invalid seek operation (such as on a pipe). */ + [ERR_REMAP (ESPIPE)] = N_("Illegal seek"), +# if ESPIPE > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ESPIPE +# endif +#endif +#ifdef EROFS +/* +TRANS An attempt was made to modify something on a read-only file system. */ + [ERR_REMAP (EROFS)] = N_("Read-only file system"), +# if EROFS > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EROFS +# endif +#endif +#ifdef EMLINK +/* +TRANS Too many links; the link count of a single file would become too large. +TRANS @code{rename} can cause this error if the file being renamed already has +TRANS as many links as it can take (@pxref{Renaming Files}). */ + [ERR_REMAP (EMLINK)] = N_("Too many links"), +# if EMLINK > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EMLINK +# endif +#endif +#ifdef EPIPE +/* +TRANS Broken pipe; there is no process reading from the other end of a pipe. +TRANS Every library function that returns this error code also generates a +TRANS @code{SIGPIPE} signal; this signal terminates the program if not handled +TRANS or blocked. Thus, your program will never actually see @code{EPIPE} +TRANS unless it has handled or blocked @code{SIGPIPE}. */ + [ERR_REMAP (EPIPE)] = N_("Broken pipe"), +# if EPIPE > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EPIPE +# endif +#endif +#ifdef EDOM +/* +TRANS Domain error; used by mathematical functions when an argument value does +TRANS not fall into the domain over which the function is defined. */ + [ERR_REMAP (EDOM)] = N_("Numerical argument out of domain"), +# if EDOM > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EDOM +# endif +#endif +#ifdef ERANGE +/* +TRANS Range error; used by mathematical functions when the result value is +TRANS not representable because of overflow or underflow. */ + [ERR_REMAP (ERANGE)] = N_("Numerical result out of range"), +# if ERANGE > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ERANGE +# endif +#endif +#ifdef EAGAIN +/* +TRANS Resource temporarily unavailable; the call might work if you try again +TRANS later. The macro @code{EWOULDBLOCK} is another name for @code{EAGAIN}; +TRANS they are always the same in the GNU C library. +TRANS +TRANS This error can happen in a few different situations: +TRANS +TRANS @itemize @bullet +TRANS @item +TRANS An operation that would block was attempted on an object that has +TRANS non-blocking mode selected. Trying the same operation again will block +TRANS until some external condition makes it possible to read, write, or +TRANS connect (whatever the operation). You can use @code{select} to find out +TRANS when the operation will be possible; @pxref{Waiting for I/O}. +TRANS +TRANS @strong{Portability Note:} In many older Unix systems, this condition +TRANS was indicated by @code{EWOULDBLOCK}, which was a distinct error code +TRANS different from @code{EAGAIN}. To make your program portable, you should +TRANS check for both codes and treat them the same. +TRANS +TRANS @item +TRANS A temporary resource shortage made an operation impossible. @code{fork} +TRANS can return this error. It indicates that the shortage is expected to +TRANS pass, so your program can try the call again later and it may succeed. +TRANS It is probably a good idea to delay for a few seconds before trying it +TRANS again, to allow time for other processes to release scarce resources. +TRANS Such shortages are usually fairly serious and affect the whole system, +TRANS so usually an interactive program should report the error to the user +TRANS and return to its command loop. +TRANS @end itemize */ + [ERR_REMAP (EAGAIN)] = N_("Resource temporarily unavailable"), +# if EAGAIN > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EAGAIN +# endif +#endif +#if defined (EWOULDBLOCK) && EWOULDBLOCK != EAGAIN +/* +TRANS In the GNU C library, this is another name for @code{EAGAIN} (above). +TRANS The values are always the same, on every operating system. +TRANS +TRANS C libraries in many older Unix systems have @code{EWOULDBLOCK} as a +TRANS separate error code. */ + [ERR_REMAP (EWOULDBLOCK)] = N_("Operation would block"), +# if EWOULDBLOCK > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EWOULDBLOCK +# endif +#endif +#ifdef EINPROGRESS +/* +TRANS An operation that cannot complete immediately was initiated on an object +TRANS that has non-blocking mode selected. Some functions that must always +TRANS block (such as @code{connect}; @pxref{Connecting}) never return +TRANS @code{EAGAIN}. Instead, they return @code{EINPROGRESS} to indicate that +TRANS the operation has begun and will take some time. Attempts to manipulate +TRANS the object before the call completes return @code{EALREADY}. You can +TRANS use the @code{select} function to find out when the pending operation +TRANS has completed; @pxref{Waiting for I/O}. */ + [ERR_REMAP (EINPROGRESS)] = N_("Operation now in progress"), +# if EINPROGRESS > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EINPROGRESS +# endif +#endif +#ifdef EALREADY +/* +TRANS An operation is already in progress on an object that has non-blocking +TRANS mode selected. */ + [ERR_REMAP (EALREADY)] = N_("Operation already in progress"), +# if EALREADY > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EALREADY +# endif +#endif +#ifdef ENOTSOCK +/* +TRANS A file that isn't a socket was specified when a socket is required. */ + [ERR_REMAP (ENOTSOCK)] = N_("Socket operation on non-socket"), +# if ENOTSOCK > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOTSOCK +# endif +#endif +#ifdef EMSGSIZE +/* +TRANS The size of a message sent on a socket was larger than the supported +TRANS maximum size. */ + [ERR_REMAP (EMSGSIZE)] = N_("Message too long"), +# if EMSGSIZE > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EMSGSIZE +# endif +#endif +#ifdef EPROTOTYPE +/* +TRANS The socket type does not support the requested communications protocol. */ + [ERR_REMAP (EPROTOTYPE)] = N_("Protocol wrong type for socket"), +# if EPROTOTYPE > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EPROTOTYPE +# endif +#endif +#ifdef ENOPROTOOPT +/* +TRANS You specified a socket option that doesn't make sense for the +TRANS particular protocol being used by the socket. @xref{Socket Options}. */ + [ERR_REMAP (ENOPROTOOPT)] = N_("Protocol not available"), +# if ENOPROTOOPT > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOPROTOOPT +# endif +#endif +#ifdef EPROTONOSUPPORT +/* +TRANS The socket domain does not support the requested communications protocol +TRANS (perhaps because the requested protocol is completely invalid). +TRANS @xref{Creating a Socket}. */ + [ERR_REMAP (EPROTONOSUPPORT)] = N_("Protocol not supported"), +# if EPROTONOSUPPORT > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EPROTONOSUPPORT +# endif +#endif +#ifdef ESOCKTNOSUPPORT +/* +TRANS The socket type is not supported. */ + [ERR_REMAP (ESOCKTNOSUPPORT)] = N_("Socket type not supported"), +# if ESOCKTNOSUPPORT > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ESOCKTNOSUPPORT +# endif +#endif +#ifdef EOPNOTSUPP +/* +TRANS The operation you requested is not supported. Some socket functions +TRANS don't make sense for all types of sockets, and others may not be +TRANS implemented for all communications protocols. In the GNU system, this +TRANS error can happen for many calls when the object does not support the +TRANS particular operation; it is a generic indication that the server knows +TRANS nothing to do for that call. */ + [ERR_REMAP (EOPNOTSUPP)] = N_("Operation not supported"), +# if EOPNOTSUPP > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EOPNOTSUPP +# endif +#endif +#ifdef EPFNOSUPPORT +/* +TRANS The socket communications protocol family you requested is not supported. */ + [ERR_REMAP (EPFNOSUPPORT)] = N_("Protocol family not supported"), +# if EPFNOSUPPORT > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EPFNOSUPPORT +# endif +#endif +#ifdef EAFNOSUPPORT +/* +TRANS The address family specified for a socket is not supported; it is +TRANS inconsistent with the protocol being used on the socket. @xref{Sockets}. */ + [ERR_REMAP (EAFNOSUPPORT)] = N_("Address family not supported by protocol"), +# if EAFNOSUPPORT > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EAFNOSUPPORT +# endif +#endif +#ifdef EADDRINUSE +/* +TRANS The requested socket address is already in use. @xref{Socket Addresses}. */ + [ERR_REMAP (EADDRINUSE)] = N_("Address already in use"), +# if EADDRINUSE > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EADDRINUSE +# endif +#endif +#ifdef EADDRNOTAVAIL +/* +TRANS The requested socket address is not available; for example, you tried +TRANS to give a socket a name that doesn't match the local host name. +TRANS @xref{Socket Addresses}. */ + [ERR_REMAP (EADDRNOTAVAIL)] = N_("Cannot assign requested address"), +# if EADDRNOTAVAIL > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EADDRNOTAVAIL +# endif +#endif +#ifdef ENETDOWN +/* +TRANS A socket operation failed because the network was down. */ + [ERR_REMAP (ENETDOWN)] = N_("Network is down"), +# if ENETDOWN > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENETDOWN +# endif +#endif +#ifdef ENETUNREACH +/* +TRANS A socket operation failed because the subnet containing the remote host +TRANS was unreachable. */ + [ERR_REMAP (ENETUNREACH)] = N_("Network is unreachable"), +# if ENETUNREACH > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENETUNREACH +# endif +#endif +#ifdef ENETRESET +/* +TRANS A network connection was reset because the remote host crashed. */ + [ERR_REMAP (ENETRESET)] = N_("Network dropped connection on reset"), +# if ENETRESET > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENETRESET +# endif +#endif +#ifdef ECONNABORTED +/* +TRANS A network connection was aborted locally. */ + [ERR_REMAP (ECONNABORTED)] = N_("Software caused connection abort"), +# if ECONNABORTED > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ECONNABORTED +# endif +#endif +#ifdef ECONNRESET +/* +TRANS A network connection was closed for reasons outside the control of the +TRANS local host, such as by the remote machine rebooting or an unrecoverable +TRANS protocol violation. */ + [ERR_REMAP (ECONNRESET)] = N_("Connection reset by peer"), +# if ECONNRESET > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ECONNRESET +# endif +#endif +#ifdef ENOBUFS +/* +TRANS The kernel's buffers for I/O operations are all in use. In GNU, this +TRANS error is always synonymous with @code{ENOMEM}; you may get one or the +TRANS other from network operations. */ + [ERR_REMAP (ENOBUFS)] = N_("No buffer space available"), +# if ENOBUFS > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOBUFS +# endif +#endif +#ifdef EISCONN +/* +TRANS You tried to connect a socket that is already connected. +TRANS @xref{Connecting}. */ + [ERR_REMAP (EISCONN)] = N_("Transport endpoint is already connected"), +# if EISCONN > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EISCONN +# endif +#endif +#ifdef ENOTCONN +/* +TRANS The socket is not connected to anything. You get this error when you +TRANS try to transmit data over a socket, without first specifying a +TRANS destination for the data. For a connectionless socket (for datagram +TRANS protocols, such as UDP), you get @code{EDESTADDRREQ} instead. */ + [ERR_REMAP (ENOTCONN)] = N_("Transport endpoint is not connected"), +# if ENOTCONN > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOTCONN +# endif +#endif +#ifdef EDESTADDRREQ +/* +TRANS No default destination address was set for the socket. You get this +TRANS error when you try to transmit data over a connectionless socket, +TRANS without first specifying a destination for the data with @code{connect}. */ + [ERR_REMAP (EDESTADDRREQ)] = N_("Destination address required"), +# if EDESTADDRREQ > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EDESTADDRREQ +# endif +#endif +#ifdef ESHUTDOWN +/* +TRANS The socket has already been shut down. */ + [ERR_REMAP (ESHUTDOWN)] = N_("Cannot send after transport endpoint shutdown"), +# if ESHUTDOWN > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ESHUTDOWN +# endif +#endif +#ifdef ETOOMANYREFS +/* +TRANS ??? */ + [ERR_REMAP (ETOOMANYREFS)] = N_("Too many references: cannot splice"), +# if ETOOMANYREFS > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ETOOMANYREFS +# endif +#endif +#ifdef ETIMEDOUT +/* +TRANS A socket operation with a specified timeout received no response during +TRANS the timeout period. */ + [ERR_REMAP (ETIMEDOUT)] = N_("Connection timed out"), +# if ETIMEDOUT > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ETIMEDOUT +# endif +#endif +#ifdef ECONNREFUSED +/* +TRANS A remote host refused to allow the network connection (typically because +TRANS it is not running the requested service). */ + [ERR_REMAP (ECONNREFUSED)] = N_("Connection refused"), +# if ECONNREFUSED > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ECONNREFUSED +# endif +#endif +#ifdef ELOOP +/* +TRANS Too many levels of symbolic links were encountered in looking up a file name. +TRANS This often indicates a cycle of symbolic links. */ + [ERR_REMAP (ELOOP)] = N_("Too many levels of symbolic links"), +# if ELOOP > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ELOOP +# endif +#endif +#ifdef ENAMETOOLONG +/* +TRANS Filename too long (longer than @code{PATH_MAX}; @pxref{Limits for +TRANS Files}) or host name too long (in @code{gethostname} or +TRANS @code{sethostname}; @pxref{Host Identification}). */ + [ERR_REMAP (ENAMETOOLONG)] = N_("File name too long"), +# if ENAMETOOLONG > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENAMETOOLONG +# endif +#endif +#ifdef EHOSTDOWN +/* +TRANS The remote host for a requested network connection is down. */ + [ERR_REMAP (EHOSTDOWN)] = N_("Host is down"), +# if EHOSTDOWN > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EHOSTDOWN +# endif +#endif +#ifdef EHOSTUNREACH +/* +TRANS The remote host for a requested network connection is not reachable. */ + [ERR_REMAP (EHOSTUNREACH)] = N_("No route to host"), +# if EHOSTUNREACH > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EHOSTUNREACH +# endif +#endif +#ifdef ENOTEMPTY +/* +TRANS Directory not empty, where an empty directory was expected. Typically, +TRANS this error occurs when you are trying to delete a directory. */ + [ERR_REMAP (ENOTEMPTY)] = N_("Directory not empty"), +# if ENOTEMPTY > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOTEMPTY +# endif +#endif +#ifdef EPROCLIM +/* +TRANS This means that the per-user limit on new process would be exceeded by +TRANS an attempted @code{fork}. @xref{Limits on Resources}, for details on +TRANS the @code{RLIMIT_NPROC} limit. */ + [ERR_REMAP (EPROCLIM)] = N_("Too many processes"), +# if EPROCLIM > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EPROCLIM +# endif +#endif +#ifdef EUSERS +/* +TRANS The file quota system is confused because there are too many users. +TRANS @c This can probably happen in a GNU system when using NFS. */ + [ERR_REMAP (EUSERS)] = N_("Too many users"), +# if EUSERS > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EUSERS +# endif +#endif +#ifdef EDQUOT +/* +TRANS The user's disk quota was exceeded. */ + [ERR_REMAP (EDQUOT)] = N_("Disk quota exceeded"), +# if EDQUOT > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EDQUOT +# endif +#endif +#ifdef ESTALE +/* +TRANS Stale NFS file handle. This indicates an internal confusion in the NFS +TRANS system which is due to file system rearrangements on the server host. +TRANS Repairing this condition usually requires unmounting and remounting +TRANS the NFS file system on the local host. */ + [ERR_REMAP (ESTALE)] = N_("Stale NFS file handle"), +# if ESTALE > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ESTALE +# endif +#endif +#ifdef EREMOTE +/* +TRANS An attempt was made to NFS-mount a remote file system with a file name that +TRANS already specifies an NFS-mounted file. +TRANS (This is an error on some operating systems, but we expect it to work +TRANS properly on the GNU system, making this error code impossible.) */ + [ERR_REMAP (EREMOTE)] = N_("Object is remote"), +# if EREMOTE > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EREMOTE +# endif +#endif +#ifdef EBADRPC +/* +TRANS ??? */ + [ERR_REMAP (EBADRPC)] = N_("RPC struct is bad"), +# if EBADRPC > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EBADRPC +# endif +#endif +#ifdef ERPCMISMATCH +/* +TRANS ??? */ + [ERR_REMAP (ERPCMISMATCH)] = N_("RPC version wrong"), +# if ERPCMISMATCH > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ERPCMISMATCH +# endif +#endif +#ifdef EPROGUNAVAIL +/* +TRANS ??? */ + [ERR_REMAP (EPROGUNAVAIL)] = N_("RPC program not available"), +# if EPROGUNAVAIL > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EPROGUNAVAIL +# endif +#endif +#ifdef EPROGMISMATCH +/* +TRANS ??? */ + [ERR_REMAP (EPROGMISMATCH)] = N_("RPC program version wrong"), +# if EPROGMISMATCH > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EPROGMISMATCH +# endif +#endif +#ifdef EPROCUNAVAIL +/* +TRANS ??? */ + [ERR_REMAP (EPROCUNAVAIL)] = N_("RPC bad procedure for program"), +# if EPROCUNAVAIL > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EPROCUNAVAIL +# endif +#endif +#ifdef ENOLCK +/* +TRANS No locks available. This is used by the file locking facilities; see +TRANS @ref{File Locks}. This error is never generated by the GNU system, but +TRANS it can result from an operation to an NFS server running another +TRANS operating system. */ + [ERR_REMAP (ENOLCK)] = N_("No locks available"), +# if ENOLCK > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOLCK +# endif +#endif +#ifdef EFTYPE +/* +TRANS Inappropriate file type or format. The file was the wrong type for the +TRANS operation, or a data file had the wrong format. +TRANS +TRANS On some systems @code{chmod} returns this error if you try to set the +TRANS sticky bit on a non-directory file; @pxref{Setting Permissions}. */ + [ERR_REMAP (EFTYPE)] = N_("Inappropriate file type or format"), +# if EFTYPE > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EFTYPE +# endif +#endif +#ifdef EAUTH +/* +TRANS ??? */ + [ERR_REMAP (EAUTH)] = N_("Authentication error"), +# if EAUTH > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EAUTH +# endif +#endif +#ifdef ENEEDAUTH +/* +TRANS ??? */ + [ERR_REMAP (ENEEDAUTH)] = N_("Need authenticator"), +# if ENEEDAUTH > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENEEDAUTH +# endif +#endif +#ifdef ENOSYS +/* +TRANS Function not implemented. This indicates that the function called is +TRANS not implemented at all, either in the C library itself or in the +TRANS operating system. When you get this error, you can be sure that this +TRANS particular function will always fail with @code{ENOSYS} unless you +TRANS install a new version of the C library or the operating system. */ + [ERR_REMAP (ENOSYS)] = N_("Function not implemented"), +# if ENOSYS > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOSYS +# endif +#endif +#if defined (ENOTSUP) && ENOTSUP != EOPNOTSUPP +/* +TRANS Not supported. A function returns this error when certain parameter +TRANS values are valid, but the functionality they request is not available. +TRANS This can mean that the function does not implement a particular command +TRANS or option value or flag bit at all. For functions that operate on some +TRANS object given in a parameter, such as a file descriptor or a port, it +TRANS might instead mean that only @emph{that specific object} (file +TRANS descriptor, port, etc.) is unable to support the other parameters given; +TRANS different file descriptors might support different ranges of parameter +TRANS values. +TRANS +TRANS If the entire function is not available at all in the implementation, +TRANS it returns @code{ENOSYS} instead. */ + [ERR_REMAP (ENOTSUP)] = N_("Not supported"), +# if ENOTSUP > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOTSUP +# endif +#endif +#ifdef EILSEQ +/* +TRANS While decoding a multibyte character the function came along an invalid +TRANS or an incomplete sequence of bytes or the given wide character is invalid. */ + [ERR_REMAP (EILSEQ)] = N_("Invalid or incomplete multibyte or wide character"), +# if EILSEQ > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EILSEQ +# endif +#endif +#ifdef EBACKGROUND +/* +TRANS In the GNU system, servers supporting the @code{term} protocol return +TRANS this error for certain operations when the caller is not in the +TRANS foreground process group of the terminal. Users do not usually see this +TRANS error because functions such as @code{read} and @code{write} translate +TRANS it into a @code{SIGTTIN} or @code{SIGTTOU} signal. @xref{Job Control}, +TRANS for information on process groups and these signals. */ + [ERR_REMAP (EBACKGROUND)] = N_("Inappropriate operation for background process"), +# if EBACKGROUND > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EBACKGROUND +# endif +#endif +#ifdef EDIED +/* +TRANS In the GNU system, opening a file returns this error when the file is +TRANS translated by a program and the translator program dies while starting +TRANS up, before it has connected to the file. */ + [ERR_REMAP (EDIED)] = N_("Translator died"), +# if EDIED > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EDIED +# endif +#endif +#ifdef ED +/* +TRANS The experienced user will know what is wrong. +TRANS @c This error code is a joke. Its perror text is part of the joke. +TRANS @c Don't change it. */ + [ERR_REMAP (ED)] = N_("?"), +# if ED > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ED +# endif +#endif +#ifdef EGREGIOUS +/* +TRANS You did @strong{what}? */ + [ERR_REMAP (EGREGIOUS)] = N_("You really blew it this time"), +# if EGREGIOUS > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EGREGIOUS +# endif +#endif +#ifdef EIEIO +/* +TRANS Go home and have a glass of warm, dairy-fresh milk. */ + [ERR_REMAP (EIEIO)] = N_("Computer bought the farm"), +# if EIEIO > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EIEIO +# endif +#endif +#ifdef EGRATUITOUS +/* +TRANS This error code has no purpose. */ + [ERR_REMAP (EGRATUITOUS)] = N_("Gratuitous error"), +# if EGRATUITOUS > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EGRATUITOUS +# endif +#endif +#ifdef EBADMSG +/* */ + [ERR_REMAP (EBADMSG)] = N_("Bad message"), +# if EBADMSG > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EBADMSG +# endif +#endif +#ifdef EIDRM +/* */ + [ERR_REMAP (EIDRM)] = N_("Identifier removed"), +# if EIDRM > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EIDRM +# endif +#endif +#ifdef EMULTIHOP +/* */ + [ERR_REMAP (EMULTIHOP)] = N_("Multihop attempted"), +# if EMULTIHOP > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EMULTIHOP +# endif +#endif +#ifdef ENODATA +/* */ + [ERR_REMAP (ENODATA)] = N_("No data available"), +# if ENODATA > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENODATA +# endif +#endif +#ifdef ENOLINK +/* */ + [ERR_REMAP (ENOLINK)] = N_("Link has been severed"), +# if ENOLINK > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOLINK +# endif +#endif +#ifdef ENOMSG +/* */ + [ERR_REMAP (ENOMSG)] = N_("No message of desired type"), +# if ENOMSG > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOMSG +# endif +#endif +#ifdef ENOSR +/* */ + [ERR_REMAP (ENOSR)] = N_("Out of streams resources"), +# if ENOSR > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOSR +# endif +#endif +#ifdef ENOSTR +/* */ + [ERR_REMAP (ENOSTR)] = N_("Device not a stream"), +# if ENOSTR > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOSTR +# endif +#endif +#ifdef EOVERFLOW +/* */ + [ERR_REMAP (EOVERFLOW)] = N_("Value too large for defined data type"), +# if EOVERFLOW > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EOVERFLOW +# endif +#endif +#ifdef EPROTO +/* */ + [ERR_REMAP (EPROTO)] = N_("Protocol error"), +# if EPROTO > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EPROTO +# endif +#endif +#ifdef ETIME +/* */ + [ERR_REMAP (ETIME)] = N_("Timer expired"), +# if ETIME > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ETIME +# endif +#endif +#ifdef ECANCELED +/* +TRANS Operation canceled; an asynchronous operation was canceled before it +TRANS completed. @xref{Asynchronous I/O}. When you call @code{aio_cancel}, +TRANS the normal result is for the operations affected to complete with this +TRANS error; @pxref{Cancel AIO Operations}. */ + [ERR_REMAP (ECANCELED)] = N_("Operation canceled"), +# if ECANCELED > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ECANCELED +# endif +#endif +#ifdef ERESTART +/* */ + [ERR_REMAP (ERESTART)] = N_("Interrupted system call should be restarted"), +# if ERESTART > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ERESTART +# endif +#endif +#ifdef ECHRNG +/* */ + [ERR_REMAP (ECHRNG)] = N_("Channel number out of range"), +# if ECHRNG > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ECHRNG +# endif +#endif +#ifdef EL2NSYNC +/* */ + [ERR_REMAP (EL2NSYNC)] = N_("Level 2 not synchronized"), +# if EL2NSYNC > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EL2NSYNC +# endif +#endif +#ifdef EL3HLT +/* */ + [ERR_REMAP (EL3HLT)] = N_("Level 3 halted"), +# if EL3HLT > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EL3HLT +# endif +#endif +#ifdef EL3RST +/* */ + [ERR_REMAP (EL3RST)] = N_("Level 3 reset"), +# if EL3RST > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EL3RST +# endif +#endif +#ifdef ELNRNG +/* */ + [ERR_REMAP (ELNRNG)] = N_("Link number out of range"), +# if ELNRNG > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ELNRNG +# endif +#endif +#ifdef EUNATCH +/* */ + [ERR_REMAP (EUNATCH)] = N_("Protocol driver not attached"), +# if EUNATCH > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EUNATCH +# endif +#endif +#ifdef ENOCSI +/* */ + [ERR_REMAP (ENOCSI)] = N_("No CSI structure available"), +# if ENOCSI > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOCSI +# endif +#endif +#ifdef EL2HLT +/* */ + [ERR_REMAP (EL2HLT)] = N_("Level 2 halted"), +# if EL2HLT > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EL2HLT +# endif +#endif +#ifdef EBADE +/* */ + [ERR_REMAP (EBADE)] = N_("Invalid exchange"), +# if EBADE > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EBADE +# endif +#endif +#ifdef EBADR +/* */ + [ERR_REMAP (EBADR)] = N_("Invalid request descriptor"), +# if EBADR > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EBADR +# endif +#endif +#ifdef EXFULL +/* */ + [ERR_REMAP (EXFULL)] = N_("Exchange full"), +# if EXFULL > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EXFULL +# endif +#endif +#ifdef ENOANO +/* */ + [ERR_REMAP (ENOANO)] = N_("No anode"), +# if ENOANO > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOANO +# endif +#endif +#ifdef EBADRQC +/* */ + [ERR_REMAP (EBADRQC)] = N_("Invalid request code"), +# if EBADRQC > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EBADRQC +# endif +#endif +#ifdef EBADSLT +/* */ + [ERR_REMAP (EBADSLT)] = N_("Invalid slot"), +# if EBADSLT > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EBADSLT +# endif +#endif +#if defined (EDEADLOCK) && EDEADLOCK != EDEADLK +/* */ + [ERR_REMAP (EDEADLOCK)] = N_("File locking deadlock error"), +# if EDEADLOCK > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EDEADLOCK +# endif +#endif +#ifdef EBFONT +/* */ + [ERR_REMAP (EBFONT)] = N_("Bad font file format"), +# if EBFONT > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EBFONT +# endif +#endif +#ifdef ENONET +/* */ + [ERR_REMAP (ENONET)] = N_("Machine is not on the network"), +# if ENONET > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENONET +# endif +#endif +#ifdef ENOPKG +/* */ + [ERR_REMAP (ENOPKG)] = N_("Package not installed"), +# if ENOPKG > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOPKG +# endif +#endif +#ifdef EADV +/* */ + [ERR_REMAP (EADV)] = N_("Advertise error"), +# if EADV > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EADV +# endif +#endif +#ifdef ESRMNT +/* */ + [ERR_REMAP (ESRMNT)] = N_("Srmount error"), +# if ESRMNT > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ESRMNT +# endif +#endif +#ifdef ECOMM +/* */ + [ERR_REMAP (ECOMM)] = N_("Communication error on send"), +# if ECOMM > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ECOMM +# endif +#endif +#ifdef EDOTDOT +/* */ + [ERR_REMAP (EDOTDOT)] = N_("RFS specific error"), +# if EDOTDOT > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EDOTDOT +# endif +#endif +#ifdef ENOTUNIQ +/* */ + [ERR_REMAP (ENOTUNIQ)] = N_("Name not unique on network"), +# if ENOTUNIQ > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOTUNIQ +# endif +#endif +#ifdef EBADFD +/* */ + [ERR_REMAP (EBADFD)] = N_("File descriptor in bad state"), +# if EBADFD > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EBADFD +# endif +#endif +#ifdef EREMCHG +/* */ + [ERR_REMAP (EREMCHG)] = N_("Remote address changed"), +# if EREMCHG > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EREMCHG +# endif +#endif +#ifdef ELIBACC +/* */ + [ERR_REMAP (ELIBACC)] = N_("Can not access a needed shared library"), +# if ELIBACC > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ELIBACC +# endif +#endif +#ifdef ELIBBAD +/* */ + [ERR_REMAP (ELIBBAD)] = N_("Accessing a corrupted shared library"), +# if ELIBBAD > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ELIBBAD +# endif +#endif +#ifdef ELIBSCN +/* */ + [ERR_REMAP (ELIBSCN)] = N_(".lib section in a.out corrupted"), +# if ELIBSCN > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ELIBSCN +# endif +#endif +#ifdef ELIBMAX +/* */ + [ERR_REMAP (ELIBMAX)] = N_("Attempting to link in too many shared libraries"), +# if ELIBMAX > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ELIBMAX +# endif +#endif +#ifdef ELIBEXEC +/* */ + [ERR_REMAP (ELIBEXEC)] = N_("Cannot exec a shared library directly"), +# if ELIBEXEC > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ELIBEXEC +# endif +#endif +#ifdef ESTRPIPE +/* */ + [ERR_REMAP (ESTRPIPE)] = N_("Streams pipe error"), +# if ESTRPIPE > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ESTRPIPE +# endif +#endif +#ifdef EUCLEAN +/* */ + [ERR_REMAP (EUCLEAN)] = N_("Structure needs cleaning"), +# if EUCLEAN > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EUCLEAN +# endif +#endif +#ifdef ENOTNAM +/* */ + [ERR_REMAP (ENOTNAM)] = N_("Not a XENIX named type file"), +# if ENOTNAM > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOTNAM +# endif +#endif +#ifdef ENAVAIL +/* */ + [ERR_REMAP (ENAVAIL)] = N_("No XENIX semaphores available"), +# if ENAVAIL > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENAVAIL +# endif +#endif +#ifdef EISNAM +/* */ + [ERR_REMAP (EISNAM)] = N_("Is a named type file"), +# if EISNAM > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EISNAM +# endif +#endif +#ifdef EREMOTEIO +/* */ + [ERR_REMAP (EREMOTEIO)] = N_("Remote I/O error"), +# if EREMOTEIO > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EREMOTEIO +# endif +#endif +#ifdef ENOMEDIUM +/* */ + [ERR_REMAP (ENOMEDIUM)] = N_("No medium found"), +# if ENOMEDIUM > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOMEDIUM +# endif +#endif +#ifdef EMEDIUMTYPE +/* */ + [ERR_REMAP (EMEDIUMTYPE)] = N_("Wrong medium type"), +# if EMEDIUMTYPE > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EMEDIUMTYPE +# endif +#endif +#ifdef ENOKEY +/* */ + [ERR_REMAP (ENOKEY)] = N_("Required key not available"), +# if ENOKEY > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOKEY +# endif +#endif +#ifdef EKEYEXPIRED +/* */ + [ERR_REMAP (EKEYEXPIRED)] = N_("Key has expired"), +# if EKEYEXPIRED > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EKEYEXPIRED +# endif +#endif +#ifdef EKEYREVOKED +/* */ + [ERR_REMAP (EKEYREVOKED)] = N_("Key has been revoked"), +# if EKEYREVOKED > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EKEYREVOKED +# endif +#endif +#ifdef EKEYREJECTED +/* */ + [ERR_REMAP (EKEYREJECTED)] = N_("Key was rejected by service"), +# if EKEYREJECTED > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EKEYREJECTED +# endif +#endif +#ifdef EOWNERDEAD +/* */ + [ERR_REMAP (EOWNERDEAD)] = N_("Owner died"), +# if EOWNERDEAD > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EOWNERDEAD +# endif +#endif +#ifdef ENOTRECOVERABLE +/* */ + [ERR_REMAP (ENOTRECOVERABLE)] = N_("State not recoverable"), +# if ENOTRECOVERABLE > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOTRECOVERABLE +# endif +#endif + }; + +#define NERR \ + (sizeof _sys_errlist_internal / sizeof _sys_errlist_internal [0]) +const int _sys_nerr_internal = NERR; + +#if !defined NOT_IN_libc && !ERRLIST_NO_COMPAT +# include <errlist-compat.c> +#endif + +#ifdef EMIT_ERR_MAX +void dummy (void) +{ asm volatile (" @@@ %0 @@@ " : : "i" (ERR_REMAP (ERR_MAX))); } +#endif diff --git a/libc/sysdeps/gnu/getutmp.c b/libc/sysdeps/gnu/getutmp.c new file mode 100644 index 000000000..7b6d7713e --- /dev/null +++ b/libc/sysdeps/gnu/getutmp.c @@ -0,0 +1,33 @@ +/* Copyright (C) 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 Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <assert.h> +#include <string.h> +#include <utmp.h> +/* This is an ugly hack but we must not see the getutmpx declaration. */ +#define getutmpx XXXgetutmpx +#include <utmpx.h> +#undef getutmpx + +void +getutmp (const struct utmpx *utmpx, struct utmp *utmp) +{ + assert (sizeof (struct utmp) == sizeof (struct utmpx)); + memcpy (utmp, utmpx, sizeof (struct utmp)); +} +strong_alias (getutmp, getutmpx) diff --git a/libc/sysdeps/gnu/getutmpx.c b/libc/sysdeps/gnu/getutmpx.c new file mode 100644 index 000000000..f393734a6 --- /dev/null +++ b/libc/sysdeps/gnu/getutmpx.c @@ -0,0 +1 @@ +/* We don't need a separate version. it is the same as getutmp(). */ diff --git a/libc/sysdeps/gnu/glob64.c b/libc/sysdeps/gnu/glob64.c new file mode 100644 index 000000000..d1e4e6f0d --- /dev/null +++ b/libc/sysdeps/gnu/glob64.c @@ -0,0 +1,25 @@ +#include <dirent.h> +#include <glob.h> +#include <sys/stat.h> + +#define dirent dirent64 +#define __readdir(dirp) __readdir64 (dirp) + +#define glob_t glob64_t +#define glob(pattern, flags, errfunc, pglob) \ + glob64 (pattern, flags, errfunc, pglob) +#define globfree(pglob) globfree64 (pglob) + +#undef stat +#define stat stat64 +#undef __stat +#define __stat(file, buf) __xstat64 (_STAT_VER, file, buf) + +#define NO_GLOB_PATTERN_P 1 + +#define COMPILE_GLOB64 1 + +#include <posix/glob.c> + +libc_hidden_def (glob64) +libc_hidden_def (globfree64) diff --git a/libc/sysdeps/gnu/ifaddrs.c b/libc/sysdeps/gnu/ifaddrs.c new file mode 100644 index 000000000..5bc3224be --- /dev/null +++ b/libc/sysdeps/gnu/ifaddrs.c @@ -0,0 +1,163 @@ +/* getifaddrs -- get names and addresses of all network interfaces + Copyright (C) 2002, 2003 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 Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <ifaddrs.h> +#include <net/if.h> +#include <sys/socket.h> +#include <sys/ioctl.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> +#include <errno.h> +#include <netinet/in.h> + +#include "ifreq.h" + +/* Create a linked list of `struct ifaddrs' structures, one for each + network interface on the host machine. If successful, store the + list in *IFAP and return 0. On errors, return -1 and set `errno'. */ +int +getifaddrs (struct ifaddrs **ifap) +{ + /* This implementation handles only IPv4 interfaces. + The various ioctls below will only work on an AF_INET socket. + Some different mechanism entirely must be used for IPv6. */ + int fd = __socket (AF_INET, SOCK_DGRAM, 0); + struct ifreq *ifreqs; + int nifs; + + if (fd < 0) + return -1; + + __ifreq (&ifreqs, &nifs, fd); + if (ifreqs == NULL) /* XXX doesn't distinguish error vs none */ + { + __close (fd); + return -1; + } + + /* Now we have the list of interfaces and each one's address. + Put it into the expected format and fill in the remaining details. */ + if (nifs == 0) + *ifap = NULL; + else + { + struct + { + struct ifaddrs ia; + struct sockaddr addr, netmask, broadaddr; + char name[IF_NAMESIZE]; + } *storage; + struct ifreq *ifr; + int i; + + storage = malloc (nifs * sizeof storage[0]); + if (storage == NULL) + { + __close (fd); + __if_freereq (ifreqs, nifs); + return -1; + } + + i = 0; + ifr = ifreqs; + do + { + /* Fill in pointers to the storage we've already allocated. */ + storage[i].ia.ifa_next = &storage[i + 1].ia; + storage[i].ia.ifa_addr = &storage[i].addr; + + /* Now copy the information we already have from SIOCGIFCONF. */ + storage[i].ia.ifa_name = strncpy (storage[i].name, ifr->ifr_name, + sizeof storage[i].name); + storage[i].addr = ifr->ifr_addr; + + /* The SIOCGIFCONF call filled in only the name and address. + Now we must also ask for the other information we need. */ + + if (__ioctl (fd, SIOCGIFFLAGS, ifr) < 0) + break; + storage[i].ia.ifa_flags = ifr->ifr_flags; + + ifr->ifr_addr = storage[i].addr; + + if (__ioctl (fd, SIOCGIFNETMASK, ifr) < 0) + storage[i].ia.ifa_netmask = NULL; + else + { + storage[i].ia.ifa_netmask = &storage[i].netmask; + storage[i].netmask = ifr->ifr_netmask; + } + + if (ifr->ifr_flags & IFF_BROADCAST) + { + ifr->ifr_addr = storage[i].addr; + if (__ioctl (fd, SIOCGIFBRDADDR, ifr) < 0) + storage[i].ia.ifa_broadaddr = NULL; + { + storage[i].ia.ifa_broadaddr = &storage[i].broadaddr; + storage[i].broadaddr = ifr->ifr_broadaddr; + } + } + else if (ifr->ifr_flags & IFF_POINTOPOINT) + { + ifr->ifr_addr = storage[i].addr; + if (__ioctl (fd, SIOCGIFDSTADDR, ifr) < 0) + storage[i].ia.ifa_broadaddr = NULL; + else + { + storage[i].ia.ifa_broadaddr = &storage[i].broadaddr; + storage[i].broadaddr = ifr->ifr_dstaddr; + } + } + else + storage[i].ia.ifa_broadaddr = NULL; + + storage[i].ia.ifa_data = NULL; /* Nothing here for now. */ + + ifr = __if_nextreq (ifr); + } while (++i < nifs); + if (i < nifs) /* Broke out early on error. */ + { + __close (fd); + free (storage); + __if_freereq (ifreqs, nifs); + return -1; + } + + storage[i - 1].ia.ifa_next = NULL; + + *ifap = &storage[0].ia; + + __close (fd); + __if_freereq (ifreqs, nifs); + } + + return 0; +} +#ifndef getifaddrs +libc_hidden_def (getifaddrs) +#endif + +void +freeifaddrs (struct ifaddrs *ifa) +{ + free (ifa); +} +libc_hidden_def (freeifaddrs) diff --git a/libc/sysdeps/gnu/net/if.h b/libc/sysdeps/gnu/net/if.h new file mode 100644 index 000000000..ebb3e9f30 --- /dev/null +++ b/libc/sysdeps/gnu/net/if.h @@ -0,0 +1,205 @@ +/* net/if.h -- declarations for inquiring about network interfaces + Copyright (C) 1997,98,99,2000,2001 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 Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#ifndef _NET_IF_H +#define _NET_IF_H 1 + +#include <features.h> + +#ifdef __USE_MISC +# include <sys/types.h> +# include <sys/socket.h> +#endif + + +/* Length of interface name. */ +#define IF_NAMESIZE 16 + +struct if_nameindex + { + unsigned int if_index; /* 1, 2, ... */ + char *if_name; /* null terminated name: "eth0", ... */ + }; + + +#ifdef __USE_MISC +/* Standard interface flags. */ +enum + { + IFF_UP = 0x1, /* Interface is up. */ +# define IFF_UP IFF_UP + IFF_BROADCAST = 0x2, /* Broadcast address valid. */ +# define IFF_BROADCAST IFF_BROADCAST + IFF_DEBUG = 0x4, /* Turn on debugging. */ +# define IFF_DEBUG IFF_DEBUG + IFF_LOOPBACK = 0x8, /* Is a loopback net. */ +# define IFF_LOOPBACK IFF_LOOPBACK + IFF_POINTOPOINT = 0x10, /* Interface is point-to-point link. */ +# define IFF_POINTOPOINT IFF_POINTOPOINT + IFF_NOTRAILERS = 0x20, /* Avoid use of trailers. */ +# define IFF_NOTRAILERS IFF_NOTRAILERS + IFF_RUNNING = 0x40, /* Resources allocated. */ +# define IFF_RUNNING IFF_RUNNING + IFF_NOARP = 0x80, /* No address resolution protocol. */ +# define IFF_NOARP IFF_NOARP + IFF_PROMISC = 0x100, /* Receive all packets. */ +# define IFF_PROMISC IFF_PROMISC + + /* Not supported */ + IFF_ALLMULTI = 0x200, /* Receive all multicast packets. */ +# define IFF_ALLMULTI IFF_ALLMULTI + + IFF_MASTER = 0x400, /* Master of a load balancer. */ +# define IFF_MASTER IFF_MASTER + IFF_SLAVE = 0x800, /* Slave of a load balancer. */ +# define IFF_SLAVE IFF_SLAVE + + IFF_MULTICAST = 0x1000, /* Supports multicast. */ +# define IFF_MULTICAST IFF_MULTICAST + + IFF_PORTSEL = 0x2000, /* Can set media type. */ +# define IFF_PORTSEL IFF_PORTSEL + IFF_AUTOMEDIA = 0x4000, /* Auto media select active. */ +# define IFF_AUTOMEDIA IFF_AUTOMEDIA + IFF_DYNAMIC = 0x8000 /* Dialup device with changing addresses. */ +# define IFF_DYNAMIC IFF_DYNAMIC + }; + +/* The ifaddr structure contains information about one address of an + interface. They are maintained by the different address families, + are allocated and attached when an address is set, and are linked + together so all addresses for an interface can be located. */ + +struct ifaddr + { + struct sockaddr ifa_addr; /* Address of interface. */ + union + { + struct sockaddr ifu_broadaddr; + struct sockaddr ifu_dstaddr; + } ifa_ifu; + struct iface *ifa_ifp; /* Back-pointer to interface. */ + struct ifaddr *ifa_next; /* Next address for interface. */ + }; + +# define ifa_broadaddr ifa_ifu.ifu_broadaddr /* broadcast address */ +# define ifa_dstaddr ifa_ifu.ifu_dstaddr /* other end of link */ + +/* Device mapping structure. I'd just gone off and designed a + beautiful scheme using only loadable modules with arguments for + driver options and along come the PCMCIA people 8) + + Ah well. The get() side of this is good for WDSETUP, and it'll be + handy for debugging things. The set side is fine for now and being + very small might be worth keeping for clean configuration. */ + +struct ifmap + { + unsigned long int mem_start; + unsigned long int mem_end; + unsigned short int base_addr; + unsigned char irq; + unsigned char dma; + unsigned char port; + /* 3 bytes spare */ + }; + +/* Interface request structure used for socket ioctl's. All interface + ioctl's must have parameter definitions which begin with ifr_name. + The remainder may be interface specific. */ + +struct ifreq + { +# define IFHWADDRLEN 6 +# define IFNAMSIZ IF_NAMESIZE + union + { + char ifrn_name[IFNAMSIZ]; /* Interface name, e.g. "en0". */ + } ifr_ifrn; + + union + { + struct sockaddr ifru_addr; + struct sockaddr ifru_dstaddr; + struct sockaddr ifru_broadaddr; + struct sockaddr ifru_netmask; + struct sockaddr ifru_hwaddr; + short int ifru_flags; + int ifru_ivalue; + int ifru_mtu; + struct ifmap ifru_map; + char ifru_slave[IFNAMSIZ]; /* Just fits the size */ + char ifru_newname[IFNAMSIZ]; + __caddr_t ifru_data; + } ifr_ifru; + }; +# define ifr_name ifr_ifrn.ifrn_name /* interface name */ +# define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */ +# define ifr_addr ifr_ifru.ifru_addr /* address */ +# define ifr_dstaddr ifr_ifru.ifru_dstaddr /* other end of p-p lnk */ +# define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address */ +# define ifr_netmask ifr_ifru.ifru_netmask /* interface net mask */ +# define ifr_flags ifr_ifru.ifru_flags /* flags */ +# define ifr_metric ifr_ifru.ifru_ivalue /* metric */ +# define ifr_mtu ifr_ifru.ifru_mtu /* mtu */ +# define ifr_map ifr_ifru.ifru_map /* device map */ +# define ifr_slave ifr_ifru.ifru_slave /* slave device */ +# define ifr_data ifr_ifru.ifru_data /* for use by interface */ +# define ifr_ifindex ifr_ifru.ifru_ivalue /* interface index */ +# define ifr_bandwidth ifr_ifru.ifru_ivalue /* link bandwidth */ +# define ifr_qlen ifr_ifru.ifru_ivalue /* queue length */ +# define ifr_newname ifr_ifru.ifru_newname /* New name */ +# define _IOT_ifreq _IOT(_IOTS(char),IFNAMSIZ,_IOTS(char),16,0,0) +# define _IOT_ifreq_short _IOT(_IOTS(char),IFNAMSIZ,_IOTS(short),1,0,0) +# define _IOT_ifreq_int _IOT(_IOTS(char),IFNAMSIZ,_IOTS(int),1,0,0) + + +/* Structure used in SIOCGIFCONF request. Used to retrieve interface + configuration for machine (useful for programs which must know all + networks accessible). */ + +struct ifconf + { + int ifc_len; /* Size of buffer. */ + union + { + __caddr_t ifcu_buf; + struct ifreq *ifcu_req; + } ifc_ifcu; + }; +# define ifc_buf ifc_ifcu.ifcu_buf /* Buffer address. */ +# define ifc_req ifc_ifcu.ifcu_req /* Array of structures. */ +# define _IOT_ifconf _IOT(_IOTS(struct ifconf),1,0,0,0,0) /* not right */ +#endif /* Misc. */ + +__BEGIN_DECLS + +/* Convert an interface name to an index, and vice versa. */ +extern unsigned int if_nametoindex (__const char *__ifname) __THROW; +extern char *if_indextoname (unsigned int __ifindex, char *__ifname) __THROW; + +/* Return a list of all interfaces and their indices. */ +extern struct if_nameindex *if_nameindex (void) __THROW; + +/* Free the data returned from if_nameindex. */ +extern void if_freenameindex (struct if_nameindex *__ptr) __THROW; + +__END_DECLS + +#endif /* net/if.h */ diff --git a/libc/sysdeps/gnu/netinet/ip_icmp.h b/libc/sysdeps/gnu/netinet/ip_icmp.h new file mode 100644 index 000000000..2fc8e9c1c --- /dev/null +++ b/libc/sysdeps/gnu/netinet/ip_icmp.h @@ -0,0 +1,283 @@ +/* Copyright (C) 1991, 92, 93, 95, 96, 97, 99 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 Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#ifndef __NETINET_IP_ICMP_H +#define __NETINET_IP_ICMP_H 1 + +#include <sys/cdefs.h> +#include <sys/types.h> + +__BEGIN_DECLS + +struct icmphdr +{ + u_int8_t type; /* message type */ + u_int8_t code; /* type sub-code */ + u_int16_t checksum; + union + { + struct + { + u_int16_t id; + u_int16_t sequence; + } echo; /* echo datagram */ + u_int32_t gateway; /* gateway address */ + struct + { + u_int16_t __unused; + u_int16_t mtu; + } frag; /* path mtu discovery */ + } un; +}; + +#define ICMP_ECHOREPLY 0 /* Echo Reply */ +#define ICMP_DEST_UNREACH 3 /* Destination Unreachable */ +#define ICMP_SOURCE_QUENCH 4 /* Source Quench */ +#define ICMP_REDIRECT 5 /* Redirect (change route) */ +#define ICMP_ECHO 8 /* Echo Request */ +#define ICMP_TIME_EXCEEDED 11 /* Time Exceeded */ +#define ICMP_PARAMETERPROB 12 /* Parameter Problem */ +#define ICMP_TIMESTAMP 13 /* Timestamp Request */ +#define ICMP_TIMESTAMPREPLY 14 /* Timestamp Reply */ +#define ICMP_INFO_REQUEST 15 /* Information Request */ +#define ICMP_INFO_REPLY 16 /* Information Reply */ +#define ICMP_ADDRESS 17 /* Address Mask Request */ +#define ICMP_ADDRESSREPLY 18 /* Address Mask Reply */ +#define NR_ICMP_TYPES 18 + + +/* Codes for UNREACH. */ +#define ICMP_NET_UNREACH 0 /* Network Unreachable */ +#define ICMP_HOST_UNREACH 1 /* Host Unreachable */ +#define ICMP_PROT_UNREACH 2 /* Protocol Unreachable */ +#define ICMP_PORT_UNREACH 3 /* Port Unreachable */ +#define ICMP_FRAG_NEEDED 4 /* Fragmentation Needed/DF set */ +#define ICMP_SR_FAILED 5 /* Source Route failed */ +#define ICMP_NET_UNKNOWN 6 +#define ICMP_HOST_UNKNOWN 7 +#define ICMP_HOST_ISOLATED 8 +#define ICMP_NET_ANO 9 +#define ICMP_HOST_ANO 10 +#define ICMP_NET_UNR_TOS 11 +#define ICMP_HOST_UNR_TOS 12 +#define ICMP_PKT_FILTERED 13 /* Packet filtered */ +#define ICMP_PREC_VIOLATION 14 /* Precedence violation */ +#define ICMP_PREC_CUTOFF 15 /* Precedence cut off */ +#define NR_ICMP_UNREACH 15 /* instead of hardcoding immediate value */ + +/* Codes for REDIRECT. */ +#define ICMP_REDIR_NET 0 /* Redirect Net */ +#define ICMP_REDIR_HOST 1 /* Redirect Host */ +#define ICMP_REDIR_NETTOS 2 /* Redirect Net for TOS */ +#define ICMP_REDIR_HOSTTOS 3 /* Redirect Host for TOS */ + +/* Codes for TIME_EXCEEDED. */ +#define ICMP_EXC_TTL 0 /* TTL count exceeded */ +#define ICMP_EXC_FRAGTIME 1 /* Fragment Reass time exceeded */ + + +#ifdef __USE_BSD +/* + * Copyright (c) 1982, 1986, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)ip_icmp.h 8.1 (Berkeley) 6/10/93 + */ + +#include <netinet/in.h> +#include <netinet/ip.h> + +/* + * Internal of an ICMP Router Advertisement + */ +struct icmp_ra_addr +{ + u_int32_t ira_addr; + u_int32_t ira_preference; +}; + +struct icmp +{ + u_int8_t icmp_type; /* type of message, see below */ + u_int8_t icmp_code; /* type sub code */ + u_int16_t icmp_cksum; /* ones complement checksum of struct */ + union + { + u_char ih_pptr; /* ICMP_PARAMPROB */ + struct in_addr ih_gwaddr; /* gateway address */ + struct ih_idseq /* echo datagram */ + { + u_int16_t icd_id; + u_int16_t icd_seq; + } ih_idseq; + u_int32_t ih_void; + + /* ICMP_UNREACH_NEEDFRAG -- Path MTU Discovery (RFC1191) */ + struct ih_pmtu + { + u_int16_t ipm_void; + u_int16_t ipm_nextmtu; + } ih_pmtu; + + struct ih_rtradv + { + u_int8_t irt_num_addrs; + u_int8_t irt_wpa; + u_int16_t irt_lifetime; + } ih_rtradv; + } icmp_hun; +#define icmp_pptr icmp_hun.ih_pptr +#define icmp_gwaddr icmp_hun.ih_gwaddr +#define icmp_id icmp_hun.ih_idseq.icd_id +#define icmp_seq icmp_hun.ih_idseq.icd_seq +#define icmp_void icmp_hun.ih_void +#define icmp_pmvoid icmp_hun.ih_pmtu.ipm_void +#define icmp_nextmtu icmp_hun.ih_pmtu.ipm_nextmtu +#define icmp_num_addrs icmp_hun.ih_rtradv.irt_num_addrs +#define icmp_wpa icmp_hun.ih_rtradv.irt_wpa +#define icmp_lifetime icmp_hun.ih_rtradv.irt_lifetime + union + { + struct + { + u_int32_t its_otime; + u_int32_t its_rtime; + u_int32_t its_ttime; + } id_ts; + struct + { + struct ip idi_ip; + /* options and then 64 bits of data */ + } id_ip; + struct icmp_ra_addr id_radv; + u_int32_t id_mask; + u_int8_t id_data[1]; + } icmp_dun; +#define icmp_otime icmp_dun.id_ts.its_otime +#define icmp_rtime icmp_dun.id_ts.its_rtime +#define icmp_ttime icmp_dun.id_ts.its_ttime +#define icmp_ip icmp_dun.id_ip.idi_ip +#define icmp_radv icmp_dun.id_radv +#define icmp_mask icmp_dun.id_mask +#define icmp_data icmp_dun.id_data +}; + +/* + * Lower bounds on packet lengths for various types. + * For the error advice packets must first insure that the + * packet is large enough to contain the returned ip header. + * Only then can we do the check to see if 64 bits of packet + * data have been returned, since we need to check the returned + * ip header length. + */ +#define ICMP_MINLEN 8 /* abs minimum */ +#define ICMP_TSLEN (8 + 3 * sizeof (n_time)) /* timestamp */ +#define ICMP_MASKLEN 12 /* address mask */ +#define ICMP_ADVLENMIN (8 + sizeof (struct ip) + 8) /* min */ +#ifndef _IP_VHL +#define ICMP_ADVLEN(p) (8 + ((p)->icmp_ip.ip_hl << 2) + 8) + /* N.B.: must separately check that ip_hl >= 5 */ +#else +#define ICMP_ADVLEN(p) (8 + (IP_VHL_HL((p)->icmp_ip.ip_vhl) << 2) + 8) + /* N.B.: must separately check that header length >= 5 */ +#endif + +/* Definition of type and code fields. */ +/* defined above: ICMP_ECHOREPLY, ICMP_REDIRECT, ICMP_ECHO */ +#define ICMP_UNREACH 3 /* dest unreachable, codes: */ +#define ICMP_SOURCEQUENCH 4 /* packet lost, slow down */ +#define ICMP_ROUTERADVERT 9 /* router advertisement */ +#define ICMP_ROUTERSOLICIT 10 /* router solicitation */ +#define ICMP_TIMXCEED 11 /* time exceeded, code: */ +#define ICMP_PARAMPROB 12 /* ip header bad */ +#define ICMP_TSTAMP 13 /* timestamp request */ +#define ICMP_TSTAMPREPLY 14 /* timestamp reply */ +#define ICMP_IREQ 15 /* information request */ +#define ICMP_IREQREPLY 16 /* information reply */ +#define ICMP_MASKREQ 17 /* address mask request */ +#define ICMP_MASKREPLY 18 /* address mask reply */ + +#define ICMP_MAXTYPE 18 + +/* UNREACH codes */ +#define ICMP_UNREACH_NET 0 /* bad net */ +#define ICMP_UNREACH_HOST 1 /* bad host */ +#define ICMP_UNREACH_PROTOCOL 2 /* bad protocol */ +#define ICMP_UNREACH_PORT 3 /* bad port */ +#define ICMP_UNREACH_NEEDFRAG 4 /* IP_DF caused drop */ +#define ICMP_UNREACH_SRCFAIL 5 /* src route failed */ +#define ICMP_UNREACH_NET_UNKNOWN 6 /* unknown net */ +#define ICMP_UNREACH_HOST_UNKNOWN 7 /* unknown host */ +#define ICMP_UNREACH_ISOLATED 8 /* src host isolated */ +#define ICMP_UNREACH_NET_PROHIB 9 /* net denied */ +#define ICMP_UNREACH_HOST_PROHIB 10 /* host denied */ +#define ICMP_UNREACH_TOSNET 11 /* bad tos for net */ +#define ICMP_UNREACH_TOSHOST 12 /* bad tos for host */ +#define ICMP_UNREACH_FILTER_PROHIB 13 /* admin prohib */ +#define ICMP_UNREACH_HOST_PRECEDENCE 14 /* host prec vio. */ +#define ICMP_UNREACH_PRECEDENCE_CUTOFF 15 /* prec cutoff */ + +/* REDIRECT codes */ +#define ICMP_REDIRECT_NET 0 /* for network */ +#define ICMP_REDIRECT_HOST 1 /* for host */ +#define ICMP_REDIRECT_TOSNET 2 /* for tos and net */ +#define ICMP_REDIRECT_TOSHOST 3 /* for tos and host */ + +/* TIMEXCEED codes */ +#define ICMP_TIMXCEED_INTRANS 0 /* ttl==0 in transit */ +#define ICMP_TIMXCEED_REASS 1 /* ttl==0 in reass */ + +/* PARAMPROB code */ +#define ICMP_PARAMPROB_OPTABSENT 1 /* req. opt. absent */ + +#define ICMP_INFOTYPE(type) \ + ((type) == ICMP_ECHOREPLY || (type) == ICMP_ECHO || \ + (type) == ICMP_ROUTERADVERT || (type) == ICMP_ROUTERSOLICIT || \ + (type) == ICMP_TSTAMP || (type) == ICMP_TSTAMPREPLY || \ + (type) == ICMP_IREQ || (type) == ICMP_IREQREPLY || \ + (type) == ICMP_MASKREQ || (type) == ICMP_MASKREPLY) + +#endif /* __USE_BSD */ + +__END_DECLS + +#endif /* netinet/ip_icmp.h */ diff --git a/libc/sysdeps/gnu/netinet/tcp.h b/libc/sysdeps/gnu/netinet/tcp.h new file mode 100644 index 000000000..87099ec14 --- /dev/null +++ b/libc/sysdeps/gnu/netinet/tcp.h @@ -0,0 +1,225 @@ +/* + * Copyright (c) 1982, 1986, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)tcp.h 8.1 (Berkeley) 6/10/93 + */ + +#ifndef _NETINET_TCP_H +#define _NETINET_TCP_H 1 + +#include <features.h> + +/* + * User-settable options (used with setsockopt). + */ +#define TCP_NODELAY 1 /* Don't delay send to coalesce packets */ +#define TCP_MAXSEG 2 /* Set maximum segment size */ +#define TCP_CORK 3 /* Control sending of partial frames */ +#define TCP_KEEPIDLE 4 /* Start keeplives after this period */ +#define TCP_KEEPINTVL 5 /* Interval between keepalives */ +#define TCP_KEEPCNT 6 /* Number of keepalives before death */ +#define TCP_SYNCNT 7 /* Number of SYN retransmits */ +#define TCP_LINGER2 8 /* Life time of orphaned FIN-WAIT-2 state */ +#define TCP_DEFER_ACCEPT 9 /* Wake up listener only when data arrive */ +#define TCP_WINDOW_CLAMP 10 /* Bound advertised window */ +#define TCP_INFO 11 /* Information about this connection. */ +#define TCP_QUICKACK 12 /* Bock/reenable quick ACKs. */ + +#ifdef __USE_MISC +# include <sys/types.h> + +# ifdef __FAVOR_BSD +typedef u_int32_t tcp_seq; +/* + * TCP header. + * Per RFC 793, September, 1981. + */ +struct tcphdr + { + u_int16_t th_sport; /* source port */ + u_int16_t th_dport; /* destination port */ + tcp_seq th_seq; /* sequence number */ + tcp_seq th_ack; /* acknowledgement number */ +# if __BYTE_ORDER == __LITTLE_ENDIAN + u_int8_t th_x2:4; /* (unused) */ + u_int8_t th_off:4; /* data offset */ +# endif +# if __BYTE_ORDER == __BIG_ENDIAN + u_int8_t th_off:4; /* data offset */ + u_int8_t th_x2:4; /* (unused) */ +# endif + u_int8_t th_flags; +# define TH_FIN 0x01 +# define TH_SYN 0x02 +# define TH_RST 0x04 +# define TH_PUSH 0x08 +# define TH_ACK 0x10 +# define TH_URG 0x20 + u_int16_t th_win; /* window */ + u_int16_t th_sum; /* checksum */ + u_int16_t th_urp; /* urgent pointer */ +}; + +# else /* !__FAVOR_BSD */ +struct tcphdr + { + u_int16_t source; + u_int16_t dest; + u_int32_t seq; + u_int32_t ack_seq; +# if __BYTE_ORDER == __LITTLE_ENDIAN + u_int16_t res1:4; + u_int16_t doff:4; + u_int16_t fin:1; + u_int16_t syn:1; + u_int16_t rst:1; + u_int16_t psh:1; + u_int16_t ack:1; + u_int16_t urg:1; + u_int16_t res2:2; +# elif __BYTE_ORDER == __BIG_ENDIAN + u_int16_t doff:4; + u_int16_t res1:4; + u_int16_t res2:2; + u_int16_t urg:1; + u_int16_t ack:1; + u_int16_t psh:1; + u_int16_t rst:1; + u_int16_t syn:1; + u_int16_t fin:1; +# else +# error "Adjust your <bits/endian.h> defines" +# endif + u_int16_t window; + u_int16_t check; + u_int16_t urg_ptr; +}; +# endif /* __FAVOR_BSD */ + +enum +{ + TCP_ESTABLISHED = 1, + TCP_SYN_SENT, + TCP_SYN_RECV, + TCP_FIN_WAIT1, + TCP_FIN_WAIT2, + TCP_TIME_WAIT, + TCP_CLOSE, + TCP_CLOSE_WAIT, + TCP_LAST_ACK, + TCP_LISTEN, + TCP_CLOSING /* now a valid state */ +}; + +# define TCPOPT_EOL 0 +# define TCPOPT_NOP 1 +# define TCPOPT_MAXSEG 2 +# define TCPOLEN_MAXSEG 4 +# define TCPOPT_WINDOW 3 +# define TCPOLEN_WINDOW 3 +# define TCPOPT_SACK_PERMITTED 4 /* Experimental */ +# define TCPOLEN_SACK_PERMITTED 2 +# define TCPOPT_SACK 5 /* Experimental */ +# define TCPOPT_TIMESTAMP 8 +# define TCPOLEN_TIMESTAMP 10 +# define TCPOLEN_TSTAMP_APPA (TCPOLEN_TIMESTAMP+2) /* appendix A */ + +# define TCPOPT_TSTAMP_HDR \ + (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP) + +/* + * Default maximum segment size for TCP. + * With an IP MSS of 576, this is 536, + * but 512 is probably more convenient. + * This should be defined as MIN(512, IP_MSS - sizeof (struct tcpiphdr)). + */ +# define TCP_MSS 512 + +# define TCP_MAXWIN 65535 /* largest value for (unscaled) window */ + +# define TCP_MAX_WINSHIFT 14 /* maximum window shift */ + +# define SOL_TCP 6 /* TCP level */ + + +# define TCPI_OPT_TIMESTAMPS 1 +# define TCPI_OPT_SACK 2 +# define TCPI_OPT_WSCALE 4 +# define TCPI_OPT_ECN 8 + +/* Values for tcpi_state. */ +enum tcp_ca_state +{ + TCP_CA_Open = 0, + TCP_CA_Disorder = 1, + TCP_CA_CWR = 2, + TCP_CA_Recovery = 3, + TCP_CA_Loss = 4 +}; + +struct tcp_info +{ + u_int8_t tcpi_state; + u_int8_t tcpi_ca_state; + u_int8_t tcpi_retransmits; + u_int8_t tcpi_probes; + u_int8_t tcpi_backoff; + u_int8_t tcpi_options; + u_int8_t tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4; + + u_int32_t tcpi_rto; + u_int32_t tcpi_ato; + u_int32_t tcpi_snd_mss; + u_int32_t tcpi_rcv_mss; + + u_int32_t tcpi_unacked; + u_int32_t tcpi_sacked; + u_int32_t tcpi_lost; + u_int32_t tcpi_retrans; + u_int32_t tcpi_fackets; + + /* Times. */ + u_int32_t tcpi_last_data_sent; + u_int32_t tcpi_last_ack_sent; /* Not remembered, sorry. */ + u_int32_t tcpi_last_data_recv; + u_int32_t tcpi_last_ack_recv; + + /* Metrics. */ + u_int32_t tcpi_pmtu; + u_int32_t tcpi_rcv_ssthresh; + u_int32_t tcpi_rtt; + u_int32_t tcpi_rttvar; + u_int32_t tcpi_snd_ssthresh; + u_int32_t tcpi_snd_cwnd; + u_int32_t tcpi_advmss; + u_int32_t tcpi_reordering; +}; + +#endif /* Misc. */ + +#endif /* netinet/tcp.h */ diff --git a/libc/sysdeps/gnu/netinet/udp.h b/libc/sysdeps/gnu/netinet/udp.h new file mode 100644 index 000000000..45b69f749 --- /dev/null +++ b/libc/sysdeps/gnu/netinet/udp.h @@ -0,0 +1,79 @@ +/* Copyright (C) 1991, 92, 93, 95, 96, 97, 2004 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 Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +/* + * Copyright (C) 1982, 1986 Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef __NETINET_UDP_H +#define __NETINET_UDP_H 1 + +#include <features.h> +#include <sys/types.h> + + +/* UDP header as specified by RFC 768, August 1980. */ +#ifdef __FAVOR_BSD + +struct udphdr +{ + u_int16_t uh_sport; /* source port */ + u_int16_t uh_dport; /* destination port */ + u_int16_t uh_ulen; /* udp length */ + u_int16_t uh_sum; /* udp checksum */ +}; + +#else + +struct udphdr +{ + u_int16_t source; + u_int16_t dest; + u_int16_t len; + u_int16_t check; +}; +#endif + +#define SOL_UDP 17 /* sockopt level for UDP */ + +#endif /* netinet/udp.h */ diff --git a/libc/sysdeps/gnu/siglist.c b/libc/sysdeps/gnu/siglist.c new file mode 100644 index 000000000..cb1875f9e --- /dev/null +++ b/libc/sysdeps/gnu/siglist.c @@ -0,0 +1,77 @@ +/* Define list of all signal numbers and their names. + Copyright (C) 1997-2000, 2002, 2003 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 Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <stddef.h> +#include <signal.h> +#include <libintl.h> +#include <shlib-compat.h> +#include <bits/wordsize.h> + +const char *const __new_sys_siglist[NSIG] = +{ +#define init_sig(sig, abbrev, desc) [sig] = desc, +#include <siglist.h> +#undef init_sig +}; +strong_alias (__new_sys_siglist, _sys_siglist_internal) + +const char *const __new_sys_sigabbrev[NSIG] = +{ +#define init_sig(sig, abbrev, desc) [sig] = abbrev, +#include <siglist.h> +#undef init_sig +}; +strong_alias (__new_sys_sigabbrev, _sys_sigabbrev_internal) + +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) +strong_alias (_sys_siglist_internal, __old_sys_siglist) +declare_symbol (__old_sys_siglist, object, OLD_SIGLIST_SIZE * __WORDSIZE / 8) + +strong_alias (_sys_sigabbrev_internal, __old_sys_sigabbrev) +declare_symbol (__old_sys_sigabbrev, object, OLD_SIGLIST_SIZE * __WORDSIZE / 8) + +strong_alias (__old_sys_siglist, _old_sys_siglist) +compat_symbol (libc, __old_sys_siglist, _sys_siglist, GLIBC_2_0); +compat_symbol (libc, _old_sys_siglist, sys_siglist, GLIBC_2_0); +compat_symbol (libc, __old_sys_sigabbrev, sys_sigabbrev, GLIBC_2_0); +#endif + +#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_3_3) && defined OLD2_SIGLIST_SIZE +strong_alias (_sys_siglist_internal, __old2_sys_siglist) +declare_symbol (__old2_sys_siglist, object, OLD2_SIGLIST_SIZE * __WORDSIZE / 8) + +strong_alias (_sys_sigabbrev_internal, __old2_sys_sigabbrev) +declare_symbol (__old2_sys_sigabbrev, object, + OLD2_SIGLIST_SIZE * __WORDSIZE / 8) + +strong_alias (__old2_sys_siglist, _old2_sys_siglist) +compat_symbol (libc, __old2_sys_siglist, _sys_siglist, GLIBC_2_1); +compat_symbol (libc, _old2_sys_siglist, sys_siglist, GLIBC_2_1); +compat_symbol (libc, __old2_sys_sigabbrev, sys_sigabbrev, GLIBC_2_1); + +strong_alias (__new_sys_siglist, _new_sys_siglist) +versioned_symbol (libc, __new_sys_siglist, _sys_siglist, GLIBC_2_3_3); +versioned_symbol (libc, _new_sys_siglist, sys_siglist, GLIBC_2_3_3); +versioned_symbol (libc, __new_sys_sigabbrev, sys_sigabbrev, GLIBC_2_3_3); +#else +strong_alias (__new_sys_siglist, _new_sys_siglist) +versioned_symbol (libc, __new_sys_siglist, _sys_siglist, GLIBC_2_1); +versioned_symbol (libc, _new_sys_siglist, sys_siglist, GLIBC_2_1); +versioned_symbol (libc, __new_sys_sigabbrev, sys_sigabbrev, GLIBC_2_1); +#endif diff --git a/libc/sysdeps/gnu/sys/mtio.h b/libc/sysdeps/gnu/sys/mtio.h new file mode 100644 index 000000000..51fa550cd --- /dev/null +++ b/libc/sysdeps/gnu/sys/mtio.h @@ -0,0 +1,277 @@ +/* Structures and definitions for magnetic tape I/O control commands. + Copyright (C) 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 Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +/* Written by H. Bergman <hennus@cybercomm.nl>. */ + +#ifndef _SYS_MTIO_H +#define _SYS_MTIO_H 1 + +/* Get necessary definitions from system and kernel headers. */ +#include <sys/types.h> +#include <sys/ioctl.h> + + +/* Structure for MTIOCTOP - magnetic tape operation command. */ +struct mtop + { + short int mt_op; /* Operations defined below. */ + int mt_count; /* How many of them. */ + }; +#define _IOT_mtop /* Hurd ioctl type field. */ \ + _IOT (_IOTS (short), 1, _IOTS (int), 1, 0, 0) + +/* Magnetic Tape operations [Not all operations supported by all drivers]. */ +#define MTRESET 0 /* +reset drive in case of problems. */ +#define MTFSF 1 /* Forward space over FileMark, + * position at first record of next file. */ +#define MTBSF 2 /* Backward space FileMark (position before FM). */ +#define MTFSR 3 /* Forward space record. */ +#define MTBSR 4 /* Backward space record. */ +#define MTWEOF 5 /* Write an end-of-file record (mark). */ +#define MTREW 6 /* Rewind. */ +#define MTOFFL 7 /* Rewind and put the drive offline (eject?). */ +#define MTNOP 8 /* No op, set status only (read with MTIOCGET). */ +#define MTRETEN 9 /* Retension tape. */ +#define MTBSFM 10 /* +backward space FileMark, position at FM. */ +#define MTFSFM 11 /* +forward space FileMark, position at FM. */ +#define MTEOM 12 /* Goto end of recorded media (for appending files). + MTEOM positions after the last FM, ready for + appending another file. */ +#define MTERASE 13 /* Erase tape -- be careful! */ + +#define MTRAS1 14 /* Run self test 1 (nondestructive). */ +#define MTRAS2 15 /* Run self test 2 (destructive). */ +#define MTRAS3 16 /* Reserved for self test 3. */ + +#define MTSETBLK 20 /* Set block length (SCSI). */ +#define MTSETDENSITY 21 /* Set tape density (SCSI). */ +#define MTSEEK 22 /* Seek to block (Tandberg, etc.). */ +#define MTTELL 23 /* Tell block (Tandberg, etc.). */ +#define MTSETDRVBUFFER 24 /* Set the drive buffering according to SCSI-2. + Ordinary buffered operation with code 1. */ +#define MTFSS 25 /* Space forward over setmarks. */ +#define MTBSS 26 /* Space backward over setmarks. */ +#define MTWSM 27 /* Write setmarks. */ + +#define MTLOCK 28 /* Lock the drive door. */ +#define MTUNLOCK 29 /* Unlock the drive door. */ +#define MTLOAD 30 /* Execute the SCSI load command. */ +#define MTUNLOAD 31 /* Execute the SCSI unload command. */ +#define MTCOMPRESSION 32/* Control compression with SCSI mode page 15. */ +#define MTSETPART 33 /* Change the active tape partition. */ +#define MTMKPART 34 /* Format the tape with one or two partitions. */ + +/* structure for MTIOCGET - mag tape get status command */ + +struct mtget + { + long int mt_type; /* Type of magtape device. */ + long int mt_resid; /* Residual count: (not sure) + number of bytes ignored, or + number of files not skipped, or + number of records not skipped. */ + /* The following registers are device dependent. */ + long int mt_dsreg; /* Status register. */ + long int mt_gstat; /* Generic (device independent) status. */ + long int mt_erreg; /* Error register. */ + /* The next two fields are not always used. */ + __daddr_t mt_fileno; /* Number of current file on tape. */ + __daddr_t mt_blkno; /* Current block number. */ + }; +#define _IOT_mtget /* Hurd ioctl type field. */ \ + _IOT (_IOTS (long), 7, 0, 0, 0, 0) + + +/* Constants for mt_type. Not all of these are supported, and + these are not all of the ones that are supported. */ +#define MT_ISUNKNOWN 0x01 +#define MT_ISQIC02 0x02 /* Generic QIC-02 tape streamer. */ +#define MT_ISWT5150 0x03 /* Wangtek 5150EQ, QIC-150, QIC-02. */ +#define MT_ISARCHIVE_5945L2 0x04 /* Archive 5945L-2, QIC-24, QIC-02?. */ +#define MT_ISCMSJ500 0x05 /* CMS Jumbo 500 (QIC-02?). */ +#define MT_ISTDC3610 0x06 /* Tandberg 6310, QIC-24. */ +#define MT_ISARCHIVE_VP60I 0x07 /* Archive VP60i, QIC-02. */ +#define MT_ISARCHIVE_2150L 0x08 /* Archive Viper 2150L. */ +#define MT_ISARCHIVE_2060L 0x09 /* Archive Viper 2060L. */ +#define MT_ISARCHIVESC499 0x0A /* Archive SC-499 QIC-36 controller. */ +#define MT_ISQIC02_ALL_FEATURES 0x0F /* Generic QIC-02 with all features. */ +#define MT_ISWT5099EEN24 0x11 /* Wangtek 5099-een24, 60MB, QIC-24. */ +#define MT_ISTEAC_MT2ST 0x12 /* Teac MT-2ST 155mb drive, + Teac DC-1 card (Wangtek type). */ +#define MT_ISEVEREX_FT40A 0x32 /* Everex FT40A (QIC-40). */ +#define MT_ISDDS1 0x51 /* DDS device without partitions. */ +#define MT_ISDDS2 0x52 /* DDS device with partitions. */ +#define MT_ISSCSI1 0x71 /* Generic ANSI SCSI-1 tape unit. */ +#define MT_ISSCSI2 0x72 /* Generic ANSI SCSI-2 tape unit. */ + +/* QIC-40/80/3010/3020 ftape supported drives. + 20bit vendor ID + 0x800000 (see vendors.h in ftape distribution). */ +#define MT_ISFTAPE_UNKNOWN 0x800000 /* obsolete */ +#define MT_ISFTAPE_FLAG 0x800000 + +struct mt_tape_info + { + long int t_type; /* Device type id (mt_type). */ + char *t_name; /* Descriptive name. */ + }; + +#define MT_TAPE_INFO \ + { \ + {MT_ISUNKNOWN, "Unknown type of tape device"}, \ + {MT_ISQIC02, "Generic QIC-02 tape streamer"}, \ + {MT_ISWT5150, "Wangtek 5150, QIC-150"}, \ + {MT_ISARCHIVE_5945L2, "Archive 5945L-2"}, \ + {MT_ISCMSJ500, "CMS Jumbo 500"}, \ + {MT_ISTDC3610, "Tandberg TDC 3610, QIC-24"}, \ + {MT_ISARCHIVE_VP60I, "Archive VP60i, QIC-02"}, \ + {MT_ISARCHIVE_2150L, "Archive Viper 2150L"}, \ + {MT_ISARCHIVE_2060L, "Archive Viper 2060L"}, \ + {MT_ISARCHIVESC499, "Archive SC-499 QIC-36 controller"}, \ + {MT_ISQIC02_ALL_FEATURES, "Generic QIC-02 tape, all features"}, \ + {MT_ISWT5099EEN24, "Wangtek 5099-een24, 60MB"}, \ + {MT_ISTEAC_MT2ST, "Teac MT-2ST 155mb data cassette drive"}, \ + {MT_ISEVEREX_FT40A, "Everex FT40A, QIC-40"}, \ + {MT_ISSCSI1, "Generic SCSI-1 tape"}, \ + {MT_ISSCSI2, "Generic SCSI-2 tape"}, \ + {0, NULL} \ + } + + +/* Structure for MTIOCPOS - mag tape get position command. */ + +struct mtpos + { + long int mt_blkno; /* Current block number. */ + }; +#define _IOT_mtpos /* Hurd ioctl type field. */ \ + _IOT_SIMPLE (long) + + +/* Structure for MTIOCGETCONFIG/MTIOCSETCONFIG primarily intended + as an interim solution for QIC-02 until DDI is fully implemented. */ +struct mtconfiginfo + { + long int mt_type; /* Drive type. */ + long int ifc_type; /* Interface card type. */ + unsigned short int irqnr; /* IRQ number to use. */ + unsigned short int dmanr; /* DMA channel to use. */ + unsigned short int port; /* IO port base address. */ + + unsigned long int debug; /* Debugging flags. */ + + unsigned have_dens:1; + unsigned have_bsf:1; + unsigned have_fsr:1; + unsigned have_bsr:1; + unsigned have_eod:1; + unsigned have_seek:1; + unsigned have_tell:1; + unsigned have_ras1:1; + unsigned have_ras2:1; + unsigned have_ras3:1; + unsigned have_qfa:1; + + unsigned pad1:5; + char reserved[10]; + }; +#define _IOT_mtconfiginfo /* Hurd ioctl type field. */ \ + _IOT (_IOTS (long), 2, _IOTS (short), 3, _IOTS (long), 1) /* XXX wrong */ + + +/* Magnetic tape I/O control commands. */ +#define MTIOCTOP _IOW('m', 1, struct mtop) /* Do a mag tape op. */ +#define MTIOCGET _IOR('m', 2, struct mtget) /* Get tape status. */ +#define MTIOCPOS _IOR('m', 3, struct mtpos) /* Get tape position.*/ + +/* The next two are used by the QIC-02 driver for runtime reconfiguration. + See tpqic02.h for struct mtconfiginfo. */ +#define MTIOCGETCONFIG _IOR('m', 4, struct mtconfiginfo) /* Get tape config.*/ +#define MTIOCSETCONFIG _IOW('m', 5, struct mtconfiginfo) /* Set tape config.*/ + +/* Generic Mag Tape (device independent) status macros for examining + mt_gstat -- HP-UX compatible. + There is room for more generic status bits here, but I don't + know which of them are reserved. At least three or so should + be added to make this really useful. */ +#define GMT_EOF(x) ((x) & 0x80000000) +#define GMT_BOT(x) ((x) & 0x40000000) +#define GMT_EOT(x) ((x) & 0x20000000) +#define GMT_SM(x) ((x) & 0x10000000) /* DDS setmark */ +#define GMT_EOD(x) ((x) & 0x08000000) /* DDS EOD */ +#define GMT_WR_PROT(x) ((x) & 0x04000000) +/* #define GMT_ ? ((x) & 0x02000000) */ +#define GMT_ONLINE(x) ((x) & 0x01000000) +#define GMT_D_6250(x) ((x) & 0x00800000) +#define GMT_D_1600(x) ((x) & 0x00400000) +#define GMT_D_800(x) ((x) & 0x00200000) +/* #define GMT_ ? ((x) & 0x00100000) */ +/* #define GMT_ ? ((x) & 0x00080000) */ +#define GMT_DR_OPEN(x) ((x) & 0x00040000) /* Door open (no tape). */ +/* #define GMT_ ? ((x) & 0x00020000) */ +#define GMT_IM_REP_EN(x) ((x) & 0x00010000) /* Immediate report mode.*/ +/* 16 generic status bits unused. */ + + +/* SCSI-tape specific definitions. Bitfield shifts in the status */ +#define MT_ST_BLKSIZE_SHIFT 0 +#define MT_ST_BLKSIZE_MASK 0xffffff +#define MT_ST_DENSITY_SHIFT 24 +#define MT_ST_DENSITY_MASK 0xff000000 + +#define MT_ST_SOFTERR_SHIFT 0 +#define MT_ST_SOFTERR_MASK 0xffff + +/* Bitfields for the MTSETDRVBUFFER ioctl. */ +#define MT_ST_OPTIONS 0xf0000000 +#define MT_ST_BOOLEANS 0x10000000 +#define MT_ST_SETBOOLEANS 0x30000000 +#define MT_ST_CLEARBOOLEANS 0x40000000 +#define MT_ST_WRITE_THRESHOLD 0x20000000 +#define MT_ST_DEF_BLKSIZE 0x50000000 +#define MT_ST_DEF_OPTIONS 0x60000000 + +#define MT_ST_BUFFER_WRITES 0x1 +#define MT_ST_ASYNC_WRITES 0x2 +#define MT_ST_READ_AHEAD 0x4 +#define MT_ST_DEBUGGING 0x8 +#define MT_ST_TWO_FM 0x10 +#define MT_ST_FAST_MTEOM 0x20 +#define MT_ST_AUTO_LOCK 0x40 +#define MT_ST_DEF_WRITES 0x80 +#define MT_ST_CAN_BSR 0x100 +#define MT_ST_NO_BLKLIMS 0x200 +#define MT_ST_CAN_PARTITIONS 0x400 +#define MT_ST_SCSI2LOGICAL 0x800 + +/* The mode parameters to be controlled. Parameter chosen with bits 20-28. */ +#define MT_ST_CLEAR_DEFAULT 0xfffff +#define MT_ST_DEF_DENSITY (MT_ST_DEF_OPTIONS | 0x100000) +#define MT_ST_DEF_COMPRESSION (MT_ST_DEF_OPTIONS | 0x200000) +#define MT_ST_DEF_DRVBUFFER (MT_ST_DEF_OPTIONS | 0x300000) + +/* The offset for the arguments for the special HP changer load command. */ +#define MT_ST_HPLOADER_OFFSET 10000 + + +/* Specify default tape device. */ +#ifndef DEFTAPE +# define DEFTAPE "/dev/tape" +#endif + +#endif /* mtio.h */ diff --git a/libc/sysdeps/gnu/updwtmp.c b/libc/sysdeps/gnu/updwtmp.c new file mode 100644 index 000000000..e4f63088a --- /dev/null +++ b/libc/sysdeps/gnu/updwtmp.c @@ -0,0 +1,30 @@ +/* Copyright (C) 1998, 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Mark Kettenis <kettenis@phys.uva.nl>, 1998. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <string.h> +#include <unistd.h> + +#define TRANSFORM_UTMP_FILE_NAME(file_name) \ + ((strcmp (file_name, _PATH_UTMP "x") == 0 \ + && __access (_PATH_UTMP "x", F_OK) != 0) ? _PATH_UTMP : \ + ((strcmp (file_name, _PATH_WTMP "x") == 0 \ + && __access (_PATH_WTMP "x", F_OK) != 0) ? _PATH_WTMP : \ + file_name)) + +#include <login/updwtmp.c> diff --git a/libc/sysdeps/gnu/utmp_file.c b/libc/sysdeps/gnu/utmp_file.c new file mode 100644 index 000000000..5ef6f306c --- /dev/null +++ b/libc/sysdeps/gnu/utmp_file.c @@ -0,0 +1,30 @@ +/* Copyright (C) 1998, 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Mark Kettenis <kettenis@phys.uva.nl>, 1998. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <string.h> +#include <unistd.h> + +#define TRANSFORM_UTMP_FILE_NAME(file_name) \ + ((strcmp (file_name, _PATH_UTMP "x") == 0 \ + && __access (_PATH_UTMP "x", F_OK) != 0) ? _PATH_UTMP : \ + ((strcmp (file_name, _PATH_WTMP "x") == 0 \ + && __access (_PATH_WTMP "x", F_OK) != 0) ? _PATH_WTMP : \ + file_name)) + +#include <login/utmp_file.c> diff --git a/libc/sysdeps/gnu/utmpx.h b/libc/sysdeps/gnu/utmpx.h new file mode 100644 index 000000000..8622916a9 --- /dev/null +++ b/libc/sysdeps/gnu/utmpx.h @@ -0,0 +1,127 @@ +/* Copyright (C) 1997, 1998, 1999, 2003 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 Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#ifndef _UTMPX_H +#define _UTMPX_H 1 + +#include <features.h> +#include <sys/time.h> + +/* Required according to Unix98. */ +#ifndef __pid_t_defined +typedef __pid_t pid_t; +# define __pid_t_defined +#endif + +/* Get system dependent values and data structures. */ +#include <bits/utmpx.h> + +#ifdef __USE_GNU +/* Compatibility names for the strings of the canonical file names. */ +# define UTMPX_FILE _PATH_UTMPX +# define UTMPX_FILENAME _PATH_UTMPX +# define WTMPX_FILE _PATH_WTMPX +# define WTMPX_FILENAME _PATH_WTMPX +#endif + +/* For the getutmp{,x} functions we need the `struct utmp'. */ +#ifdef __USE_GNU +struct utmp; +#endif + + +__BEGIN_DECLS + +/* Open user accounting database. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern void setutxent (void); + +/* Close user accounting database. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern void endutxent (void); + +/* Get the next entry from the user accounting database. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern struct utmpx *getutxent (void); + +/* Get the user accounting database entry corresponding to ID. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern struct utmpx *getutxid (__const struct utmpx *__id); + +/* Get the user accounting database entry corresponding to LINE. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern struct utmpx *getutxline (__const struct utmpx *__line); + +/* Write the entry UTMPX into the user accounting database. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern struct utmpx *pututxline (__const struct utmpx *__utmpx); + + +#ifdef __USE_GNU +/* Change name of the utmpx file to be examined. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern int utmpxname (__const char *__file); + +/* Append entry UTMP to the wtmpx-like file WTMPX_FILE. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern void updwtmpx (__const char *__wtmpx_file, + __const struct utmpx *__utmpx); + + +/* Copy the information in UTMPX to UTMP. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern void getutmp (__const struct utmpx *__utmpx, + struct utmp *__utmp); + +/* Copy the information in UTMP to UTMPX. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern void getutmpx (__const struct utmp *__utmp, + struct utmpx *__utmpx); +#endif + +__END_DECLS + +#endif /* utmpx.h */ |