diff options
| author | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2008-07-14 14:30:48 +0000 | 
|---|---|---|
| committer | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2008-07-14 14:30:48 +0000 | 
| commit | 08b75763d15cf9e5f45eef70fe7e30ce2b748ae3 (patch) | |
| tree | 938826102a35c2538079ceecdcba395c253b84cb | |
| parent | 074cafed76801cb21a2b66e1ab4eef6c943eb52a (diff) | |
- improve UCLIBC_LINUX_SPECIFIC
  compile-tested only, fixes
  libc/misc/statfs/fstatfs64.c:29: error: 'fstatfs' undeclared here (not in a function)
| -rw-r--r-- | libc/misc/statfs/Makefile.in | 5 | ||||
| -rw-r--r-- | libc/misc/statfs/fstatvfs.c | 3 | ||||
| -rw-r--r-- | libc/misc/statfs/fstatvfs64.c | 24 | ||||
| -rw-r--r-- | libc/misc/statfs/statvfs64.c | 25 | ||||
| -rw-r--r-- | libc/sysdeps/linux/common/fstatfs.c | 3 | ||||
| -rw-r--r-- | libc/unistd/fpathconf.c | 4 | 
6 files changed, 55 insertions, 9 deletions
| diff --git a/libc/misc/statfs/Makefile.in b/libc/misc/statfs/Makefile.in index c979b2255..b0a8b84c9 100644 --- a/libc/misc/statfs/Makefile.in +++ b/libc/misc/statfs/Makefile.in @@ -7,7 +7,10 @@  CSRC := statvfs.c fstatvfs.c  ifeq ($(UCLIBC_HAS_LFS),y) -CSRC += fstatfs64.c statfs64.c statvfs64.c fstatvfs64.c +ifeq ($(UCLIBC_LINUX_SPECIFIC),y) +CSRC += fstatfs64.c statfs64.c +endif +CSRC += statvfs64.c fstatvfs64.c  endif  MISC_STATFS_DIR := $(top_srcdir)libc/misc/statfs diff --git a/libc/misc/statfs/fstatvfs.c b/libc/misc/statfs/fstatvfs.c index 231d45207..e21235e01 100644 --- a/libc/misc/statfs/fstatvfs.c +++ b/libc/misc/statfs/fstatvfs.c @@ -34,7 +34,6 @@ libc_hidden_proto(setmntent)  libc_hidden_proto(getmntent_r)  libc_hidden_proto(endmntent) -#if !defined __UCLIBC_LINUX_SPECIFIC__  #ifndef __USE_FILE_OFFSET64  extern int fstatfs (int __fildes, struct statfs *__buf)       __THROW __nonnull ((2)); @@ -46,7 +45,7 @@ extern int __REDIRECT_NTH (fstatfs, (int __fildes, struct statfs *__buf),  #  define fstatfs fstatfs64  # endif  #endif -#endif +  extern __typeof(fstatfs) __libc_fstatfs;  libc_hidden_proto(__libc_fstatfs)  libc_hidden_proto(fstat) diff --git a/libc/misc/statfs/fstatvfs64.c b/libc/misc/statfs/fstatvfs64.c index 02e7011cf..2d44e4217 100644 --- a/libc/misc/statfs/fstatvfs64.c +++ b/libc/misc/statfs/fstatvfs64.c @@ -28,6 +28,7 @@  #include <sys/statfs.h>  #include <sys/statvfs.h> +  /* Experimentally off - libc_hidden_proto(memset) */  /* Experimentally off - libc_hidden_proto(strcmp) */  /* Experimentally off - libc_hidden_proto(strsep) */ @@ -37,19 +38,40 @@ libc_hidden_proto(endmntent)  #undef stat  #define stat stat64 +#if defined __UCLIBC_LINUX_SPECIFIC__  libc_hidden_proto(fstatfs64)  libc_hidden_proto(fstat64) +#endif  libc_hidden_proto(stat64)  int fstatvfs64 (int fd, struct statvfs64 *buf)  {      struct statfs64 fsbuf;      struct stat64 st; +#if !defined __UCLIBC_LINUX_SPECIFIC__ +    int ret; +    struct statvfs buf32; +    ret = fstatvfs (fd, &buf32); +    if (ret == 0) { +      fsbuf.f_bsize = buf32.f_bsize; +      fsbuf.f_frsize = buf32.f_frsize; +      fsbuf.f_blocks = buf32.f_blocks; +      fsbuf.f_bfree = buf32.f_bfree; +      fsbuf.f_bavail = buf32.f_bavail; +      fsbuf.f_files = buf32.f_files; +      fsbuf.f_ffree = buf32.f_ffree; +      if (sizeof (fsbuf.f_fsid) == sizeof(buf32.f_fsid)) +	memcpy (&fsbuf.f_fsid, &buf32.f_fsid, sizeof(fsbuf.f_fsid)); +      /* and if not, then you could approximate or whatever.. */ +      fsbuf.f_namelen = buf32.f_namemax; +    } else +      return ret; +#else      /* Get as much information as possible from the system.  */      if (fstatfs64 (fd, &fsbuf) < 0)  	return -1; - +#endif  #define STAT(st) fstat64 (fd, st)  #include "internal_statvfs.c" diff --git a/libc/misc/statfs/statvfs64.c b/libc/misc/statfs/statvfs64.c index c91e1fe26..66f648ac1 100644 --- a/libc/misc/statfs/statvfs64.c +++ b/libc/misc/statfs/statvfs64.c @@ -37,18 +37,41 @@ libc_hidden_proto(endmntent)  #undef stat  #define stat stat64 +#if !defined __UCLIBC_LINUX_SPECIFIC__  libc_hidden_proto(statfs64) +#else +libc_hidden_proto(statvfs) +#endif  libc_hidden_proto(stat64)  int statvfs64 (const char *file, struct statvfs64 *buf)  {      struct statfs64 fsbuf;      struct stat64 st; +#if !defined __UCLIBC_LINUX_SPECIFIC__ +    int ret; +    struct statvfs buf32; +    ret = statvfs (file, &buf32); +    if (ret == 0) { +      fsbuf.f_bsize = buf32.f_bsize; +      fsbuf.f_frsize = buf32.f_frsize; +      fsbuf.f_blocks = buf32.f_blocks; +      fsbuf.f_bfree = buf32.f_bfree; +      fsbuf.f_bavail = buf32.f_bavail; +      fsbuf.f_files = buf32.f_files; +      fsbuf.f_ffree = buf32.f_ffree; +      if (sizeof (fsbuf.f_fsid) == sizeof(buf32.f_fsid)) +	memcpy (&fsbuf.f_fsid, &buf32.f_fsid, sizeof(fsbuf.f_fsid)); +      /* and if not, then you could approximate or whatever.. */ +      fsbuf.f_namelen = buf32.f_namemax; +    } else +      return ret; +#else      /* Get as much information as possible from the system.  */      if (statfs64 (file, &fsbuf) < 0)  	return -1; - +#endif  #define STAT(st) stat (file, st)  #include "internal_statvfs.c" diff --git a/libc/sysdeps/linux/common/fstatfs.c b/libc/sysdeps/linux/common/fstatfs.c index 830de8103..8a471d36f 100644 --- a/libc/sysdeps/linux/common/fstatfs.c +++ b/libc/sysdeps/linux/common/fstatfs.c @@ -10,7 +10,6 @@  #include <sys/syscall.h>  #include <sys/vfs.h> -#if !defined __UCLIBC_LINUX_SPECIFIC__  #ifndef __USE_FILE_OFFSET64  extern int fstatfs (int __fildes, struct statfs *__buf)       __THROW __nonnull ((2)); @@ -22,7 +21,7 @@ extern int __REDIRECT_NTH (fstatfs, (int __fildes, struct statfs *__buf),  #  define fstatfs fstatfs64  # endif  #endif -#endif +  extern __typeof(fstatfs) __libc_fstatfs;  libc_hidden_proto(__libc_fstatfs)  #define __NR___libc_fstatfs __NR_fstatfs diff --git a/libc/unistd/fpathconf.c b/libc/unistd/fpathconf.c index f3e2ffe83..96bc62199 100644 --- a/libc/unistd/fpathconf.c +++ b/libc/unistd/fpathconf.c @@ -32,7 +32,7 @@  //#include "linux_fsinfo.h"  libc_hidden_proto(fstat) -#if !defined __UCLIBC_LINUX_SPECIFIC__ +  #ifndef __USE_FILE_OFFSET64  extern int fstatfs (int __fildes, struct statfs *__buf)       __THROW __nonnull ((2)); @@ -44,7 +44,7 @@ extern int fstatfs (int __fildes, struct statfs *__buf)  #  define fstatfs fstatfs64  # endif  #endif -#endif +  extern __typeof(fstatfs) __libc_fstatfs;  libc_hidden_proto(__libc_fstatfs) | 
