diff options
Diffstat (limited to 'sysdeps/unix/sysv/linux')
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/fpathconf.c | 52 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/pathconf.c | 51 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/fpathconf.c | 12 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/linux_fsinfo.h | 18 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/pathconf.c | 12 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/pathconf.h | 42 |
6 files changed, 75 insertions, 112 deletions
diff --git a/sysdeps/unix/sysv/linux/alpha/fpathconf.c b/sysdeps/unix/sysv/linux/alpha/fpathconf.c deleted file mode 100644 index a8a24de1f8..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/fpathconf.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Get file-specific information about a descriptor. Linux/Alpha version. - Copyright (C) 1991,95,96,98,99,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. */ - -#include <unistd.h> -#include <sys/statfs.h> - - -static long int linux_fpathconf (int fd, int name); - -/* Define this first, so it can be inlined. */ -#define __fpathconf static linux_fpathconf -#include <sysdeps/unix/sysv/linux/fpathconf.c> - - -/* Get file-specific information about FD. */ -long int -__pathconf (int fd, int name) -{ - if (name == _PC_FILESIZEBITS) - { - /* Test whether this is on a ext2 or UFS filesystem which - support large files. */ - struct statfs fs; - - if (__fstatfs (fd, &fs) < 0 - || (fs.f_type != EXT2_SUPER_MAGIC - && fs.f_type != UFS_MAGIC - && fs.f_type != UFS_CIGAM)) - return 32; - - /* This filesystem supported files >2GB. */ - return 64; - } - - return linux_fpathconf (fd, name); -} diff --git a/sysdeps/unix/sysv/linux/alpha/pathconf.c b/sysdeps/unix/sysv/linux/alpha/pathconf.c deleted file mode 100644 index 1b35dc87cf..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/pathconf.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Get file-specific information about a file. Linux/Alpha version. - Copyright (C) 1991,95,96,98,99,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. */ - -#include <unistd.h> -#include <sys/statfs.h> - -static long int linux_pathconf (const char *file, int name); - -/* Define this first, so it can be inlined. */ -#define __pathconf static linux_pathconf -#include <sysdeps/unix/sysv/linux/pathconf.c> - - -/* Get file-specific information about FILE. */ -long int -__pathconf (const char *file, int name) -{ - if (name == _PC_FILESIZEBITS) - { - /* Test whether this is on a ext2 or UFS filesystem which - support large files. */ - struct statfs fs; - - if (__statfs (file, &fs) < 0 - || (fs.f_type != EXT2_SUPER_MAGIC - && fs.f_type != UFS_MAGIC - && fs.f_type != UFS_CIGAM)) - return 32; - - /* This filesystem supported files >2GB. */ - return 64; - } - - return linux_pathconf (file, name); -} diff --git a/sysdeps/unix/sysv/linux/fpathconf.c b/sysdeps/unix/sysv/linux/fpathconf.c index a43a58767d..4dd6059974 100644 --- a/sysdeps/unix/sysv/linux/fpathconf.c +++ b/sysdeps/unix/sysv/linux/fpathconf.c @@ -32,11 +32,15 @@ __fpathconf (fd, name) int fd; int name; { - if (name == _PC_LINK_MAX) + struct statfs fsbuf; + + switch (name) { - struct statfs fsbuf; + case _PC_LINK_MAX: return statfs_link_max (__fstatfs (fd, &fsbuf), &fsbuf); + case _PC_FILESIZEBITS: + return statfs_filesize_max (__fstatfs (fd, &fsbuf), &fsbuf); + default: + return posix_fpathconf (fd, name); } - - return posix_fpathconf (fd, name); } diff --git a/sysdeps/unix/sysv/linux/linux_fsinfo.h b/sysdeps/unix/sysv/linux/linux_fsinfo.h index 8aa7e28c7c..0e67fe7245 100644 --- a/sysdeps/unix/sysv/linux/linux_fsinfo.h +++ b/sysdeps/unix/sysv/linux/linux_fsinfo.h @@ -58,6 +58,15 @@ /* Constant that identifies the `iso9660' filesystem. */ #define ISOFS_SUPER_MAGIC 0x9660 +/* Constant that identifies the `jffs' filesystem. */ +#define JFFS_SUPER_MAGIC 0x07c0 + +/* Constant that identifies the `jffs2' filesystem. */ +#define JFFS2_SUPER_MAGIC 0x72b6 + +/* Constant that identifies the `jfs' filesystem. */ +#define JFS_SUPER_MAGIC 0x3153464a + /* Constants that identify the `minix2' filesystem. */ #define MINIX2_SUPER_MAGIC 0x2468 #define MINIX2_SUPER_MAGIC2 0x2478 @@ -75,6 +84,9 @@ /* Constants that identify the `nfs' filesystem. */ #define NFS_SUPER_MAGIC 0x6969 +/* Constants that identify the `ntfs' filesystem. */ +#define NTFS_SUPER_MAGIC 0x5346544e + /* Constants that identify the `proc' filesystem. */ #define PROC_SUPER_MAGIC 0x9fa0 @@ -84,6 +96,9 @@ /* Constants that identify the `reiser' filesystem. */ #define REISERFS_SUPER_MAGIC 0x52654973 +/* Constant that identifies the `romfs' filesystem. */ +#define ROMFS_SUPER_MAGIC 0x7275 + /* Constants that identify the `smb' filesystem. */ #define SMB_SUPER_MAGIC 0x517b @@ -91,6 +106,9 @@ #define SYSV2_SUPER_MAGIC 0x012ff7b6 #define SYSV4_SUPER_MAGIC 0x012ff7b5 +/* Constants that identify the `udf' filesystem. */ +#define UDF_SUPER_MAGIC 0x15013346 + /* Constants that identify the `ufs' filesystem. */ #define UFS_MAGIC 0x00011954 #define UFS_CIGAM 0x54190100 /* byteswapped MAGIC */ diff --git a/sysdeps/unix/sysv/linux/pathconf.c b/sysdeps/unix/sysv/linux/pathconf.c index 50a4b3ada4..6115335334 100644 --- a/sysdeps/unix/sysv/linux/pathconf.c +++ b/sysdeps/unix/sysv/linux/pathconf.c @@ -30,11 +30,15 @@ static long int posix_pathconf (const char *file, int name); long int __pathconf (const char *file, int name) { - if (name == _PC_LINK_MAX) + struct statfs fsbuf; + + switch (name) { - struct statfs fsbuf; + case _PC_LINK_MAX: return statfs_link_max (__statfs (file, &fsbuf), &fsbuf); + case _PC_FILESIZEBITS: + return statfs_filesize_max (__statfs (file, &fsbuf), &fsbuf); + default: + return posix_pathconf (file, name); } - - return posix_pathconf (file, name); } diff --git a/sysdeps/unix/sysv/linux/pathconf.h b/sysdeps/unix/sysv/linux/pathconf.h index 396563965e..b7f201d436 100644 --- a/sysdeps/unix/sysv/linux/pathconf.h +++ b/sysdeps/unix/sysv/linux/pathconf.h @@ -24,7 +24,7 @@ /* Used like: return statfs_link_max (__statfs (name, &buf), &buf); */ -static long int +static inline long int statfs_link_max (int result, const struct statfs *fsbuf) { if (result < 0) @@ -74,3 +74,43 @@ statfs_link_max (int result, const struct statfs *fsbuf) return LINUX_LINK_MAX; } } + +/* Used like: return statfs_filesize_max (__statfs (name, &buf), &buf); */ + +static inline long int +statfs_filesize_max (int result, const struct statfs *fsbuf) +{ + if (result < 0) + { + if (errno == ENOSYS) + /* Not possible, return the default value. */ + return 32; + + /* Some error occured. */ + return -1; + } + + switch (fsbuf->f_type) + { + case EXT2_SUPER_MAGIC: + case UFS_MAGIC: + case UFS_CIGAM: + case REISERFS_SUPER_MAGIC: + case XFS_SUPER_MAGIC: + case SMB_SUPER_MAGIC: + case NTFS_SUPER_MAGIC: + case UDF_SUPER_MAGIC: + case JFS_SUPER_MAGIC: + return 64; + + case MSDOS_SUPER_MAGIC: + case JFFS_SUPER_MAGIC: + case JFFS2_SUPER_MAGIC: + case NCP_SUPER_MAGIC: + case ROMFS_SUPER_MAGIC: + return 32; + + default: + return 32; + } +} |