diff options
Diffstat (limited to 'sysdeps/unix')
-rw-r--r-- | sysdeps/unix/sysv/linux/Dist | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/fpathconf.c | 44 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/pathconf.c | 44 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/bits/armsigctx.h | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/profil-counter.h | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/sysdep.S | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/fpathconf.c | 80 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/fstatvfs.c | 26 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/linux_fsinfo.h | 58 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/pathconf.c | 80 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sys/ptrace.h | 2 |
11 files changed, 306 insertions, 34 deletions
diff --git a/sysdeps/unix/sysv/linux/Dist b/sysdeps/unix/sysv/linux/Dist index 411f575b91..7747c82e99 100644 --- a/sysdeps/unix/sysv/linux/Dist +++ b/sysdeps/unix/sysv/linux/Dist @@ -7,6 +7,7 @@ kernel_stat.h kernel_termios.h ldd-rewrite.sed lddlibc4.c +linux_fsinfo.h llseek.c s_pread64.c s_pwrite64.c diff --git a/sysdeps/unix/sysv/linux/alpha/fpathconf.c b/sysdeps/unix/sysv/linux/alpha/fpathconf.c index d8c428dcda..b822daaf39 100644 --- a/sysdeps/unix/sysv/linux/alpha/fpathconf.c +++ b/sysdeps/unix/sysv/linux/alpha/fpathconf.c @@ -22,9 +22,7 @@ #include <limits.h> #include <sys/statfs.h> -#define EXT2_SUPER_MAGIC 0xef53 -#define UFS_MAGIC 0x00011954 -#define UFS_CIGAM 0x54190100 /* byteswapped MAGIC */ +#include <linux_fsinfo.h> static long int default_fpathconf (int fd, int name); @@ -55,6 +53,46 @@ __fpathconf (fd, name) /* This filesystem supported files >2GB. */ return 64; } + if (name == _PC_LINK_MAX) + { + struct statfs fsbuf; + + /* Determine the filesystem type. */ + if (__fstatfs (fd, &fsbuf) < 0) + /* not possible, return the default value. */ + return LINK_MAX; + + switch (fsbuf.f_type) + { + case EXT2_SUPER_MAGIC: + return EXT2_LINK_MAX; + + case MINIX_SUPER_MAGIC: + case MINIX_SUPER_MAGIC2: + return MINIX_LINK_MAX; + + case MINIX2_SUPER_MAGIC: + case MINIX2_SUPER_MAGIC2: + return MINIX2_LINK_MAX; + + case XENIX_SUPER_MAGIC: + return XENIX_LINK_MAX; + + case SYSV4_SUPER_MAGIC: + case SYSV2_SUPER_MAGIC: + return SYSV_LINK_MAX; + + case COH_SUPER_MAGIC: + return COH_LINK_MAX; + + case UFS_MAGIC: + case UFS_CIGAM: + return UFS_LINK_MAX; + + default: + return LINK_MAX; + } + } /* Fallback to the generic version. */ return default_fpathconf (fd, name); diff --git a/sysdeps/unix/sysv/linux/alpha/pathconf.c b/sysdeps/unix/sysv/linux/alpha/pathconf.c index 91ca0942fb..15910be9a1 100644 --- a/sysdeps/unix/sysv/linux/alpha/pathconf.c +++ b/sysdeps/unix/sysv/linux/alpha/pathconf.c @@ -23,9 +23,7 @@ #include <fcntl.h> #include <sys/statfs.h> -#define EXT2_SUPER_MAGIC 0xef53 -#define UFS_MAGIC 0x00011954 -#define UFS_CIGAM 0x54190100 /* byteswapped MAGIC */ +#include <linux_fsinfo.h> static long int default_pathconf (const char *path, int name); @@ -48,6 +46,46 @@ __pathconf (const char *path, int name) /* This filesystem supported files >2GB. */ return 64; } + if (name == _PC_LINK_MAX) + { + struct statfs fsbuf; + + /* Determine the filesystem type. */ + if (__statfs (fd, &fsbuf) < 0) + /* not possible, return the default value. */ + return LINK_MAX; + + switch (fsbuf.f_type) + { + case EXT2_SUPER_MAGIC: + return EXT2_LINK_MAX; + + case MINIX_SUPER_MAGIC: + case MINIX_SUPER_MAGIC2: + return MINIX_LINK_MAX; + + case MINIX2_SUPER_MAGIC: + case MINIX2_SUPER_MAGIC2: + return MINIX2_LINK_MAX; + + case XENIX_SUPER_MAGIC: + return XENIX_LINK_MAX; + + case SYSV4_SUPER_MAGIC: + case SYSV2_SUPER_MAGIC: + return SYSV_LINK_MAX; + + case COH_SUPER_MAGIC: + return COH_LINK_MAX; + + case UFS_MAGIC: + case UFS_CIGAM: + return UFS_LINK_MAX; + + default: + return LINK_MAX; + } + } /* Fallback to the generic version. */ return default_pathconf (path, name); diff --git a/sysdeps/unix/sysv/linux/arm/bits/armsigctx.h b/sysdeps/unix/sysv/linux/arm/bits/armsigctx.h index 395e194293..ba78c03a89 100644 --- a/sysdeps/unix/sysv/linux/arm/bits/armsigctx.h +++ b/sysdeps/unix/sysv/linux/arm/bits/armsigctx.h @@ -21,6 +21,8 @@ Fortunately 2.0 puts a magic number in the first word and this is not a legal value for `trap_no', so we can tell them apart. */ +#include <asm/ptrace.h> + union k_sigcontext { struct diff --git a/sysdeps/unix/sysv/linux/arm/profil-counter.h b/sysdeps/unix/sysv/linux/arm/profil-counter.h index 55a11bd76b..a1a4fc9d7f 100644 --- a/sysdeps/unix/sysv/linux/arm/profil-counter.h +++ b/sysdeps/unix/sysv/linux/arm/profil-counter.h @@ -18,7 +18,6 @@ Boston, MA 02111-1307, USA. */ #include <signal.h> -#include <asm/ptrace.h> #include <bits/armsigctx.h> void diff --git a/sysdeps/unix/sysv/linux/arm/sysdep.S b/sysdeps/unix/sysv/linux/arm/sysdep.S index 872ed4b555..3e3c853c78 100644 --- a/sysdeps/unix/sysv/linux/arm/sysdep.S +++ b/sysdeps/unix/sysv/linux/arm/sysdep.S @@ -24,7 +24,7 @@ .type C_SYMBOL_NAME(errno),%object .size C_SYMBOL_NAME(errno),4 C_SYMBOL_NAME(errno): .zero 4 -weak_alias (C_SYMBOL_NAME(errno), C_SYMBOL_NAME(_errno)) +weak_alias (errno, _errno) .text /* The syscall stubs jump here when they detect an error. diff --git a/sysdeps/unix/sysv/linux/fpathconf.c b/sysdeps/unix/sysv/linux/fpathconf.c new file mode 100644 index 0000000000..81ddef3944 --- /dev/null +++ b/sysdeps/unix/sysv/linux/fpathconf.c @@ -0,0 +1,80 @@ +/* Linux specific extensions to fpathconf. + Copyright (C) 1991, 1995, 1996, 1998 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <unistd.h> +#include <limits.h> +#include <sys/statfs.h> + +#include "linux_fsinfo.h" + +static long int posix_fpathconf (int fd, int name); + + +/* Get file-specific information about descriptor FD. */ +long int +__fpathconf (fd, name) + int fd; + int name; +{ + if (name == _PC_LINK_MAX) + { + struct statfs fsbuf; + + /* Determine the filesystem type. */ + if (__fstatfs (fd, &fsbuf) < 0) + /* not possible, return the default value. */ + return LINK_MAX; + + switch (fsbuf.f_type) + { + case EXT2_SUPER_MAGIC: + return EXT2_LINK_MAX; + + case MINIX_SUPER_MAGIC: + case MINIX_SUPER_MAGIC2: + return MINIX_LINK_MAX; + + case MINIX2_SUPER_MAGIC: + case MINIX2_SUPER_MAGIC2: + return MINIX2_LINK_MAX; + + case XENIX_SUPER_MAGIC: + return XENIX_LINK_MAX; + + case SYSV4_SUPER_MAGIC: + case SYSV2_SUPER_MAGIC: + return SYSV_LINK_MAX; + + case COH_SUPER_MAGIC: + return COH_LINK_MAX; + + case UFS_MAGIC: + case UFS_CIGAM: + return UFS_LINK_MAX; + + default: + return LINK_MAX; + } + } + + return posix_fpathconf (fd, name); +} + +#define __fpathconf static posix_fpathconf +#include <sysdeps/posix/fpathconf.c> diff --git a/sysdeps/unix/sysv/linux/fstatvfs.c b/sysdeps/unix/sysv/linux/fstatvfs.c index 43bab44543..11f6f8eb44 100644 --- a/sysdeps/unix/sysv/linux/fstatvfs.c +++ b/sysdeps/unix/sysv/linux/fstatvfs.c @@ -26,31 +26,7 @@ #include <sys/statfs.h> #include <sys/statvfs.h> -/* These definitions come from the kernel headers. But we cannot - include the headers here because of type clashes. If new - filesystem types will become available we have to add the - appropriate definitions here.*/ -#define ADFS_SUPER_MAGIC 0xadf5 -#define AFFS_SUPER_MAGIC 0xadff -#define CODA_SUPER_MAGIC 0x73757245 -#define EXT2_SUPER_MAGIC 0xef53 -#define HPFS_SUPER_MAGIC 0xf995e849 -#define ISOFS_SUPER_MAGIC 0x9660 -#define MINIX_SUPER_MAGIC 0x137f -#define MINIX_SUPER_MAGIC2 0x138F -#define MINIX2_SUPER_MAGIC 0x2468 -#define MINIX2_SUPER_MAGIC2 0x2478 -#define MSDOS_SUPER_MAGIC 0x4d44 -#define NCP_SUPER_MAGIC 0x564c -#define NFS_SUPER_MAGIC 0x6969 -#define PROC_SUPER_MAGIC 0x9fa0 -#define SMB_SUPER_MAGIC 0x517b -#define XENIX_SUPER_MAGIC 0x012ff7b4 -#define SYSV4_SUPER_MAGIC 0x012ff7b5 -#define SYSV2_SUPER_MAGIC 0x012ff7b6 -#define COH_SUPER_MAGIC 0x012ff7b7 -#define UFS_MAGIC 0x00011954 -#define UFS_CIGAM 0x54190100 /* byteswapped MAGIC */ +#include "linux_fsinfo.h" int diff --git a/sysdeps/unix/sysv/linux/linux_fsinfo.h b/sysdeps/unix/sysv/linux/linux_fsinfo.h new file mode 100644 index 0000000000..9dfb034b7d --- /dev/null +++ b/sysdeps/unix/sysv/linux/linux_fsinfo.h @@ -0,0 +1,58 @@ +/* Constants from kernel header for various FSes. + Copyright (C) 1998 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef _LINUX_FSINFO_H +#define _LINUX_FSINFO_H 1 + +/* These definitions come from the kernel headers. But we cannot + include the headers here because of type clashes. If new + filesystem types will become available we have to add the + appropriate definitions here.*/ +#define ADFS_SUPER_MAGIC 0xadf5 +#define AFFS_SUPER_MAGIC 0xadff +#define CODA_SUPER_MAGIC 0x73757245 +#define EXT2_SUPER_MAGIC 0xef53 +#define HPFS_SUPER_MAGIC 0xf995e849 +#define ISOFS_SUPER_MAGIC 0x9660 +#define MINIX_SUPER_MAGIC 0x137f +#define MINIX_SUPER_MAGIC2 0x138F +#define MINIX2_SUPER_MAGIC 0x2468 +#define MINIX2_SUPER_MAGIC2 0x2478 +#define MSDOS_SUPER_MAGIC 0x4d44 +#define NCP_SUPER_MAGIC 0x564c +#define NFS_SUPER_MAGIC 0x6969 +#define PROC_SUPER_MAGIC 0x9fa0 +#define SMB_SUPER_MAGIC 0x517b +#define XENIX_SUPER_MAGIC 0x012ff7b4 +#define SYSV4_SUPER_MAGIC 0x012ff7b5 +#define SYSV2_SUPER_MAGIC 0x012ff7b6 +#define COH_SUPER_MAGIC 0x012ff7b7 +#define UFS_MAGIC 0x00011954 +#define UFS_CIGAM 0x54190100 /* byteswapped MAGIC */ + +/* Maximum link counts. */ +#define EXT2_LINK_MAX 32000 +#define MINIX_LINK_MAX 250 +#define MINIX2_LINK_MAX 65530 +#define XENIX_LINK_MAX 126 /* ?? */ +#define SYSV_LINK_MAX 126 /* 127? 251? */ +#define COH_LINK_MAX 10000 +#define UFS_LINK_MAX EXT2_LINK_MAX + +#endif /* linux_fsinfo.h */ diff --git a/sysdeps/unix/sysv/linux/pathconf.c b/sysdeps/unix/sysv/linux/pathconf.c new file mode 100644 index 0000000000..dcf87d5284 --- /dev/null +++ b/sysdeps/unix/sysv/linux/pathconf.c @@ -0,0 +1,80 @@ +/* Linux specific extensions to pathconf. + Copyright (C) 1991, 1995, 1996, 1998 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <unistd.h> +#include <limits.h> +#include <sys/statfs.h> + +#include "linux_fsinfo.h" + +static long int posix_pathconf (const char *path, int name); + + +/* Get file-specific information about descriptor FD. */ +long int +__pathconf (path, name) + const char *path; + int name; +{ + if (name == _PC_LINK_MAX) + { + struct statfs fsbuf; + + /* Determine the filesystem type. */ + if (__statfs (path, &fsbuf) < 0) + /* not possible, return the default value. */ + return LINK_MAX; + + switch (fsbuf.f_type) + { + case EXT2_SUPER_MAGIC: + return EXT2_LINK_MAX; + + case MINIX_SUPER_MAGIC: + case MINIX_SUPER_MAGIC2: + return MINIX_LINK_MAX; + + case MINIX2_SUPER_MAGIC: + case MINIX2_SUPER_MAGIC2: + return MINIX2_LINK_MAX; + + case XENIX_SUPER_MAGIC: + return XENIX_LINK_MAX; + + case SYSV4_SUPER_MAGIC: + case SYSV2_SUPER_MAGIC: + return SYSV_LINK_MAX; + + case COH_SUPER_MAGIC: + return COH_LINK_MAX; + + case UFS_MAGIC: + case UFS_CIGAM: + return UFS_LINK_MAX; + + default: + return LINK_MAX; + } + } + + return posix_pathconf (path, name); +} + +#define __pathconf static posix_pathconf +#include <sysdeps/posix/pathconf.c> diff --git a/sysdeps/unix/sysv/linux/sys/ptrace.h b/sysdeps/unix/sysv/linux/sys/ptrace.h index 6c5d580d7b..5b670668bf 100644 --- a/sysdeps/unix/sysv/linux/sys/ptrace.h +++ b/sysdeps/unix/sysv/linux/sys/ptrace.h @@ -99,7 +99,7 @@ enum __ptrace_request #define PT_DETACH PTRACE_DETACH /* Continue and stop at the next (return from) syscall. */ - PTRACE_SYSCALL = 24, + PTRACE_SYSCALL = 24 #define PTRACE_SYSCALL PTRACE_SYSCALL }; |