mirror of
git://sourceware.org/git/glibc.git
synced 2025-01-24 12:25:35 +08:00
Update.
1998-03-20 16:24 Ulrich Drepper <drepper@cygnus.com> * libc.map: Add statvfs, fstatvfs, statvfs64, and fstatvfs64. * io/Makefile (headers): Add sys/statvfs.h and bits/statvfs.h. * io/sys/statvfs.h: New file. * sysdeps/generic/fstatvfs.h: New file. * sysdeps/generic/statvfs.h: New file. * sysdeps/generic/fstatvfs64.h: New file. * sysdeps/generic/statvfs64.h: New file. * sysdeps/generic/bits/statvfs.h: New file. * sysdeps/unix/sysv/linux/fstatvfs.c: New file. * sysdeps/unix/sysv/linux/statvfs.c: New file. * sysdeps/unix/sysv/linux/bits/statvfs.h: New file. * sysdeps/unix/sysv/linux/bits/statfs.h: Correct type for f_files and f_ffree elements. * sysdeps/unix/sysv/linux/sys/mount.h: Pretty print. Define mount options in enum.
This commit is contained in:
parent
8e31cf7e9f
commit
867506f3b0
20
ChangeLog
20
ChangeLog
@ -1,3 +1,23 @@
|
||||
1998-03-20 16:24 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* libc.map: Add statvfs, fstatvfs, statvfs64, and fstatvfs64.
|
||||
* io/Makefile (headers): Add sys/statvfs.h and bits/statvfs.h.
|
||||
* io/sys/statvfs.h: New file.
|
||||
* sysdeps/generic/fstatvfs.h: New file.
|
||||
* sysdeps/generic/statvfs.h: New file.
|
||||
* sysdeps/generic/fstatvfs64.h: New file.
|
||||
* sysdeps/generic/statvfs64.h: New file.
|
||||
* sysdeps/generic/bits/statvfs.h: New file.
|
||||
* sysdeps/unix/sysv/linux/fstatvfs.c: New file.
|
||||
* sysdeps/unix/sysv/linux/statvfs.c: New file.
|
||||
* sysdeps/unix/sysv/linux/bits/statvfs.h: New file.
|
||||
|
||||
* sysdeps/unix/sysv/linux/bits/statfs.h: Correct type for f_files
|
||||
and f_ffree elements.
|
||||
|
||||
* sysdeps/unix/sysv/linux/sys/mount.h: Pretty print. Define
|
||||
mount options in enum.
|
||||
|
||||
1998-03-20 Andreas Jaeger <aj@arthur.rhein-neckar.de>
|
||||
|
||||
* configure.in: Check for recent egcs/gcc.
|
||||
|
84
bits/statvfs.h
Normal file
84
bits/statvfs.h
Normal file
@ -0,0 +1,84 @@
|
||||
/* Definition of `struct statvfs', information about a filesystem.
|
||||
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 _SYS_STATVFS_H
|
||||
# error "Never include <bits/statvfs.h> directly; use <sys/statvfs.h> instead."
|
||||
#endif
|
||||
|
||||
#include <bits/types.h>
|
||||
|
||||
/* GNU Hurd NOTE: The size of this structure (16 ints) is known in
|
||||
<hurd/hurd_types.defs>, since it is used in the `file_statfs' RPC. MiG
|
||||
does not cope at all well with the passed C structure not being of the
|
||||
expected size. There are some filler words at the end to allow for
|
||||
future expansion. To increase the size of the structure used in the RPC
|
||||
and retain binary compatibility, we would need to assign a new message
|
||||
number. */
|
||||
|
||||
struct statvfs
|
||||
{
|
||||
unsigned long int f_bsize;
|
||||
unsigned long int f_frsize;
|
||||
#ifndef __USE_FILE_OFFSET64
|
||||
__fsblkcnt_t f_blocks;
|
||||
__fsblkcnt_t f_bfree;
|
||||
__fsblkcnt_t f_bavail;
|
||||
__fsfilcnt_t f_files;
|
||||
__fsfilcnt_t f_ffree;
|
||||
__fsfilcnt_t f_favail;
|
||||
#else
|
||||
__fsblkcnt64_t f_blocks;
|
||||
__fsblkcnt64_t f_bfree;
|
||||
__fsblkcnt64_t f_bavail;
|
||||
__fsfilcnt64_t f_files;
|
||||
__fsfilcnt64_t f_ffree;
|
||||
__fsfilcnt64_t f_favail;
|
||||
#endif
|
||||
__fsid_t f_fsid;
|
||||
unsigned long int f_flag;
|
||||
unsigned long int f_namemax;
|
||||
unsigned int f_spare[6];
|
||||
};
|
||||
|
||||
#ifdef __USE_LARGEFILE64
|
||||
struct statvfs64
|
||||
{
|
||||
unsigned long int f_bsize;
|
||||
unsigned long int f_frsize;
|
||||
__fsblkcnt64_t f_blocks;
|
||||
__fsblkcnt64_t f_bfree;
|
||||
__fsblkcnt64_t f_bavail;
|
||||
__fsfilcnt64_t f_files;
|
||||
__fsfilcnt64_t f_ffree;
|
||||
__fsfilcnt64_t f_favail;
|
||||
__fsid_t f_fsid;
|
||||
unsigned long int f_flag;
|
||||
unsigned long int f_namemax;
|
||||
unsigned int f_spare[6];
|
||||
};
|
||||
#endif
|
||||
|
||||
/* Definitions for the flag in `f_flag'. */
|
||||
enum
|
||||
{
|
||||
ST_RDONLY = 1,
|
||||
#define ST_RDONLY ST_RDONLY
|
||||
ST_NOSUID = 2
|
||||
#define ST_NOSUID ST_NOSUID
|
||||
};
|
@ -1,4 +1,4 @@
|
||||
# Copyright (C) 1992, 93, 94, 95, 96, 97 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1992, 93, 94, 95, 96, 97, 98 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
|
||||
@ -22,7 +22,7 @@
|
||||
subdir := io
|
||||
|
||||
headers := sys/stat.h bits/stat.h sys/statfs.h bits/statfs.h sys/vfs.h \
|
||||
fcntl.h sys/fcntl.h bits/fcntl.h \
|
||||
sys/statvfs.h bits/statvfs.h fcntl.h sys/fcntl.h bits/fcntl.h \
|
||||
poll.h sys/poll.h bits/poll.h \
|
||||
utime.h ftw.h fts.h
|
||||
|
||||
@ -32,6 +32,7 @@ routines := \
|
||||
stat fstat lstat mknod stat64 fstat64 lstat64 \
|
||||
xstat fxstat lxstat xmknod xstat64 fxstat64 lxstat64 \
|
||||
statfs fstatfs statfs64 fstatfs64 \
|
||||
statvfs fstatvfs statvfs64 fstatvfs64 \
|
||||
umask chmod fchmod mkdir \
|
||||
open open64 close read write lseek lseek64 access euidaccess \
|
||||
fcntl flock lockf \
|
||||
|
57
io/sys/statvfs.h
Normal file
57
io/sys/statvfs.h
Normal file
@ -0,0 +1,57 @@
|
||||
/* Definitions for getting information about a filesystem.
|
||||
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 _SYS_STATVFS_H
|
||||
#define _SYS_STATVFS_H 1
|
||||
|
||||
#include <features.h>
|
||||
|
||||
/* Get the system-specific definition of `struct statfs'. */
|
||||
#include <bits/statvfs.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Return information about the filesystem on which FILE resides. */
|
||||
extern int __statvfs __P ((__const char *__file, struct statvfs *__buf));
|
||||
#ifndef __USE_FILE_OFFSET64
|
||||
extern int statvfs __P ((__const char *__file, struct statvfs *__buf));
|
||||
#else
|
||||
extern int statvfs __P ((__const char *__file, struct statvfs *__buf))
|
||||
__asm__ ("statvfs64");
|
||||
#endif
|
||||
#ifdef __USE_LARGEFILE64
|
||||
extern int statvfs64 __P ((__const char *__file, struct statvfs64 *__buf));
|
||||
#endif
|
||||
|
||||
/* Return information about the filesystem containing the file FILDES
|
||||
refers to. */
|
||||
extern int __fstatvfs __P ((int __fildes, struct statvfs *__buf));
|
||||
#ifndef __USE_FILE_OFFSET64
|
||||
extern int fstatvfs __P ((int __fildes, struct statvfs *__buf));
|
||||
#else
|
||||
extern int fstatvfs __P ((int __fildes, struct statvfs *__buf))
|
||||
__asm__ ("fstatvfs64");
|
||||
#endif
|
||||
#ifdef __USE_LARGEFILE64
|
||||
extern int fstatvfs64 __P ((int __fildes, struct statvfs64 *__buf));
|
||||
#endif
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* sys/statvfs.h */
|
5
libc.map
5
libc.map
@ -489,7 +489,7 @@ GLIBC_2.1 {
|
||||
|
||||
# f*
|
||||
fgetpos64; fmtmsg; fopen64; freopen64; fseeko; fseeko64; fsetpos64;
|
||||
fstatfs64; ftello; ftello64; ftruncate64; ftw64;
|
||||
fstatfs64; fstatvfs; fstatvfs64; ftello; ftello64; ftruncate64; ftw64;
|
||||
fopen; fclose; fdopen;
|
||||
|
||||
# g*
|
||||
@ -535,7 +535,8 @@ GLIBC_2.1 {
|
||||
|
||||
# s*
|
||||
scandir64; setitimer; setrlimit64; setutxent; settimeofday;
|
||||
sighold; sigrelse; sigignore; sigset; statfs64; strcasestr; sysv_signal;
|
||||
sighold; sigrelse; sigignore; sigset; statfs64; statvfs; statvfs64;
|
||||
strcasestr; sysv_signal;
|
||||
|
||||
# New RT signal functions.
|
||||
sigqueue; sigtimedwait; sigwaitinfo;
|
||||
|
84
sysdeps/generic/bits/statvfs.h
Normal file
84
sysdeps/generic/bits/statvfs.h
Normal file
@ -0,0 +1,84 @@
|
||||
/* Definition of `struct statvfs', information about a filesystem.
|
||||
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 _SYS_STATVFS_H
|
||||
# error "Never include <bits/statvfs.h> directly; use <sys/statvfs.h> instead."
|
||||
#endif
|
||||
|
||||
#include <bits/types.h>
|
||||
|
||||
/* GNU Hurd NOTE: The size of this structure (16 ints) is known in
|
||||
<hurd/hurd_types.defs>, since it is used in the `file_statfs' RPC. MiG
|
||||
does not cope at all well with the passed C structure not being of the
|
||||
expected size. There are some filler words at the end to allow for
|
||||
future expansion. To increase the size of the structure used in the RPC
|
||||
and retain binary compatibility, we would need to assign a new message
|
||||
number. */
|
||||
|
||||
struct statvfs
|
||||
{
|
||||
unsigned long int f_bsize;
|
||||
unsigned long int f_frsize;
|
||||
#ifndef __USE_FILE_OFFSET64
|
||||
__fsblkcnt_t f_blocks;
|
||||
__fsblkcnt_t f_bfree;
|
||||
__fsblkcnt_t f_bavail;
|
||||
__fsfilcnt_t f_files;
|
||||
__fsfilcnt_t f_ffree;
|
||||
__fsfilcnt_t f_favail;
|
||||
#else
|
||||
__fsblkcnt64_t f_blocks;
|
||||
__fsblkcnt64_t f_bfree;
|
||||
__fsblkcnt64_t f_bavail;
|
||||
__fsfilcnt64_t f_files;
|
||||
__fsfilcnt64_t f_ffree;
|
||||
__fsfilcnt64_t f_favail;
|
||||
#endif
|
||||
__fsid_t f_fsid;
|
||||
unsigned long int f_flag;
|
||||
unsigned long int f_namemax;
|
||||
unsigned int f_spare[6];
|
||||
};
|
||||
|
||||
#ifdef __USE_LARGEFILE64
|
||||
struct statvfs64
|
||||
{
|
||||
unsigned long int f_bsize;
|
||||
unsigned long int f_frsize;
|
||||
__fsblkcnt64_t f_blocks;
|
||||
__fsblkcnt64_t f_bfree;
|
||||
__fsblkcnt64_t f_bavail;
|
||||
__fsfilcnt64_t f_files;
|
||||
__fsfilcnt64_t f_ffree;
|
||||
__fsfilcnt64_t f_favail;
|
||||
__fsid_t f_fsid;
|
||||
unsigned long int f_flag;
|
||||
unsigned long int f_namemax;
|
||||
unsigned int f_spare[6];
|
||||
};
|
||||
#endif
|
||||
|
||||
/* Definitions for the flag in `f_flag'. */
|
||||
enum
|
||||
{
|
||||
ST_RDONLY = 1,
|
||||
#define ST_RDONLY ST_RDONLY
|
||||
ST_NOSUID = 2
|
||||
#define ST_NOSUID ST_NOSUID
|
||||
};
|
33
sysdeps/generic/fstatvfs.c
Normal file
33
sysdeps/generic/fstatvfs.c
Normal file
@ -0,0 +1,33 @@
|
||||
/* Return information about the filesystem on which FD resides.
|
||||
Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <sys/statvfs.h>
|
||||
|
||||
/* Return information about the filesystem on which FD resides. */
|
||||
int
|
||||
__fstatvfs (int fd, struct statvfs *buf)
|
||||
{
|
||||
__set_errno (ENOSYS);
|
||||
return -1;
|
||||
}
|
||||
stub_warning (fstatvfs)
|
||||
|
||||
weak_alias (__fstatvfs, fstatvfs)
|
||||
#include <stub-tag.h>
|
46
sysdeps/generic/fstatvfs64.c
Normal file
46
sysdeps/generic/fstatvfs64.c
Normal file
@ -0,0 +1,46 @@
|
||||
/* Return information about the filesystem on which FD resides.
|
||||
Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <sys/statvfs.h>
|
||||
|
||||
/* Return information about the filesystem on which FD resides. */
|
||||
int
|
||||
fstatvfs64 (int fd, struct statvfs64 *buf)
|
||||
{
|
||||
struct statvfs buf32;
|
||||
|
||||
if (fstatvfs (fd, &buf32) < 0)
|
||||
return -1;
|
||||
|
||||
buf->f_bsize = buf32.f_bsize;
|
||||
buf->f_frsize = buf32.f_frsize;
|
||||
buf->f_blocks = buf32.f_blocks;
|
||||
buf->f_bfree = buf32.f_bfree;
|
||||
buf->f_bavail = buf32.f_bavail;
|
||||
buf->f_files = buf32.f_files;
|
||||
buf->f_ffree = buf32.f_ffree;
|
||||
buf->f_favail = buf32.f_favail;
|
||||
buf->f_fsid = buf32.f_fsid;
|
||||
buf->f_flag = buf32.f_flag;
|
||||
buf->f_namemax = buf32.f_namemax;
|
||||
memcpy (buf->f_spare, buf32.f_spare, sizeof (buf32.f_spare));
|
||||
|
||||
return 0;
|
||||
}
|
34
sysdeps/generic/statvfs.c
Normal file
34
sysdeps/generic/statvfs.c
Normal file
@ -0,0 +1,34 @@
|
||||
/* Return information about the filesystem on which FILE resides.
|
||||
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. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <sys/statvfs.h>
|
||||
#include <stddef.h>
|
||||
|
||||
/* Return information about the filesystem on which FILE resides. */
|
||||
int
|
||||
__statvfs (const char *file, struct statvfs *buf)
|
||||
{
|
||||
__set_errno (ENOSYS);
|
||||
return -1;
|
||||
}
|
||||
weak_alias (__statvfs, statvfs)
|
||||
|
||||
stub_warning (statvfs)
|
||||
#include <stub-tag.h>
|
47
sysdeps/generic/statvfs64.c
Normal file
47
sysdeps/generic/statvfs64.c
Normal file
@ -0,0 +1,47 @@
|
||||
/* Return information about the filesystem on which FILE resides.
|
||||
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. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <sys/statvfs.h>
|
||||
#include <stddef.h>
|
||||
|
||||
/* Return information about the filesystem on which FILE resides. */
|
||||
int
|
||||
statvfs64 (const char *file, struct statvfs64 *buf)
|
||||
{
|
||||
struct statvfs buf32;
|
||||
|
||||
if (statvfs (file, &buf32) < 0)
|
||||
return -1;
|
||||
|
||||
buf->f_bsize = buf32.f_bsize;
|
||||
buf->f_frsize = buf32.f_frsize;
|
||||
buf->f_blocks = buf32.f_blocks;
|
||||
buf->f_bfree = buf32.f_bfree;
|
||||
buf->f_bavail = buf32.f_bavail;
|
||||
buf->f_files = buf32.f_files;
|
||||
buf->f_ffree = buf32.f_ffree;
|
||||
buf->f_favail = buf32.f_favail;
|
||||
buf->f_fsid = buf32.f_fsid;
|
||||
buf->f_flag = buf32.f_flag;
|
||||
buf->f_namemax = buf32.f_namemax;
|
||||
memcpy (buf->f_spare, buf32.f_spare, sizeof (buf32.f_spare));
|
||||
|
||||
return 0;
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@ -30,14 +30,14 @@ struct statfs
|
||||
__fsblkcnt_t f_blocks;
|
||||
__fsblkcnt_t f_bfree;
|
||||
__fsblkcnt_t f_bavail;
|
||||
__fsblkcnt_t f_files;
|
||||
__fsblkcnt_t f_ffree;
|
||||
__fsfilcnt_t f_files;
|
||||
__fsfilcnt_t f_ffree;
|
||||
#else
|
||||
__fsblkcnt64_t f_blocks;
|
||||
__fsblkcnt64_t f_bfree;
|
||||
__fsblkcnt64_t f_bavail;
|
||||
__fsblkcnt64_t f_files;
|
||||
__fsblkcnt64_t f_ffree;
|
||||
__fsfilcnt64_t f_files;
|
||||
__fsfilcnt64_t f_ffree;
|
||||
#endif
|
||||
__fsid_t f_fsid;
|
||||
int f_namelen;
|
||||
@ -52,8 +52,8 @@ struct statfs64
|
||||
__fsblkcnt64_t f_blocks;
|
||||
__fsblkcnt64_t f_bfree;
|
||||
__fsblkcnt64_t f_bavail;
|
||||
__fsblkcnt64_t f_files;
|
||||
__fsblkcnt64_t f_ffree;
|
||||
__fsfilcnt64_t f_files;
|
||||
__fsfilcnt64_t f_ffree;
|
||||
__fsid_t f_fsid;
|
||||
int f_namelen;
|
||||
int f_spare[6];
|
||||
|
92
sysdeps/unix/sysv/linux/bits/statvfs.h
Normal file
92
sysdeps/unix/sysv/linux/bits/statvfs.h
Normal file
@ -0,0 +1,92 @@
|
||||
/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _SYS_STATVFS_H
|
||||
# error "Never include <bits/statvfs.h> directly; use <sys/statvfs.h> instead."
|
||||
#endif
|
||||
|
||||
#include <bits/types.h> /* For __fsid_t, __fsblkcnt_t and __fsfilcnt_t. */
|
||||
|
||||
struct statvfs
|
||||
{
|
||||
unsigned long int f_bsize;
|
||||
unsigned long int f_frsize;
|
||||
#ifndef __USE_FILE_OFFSET64
|
||||
__fsblkcnt_t f_blocks;
|
||||
__fsblkcnt_t f_bfree;
|
||||
__fsblkcnt_t f_bavail;
|
||||
__fsfilcnt_t f_files;
|
||||
__fsfilcnt_t f_ffree;
|
||||
__fsfilcnt_t f_favail;
|
||||
#else
|
||||
__fsblkcnt64_t f_blocks;
|
||||
__fsblkcnt64_t f_bfree;
|
||||
__fsblkcnt64_t f_bavail;
|
||||
__fsfilcnt64_t f_files;
|
||||
__fsfilcnt64_t f_ffree;
|
||||
__fsfilcnt64_t f_favail;
|
||||
#endif
|
||||
__fsid_t f_fsid;
|
||||
unsigned long int f_flag;
|
||||
unsigned long int f_namemax;
|
||||
int f_spare[6];
|
||||
};
|
||||
|
||||
#ifdef __USE_LARGEFILE64
|
||||
struct statvfs64
|
||||
{
|
||||
unsigned long int f_bsize;
|
||||
unsigned long int f_frsize;
|
||||
__fsblkcnt64_t f_blocks;
|
||||
__fsblkcnt64_t f_bfree;
|
||||
__fsblkcnt64_t f_bavail;
|
||||
__fsfilcnt64_t f_files;
|
||||
__fsfilcnt64_t f_ffree;
|
||||
__fsfilcnt64_t f_favail;
|
||||
__fsid_t f_fsid;
|
||||
unsigned long int f_flag;
|
||||
unsigned long int f_namemax;
|
||||
int f_spare[6];
|
||||
};
|
||||
#endif
|
||||
|
||||
/* Definitions for the flag in `f_flag'. These definitions should be
|
||||
kept in sync which the definitions in <sys/mount.h>. */
|
||||
enum
|
||||
{
|
||||
ST_RDONLY = 1, /* Mount read-only. */
|
||||
#define ST_RDONLY ST_RDONLY
|
||||
ST_NOSUID = 2, /* Ignore suid and sgid bits. */
|
||||
#define ST_NOSUID ST_NOSUID
|
||||
ST_NODEV = 4, /* Disallow access to device special files. */
|
||||
#define ST_NODEV ST_NODEV
|
||||
ST_NOEXEC = 8, /* Disallow program execution. */
|
||||
#define ST_NOEXEC ST_NOEXEC
|
||||
ST_SYNCHRONOUS = 16, /* Writes are synced at once. */
|
||||
#define ST_SYNCHRONOUS ST_SYNCHRONOUS
|
||||
ST_MANDLOCK = 64, /* Allow mandatory locks on an FS. */
|
||||
#define ST_MANDLOCK ST_MANDLOCK
|
||||
ST_WRITE = 128, /* Write on file/directory/symlink. */
|
||||
#define ST_WRITE ST_WRITE
|
||||
ST_APPEND = 256, /* Append-only file. */
|
||||
#define ST_APPEND ST_APPEND
|
||||
ST_IMMUTABLE = 512, /* Immutable file. */
|
||||
#define ST_IMMUTABLE ST_IMMUTABLE
|
||||
ST_NOATIME = 1024 /* Do not update access times. */
|
||||
#define ST_NOATIME ST_NOATIME
|
||||
};
|
173
sysdeps/unix/sysv/linux/fstatvfs.c
Normal file
173
sysdeps/unix/sysv/linux/fstatvfs.c
Normal file
@ -0,0 +1,173 @@
|
||||
/* Copyright (C) 1998 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
|
||||
|
||||
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 <errno.h>
|
||||
#include <mntent.h>
|
||||
#include <paths.h>
|
||||
#include <string.h>
|
||||
#include <sys/mount.h>
|
||||
#include <sys/stat.h>
|
||||
#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 there will
|
||||
become new filesystem types 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
|
||||
|
||||
|
||||
int
|
||||
fstatvfs (int fd, struct statvfs *buf)
|
||||
{
|
||||
struct statfs fsbuf;
|
||||
struct stat st;
|
||||
|
||||
/* Get as much information as possible from the system. */
|
||||
if (__fstatfs (fd, &fsbuf) < 0)
|
||||
return -1;
|
||||
|
||||
/* Now fill in the fields me have information for. */
|
||||
buf->f_bsize = fsbuf.f_bsize;
|
||||
buf->f_blocks = fsbuf.f_blocks;
|
||||
buf->f_bfree = fsbuf.f_bfree;
|
||||
buf->f_bavail = fsbuf.f_bavail;
|
||||
buf->f_files = fsbuf.f_files;
|
||||
buf->f_ffree = fsbuf.f_ffree;
|
||||
buf->f_fsid = fsbuf.f_fsid;
|
||||
buf->f_namemax = fsbuf.f_namelen;
|
||||
memset (buf->f_spare, '\0', 6 * sizeof (int));
|
||||
|
||||
/* What remains to do is to fill the fields f_frsize, f_favail,
|
||||
and f_flag. */
|
||||
switch (fsbuf.f_type)
|
||||
{
|
||||
case EXT2_SUPER_MAGIC:
|
||||
/* This is not really correct since the fragment size can vary. */
|
||||
buf->f_frsize = 1024;
|
||||
break;
|
||||
|
||||
case ADFS_SUPER_MAGIC:
|
||||
case AFFS_SUPER_MAGIC:
|
||||
case CODA_SUPER_MAGIC:
|
||||
case HPFS_SUPER_MAGIC:
|
||||
case ISOFS_SUPER_MAGIC:
|
||||
case MINIX_SUPER_MAGIC:
|
||||
case MINIX_SUPER_MAGIC2:
|
||||
case MINIX2_SUPER_MAGIC:
|
||||
case MINIX2_SUPER_MAGIC2:
|
||||
case MSDOS_SUPER_MAGIC:
|
||||
case NCP_SUPER_MAGIC:
|
||||
case NFS_SUPER_MAGIC:
|
||||
case PROC_SUPER_MAGIC:
|
||||
case SMB_SUPER_MAGIC:
|
||||
case XENIX_SUPER_MAGIC:
|
||||
case SYSV4_SUPER_MAGIC:
|
||||
case SYSV2_SUPER_MAGIC:
|
||||
case COH_SUPER_MAGIC:
|
||||
default:
|
||||
/* I hope it's safe to assume no fragmentation. */
|
||||
buf->f_frsize = buf->f_bsize;
|
||||
break;
|
||||
}
|
||||
|
||||
/* XXX I have no idea how to compute f_favail. Any idea??? */
|
||||
buf->f_favail = buf->f_ffree;
|
||||
|
||||
/* Determining the flags is tricky. We have to read /proc/mount or
|
||||
the /etc/matb file and search for the entry which matches the given
|
||||
file. The way we can test for matching filesystem is using the
|
||||
device number. */
|
||||
buf->f_flag = 0;
|
||||
if (fstat (fd, &st) >= 0)
|
||||
{
|
||||
int save_errno = errno;
|
||||
struct mntent mntbuf;
|
||||
FILE *mtab;
|
||||
|
||||
mtab = __setmntent ("/proc/mounts", "r");
|
||||
if (mtab == NULL)
|
||||
mtab = __setmntent (_PATH_MOUNTED, "r");
|
||||
|
||||
if (mtab != NULL)
|
||||
{
|
||||
char tmpbuf[1024];
|
||||
|
||||
while (__getmntent_r (mtab, &mntbuf, tmpbuf, sizeof (tmpbuf)))
|
||||
{
|
||||
struct stat fsst;
|
||||
|
||||
/* Find out about the device the current entry is for. */
|
||||
if (stat (mntbuf.mnt_dir, &fsst) >= 0
|
||||
&& st.st_dev == fsst.st_dev)
|
||||
{
|
||||
/* Bingo, we found the entry for the device FD is on.
|
||||
Now interpret the option string. */
|
||||
char *cp = mntbuf.mnt_opts;
|
||||
char *opt;
|
||||
|
||||
while ((opt = strsep (&cp, ",")) != NULL)
|
||||
if (strcmp (opt, "ro") == 0)
|
||||
buf->f_flag |= ST_RDONLY;
|
||||
else if (strcmp (opt, "nosuid") == 0)
|
||||
buf->f_flag |= ST_NOSUID;
|
||||
else if (strcmp (opt, "noexec") == 0)
|
||||
buf->f_flag |= ST_NOEXEC;
|
||||
else if (strcmp (opt, "nodev") == 0)
|
||||
buf->f_flag |= ST_NODEV;
|
||||
else if (strcmp (opt, "sync") == 0)
|
||||
buf->f_flag |= ST_SYNCHRONOUS;
|
||||
else if (strcmp (opt, "mand") == 0)
|
||||
buf->f_flag |= ST_MANDLOCK;
|
||||
else if (strcmp (opt, "noatime") == 0)
|
||||
buf->f_flag |= ST_NOATIME;
|
||||
|
||||
/* We can stop looking for more entries. */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Close the file. */
|
||||
__endmntent (mtab);
|
||||
}
|
||||
|
||||
__set_errno (save_errno);
|
||||
}
|
||||
|
||||
/* We signal success if the statfs call succeeded. */
|
||||
return 0;
|
||||
}
|
46
sysdeps/unix/sysv/linux/statvfs.c
Normal file
46
sysdeps/unix/sysv/linux/statvfs.c
Normal file
@ -0,0 +1,46 @@
|
||||
/* Copyright (C) 1998 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
|
||||
|
||||
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 <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/statvfs.h>
|
||||
|
||||
|
||||
int
|
||||
statvfs (const char *file, struct statvfs *buf)
|
||||
{
|
||||
int save_errno;
|
||||
int retval;
|
||||
int fd;
|
||||
|
||||
fd = open (file, O_RDONLY);
|
||||
if (fd < 0)
|
||||
return -1;
|
||||
|
||||
/* Let fstatvfs do the real work. */
|
||||
retval = fstatvfs (fd, buf);
|
||||
|
||||
/* Close the file while preserving the error number. */
|
||||
save_errno = errno;
|
||||
close (fd);
|
||||
__set_errno (save_errno);
|
||||
|
||||
return retval;
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
/* Header file for mounting/unmount Linux filesystems.
|
||||
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@ -20,32 +20,42 @@
|
||||
/* This is taken from /usr/include/linux/fs.h. */
|
||||
|
||||
#ifndef _SYS_MOUNT_H
|
||||
|
||||
#define _SYS_MOUNT_H 1
|
||||
|
||||
#include <features.h>
|
||||
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
#define BLOCK_SIZE 1024
|
||||
#define BLOCK_SIZE_BITS 10
|
||||
|
||||
|
||||
/* These are the fs-independent mount-flags: up to 16 flags are
|
||||
supported */
|
||||
#define MS_RDONLY 1 /* Mount read-only. */
|
||||
#define MS_NOSUID 2 /* Ignore suid and sgid bits. */
|
||||
#define MS_NODEV 4 /* Disallow access to device special files. */
|
||||
#define MS_NOEXEC 8 /* Disallow program execution. */
|
||||
#define MS_SYNCHRONOUS 16 /* Writes are synced at once. */
|
||||
#define MS_REMOUNT 32 /* Alter flags of a mounted FS. */
|
||||
#define MS_MANDLOCK 64 /* Allow mandatory locks on an FS. */
|
||||
#define S_WRITE 128 /* Write on file/directory/symlink. */
|
||||
#define S_APPEND 256 /* Append-only file. */
|
||||
#define S_IMMUTABLE 512 /* Immutable file. */
|
||||
#define MS_NOATIME 1024 /* Do not update access times. */
|
||||
|
||||
enum
|
||||
{
|
||||
MS_RDONLY = 1, /* Mount read-only. */
|
||||
#define MS_RDONLY MS_RDONLY
|
||||
MS_NOSUID = 2, /* Ignore suid and sgid bits. */
|
||||
#define MS_NOSUID MS_NOSUID
|
||||
MS_NODEV = 4, /* Disallow access to device special files. */
|
||||
#define MS_NODEV MS_NODEV
|
||||
MS_NOEXEC = 8, /* Disallow program execution. */
|
||||
#define MS_NOEXEC MS_NOEXEC
|
||||
MS_SYNCHRONOUS = 16, /* Writes are synced at once. */
|
||||
#define MS_SYNCHRONOUS MS_SYNCHRONOUS
|
||||
MS_REMOUNT = 32, /* Alter flags of a mounted FS. */
|
||||
#define MS_REMOUNT MS_REMOUNT
|
||||
MS_MANDLOCK = 64, /* Allow mandatory locks on an FS. */
|
||||
#define MS_MANDLOCK MS_MANDLOCK
|
||||
S_WRITE = 128, /* Write on file/directory/symlink. */
|
||||
#define S_WRITE S_WRITE
|
||||
S_APPEND = 256, /* Append-only file. */
|
||||
#define S_APPEND S_APPEND
|
||||
S_IMMUTABLE = 512, /* Immutable file. */
|
||||
#define S_IMMUTABLE S_IMMUTABLE
|
||||
MS_NOATIME = 1024 /* Do not update access times. */
|
||||
#define MS_NOATIME MS_NOATIME
|
||||
};
|
||||
|
||||
/* Flags that can be altered by MS_REMOUNT */
|
||||
#define MS_RMT_MASK (MS_RDONLY | MS_MANDLOCK)
|
||||
@ -70,6 +80,8 @@ __BEGIN_DECLS
|
||||
#define BLKRAGET _IO(0x12, 99) /* Get current read ahead setting. */
|
||||
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Mount a filesystem. */
|
||||
extern int mount __P ((__const char *__special_file, __const char *__dir,
|
||||
__const char *__fstype, unsigned long int __rwflag,
|
||||
|
Loading…
Reference in New Issue
Block a user