diff options
author | Chris Johns <chrisj@rtems.org> | 2009-10-08 07:07:36 +0000 |
---|---|---|
committer | Chris Johns <chrisj@rtems.org> | 2009-10-08 07:07:36 +0000 |
commit | eb649786c8528f349a39b35ae2965e3f874e2088 (patch) | |
tree | 194f40f18f42b9f12ee58df2bee39b0e7d7a4cc3 /cpukit/libcsupport | |
parent | Regenerate (diff) | |
download | rtems-eb649786c8528f349a39b35ae2965e3f874e2088.tar.bz2 |
2009-10-08 Chris Johns <chrisj@rtems.org>
* Makefile.am, preinstall.am: Added statvfs.h.
* libcsupport/Makefile.am: Add statvfs.c.
* libcsupport/include/sys/statvfs.h, libcsupport/src/statvfs.c:
New.
* libcsupport/include/rtems/libio.h: Add a file system handler for
the statvfs call.
* libfs/src/devfs/devfs_init.c, libfs/src/dosfs/msdos_init.c,
libfs/src/imfs/imfs_init.c, libfs/src/nfsclient/src/nfs.c: Set the
statvfs handler to NULL.
* include/rtems/fs.h: Add a second node access field for the RFS
file system to hold a directory offset while the existing field
holds the inode number. This save a rescan of the directory when
working with directories.
* libblock/include/rtems/bdbuf.h: Added references and user fields
to the buffer descriptor.
* libblock/src/bdbuf.c: Added dynamic buffer support for different
block sizes. Fixed a number of bugs.
* libblock/src/blkdev.c: Release the disk device on an error.
* libblock/src/diskdevs.c: Set the block size to the media block
size during initialisation of the disk device.
* libblock/src/flashdisk.c, libblock/src/nvdisk.c,
libblock/src/ramdisk.c: Updated the drivers to handle variable
block sizes.
* libfs/src/dosfs/fat.c, libfs/src/dosfs/fat.h: Release any
buffers when an error occurs. The FAT buffer layer hangs onto a
single buffer while mounted. This should be fixed.
* sapi/inline/rtems/chain.inl: Added rtems_chain_set_off_chain,
rtems_chain_is_node_off_chain, and rtems_chain_previous.
* score/inline/rtems/score/chain.inl: Added _Chain_Set_off_chain,
and _Chain_Is_node_off_chain.
* libmisc/shell/main_ln.c, libmisc/shell/main_mknod.c,
libmisc/shell/mknod-pack_dev.c, libmisc/shell/mknod-pack_dev.h:
New shell commands.
* libmisc/Makefile.am, libmisc/shell/shellconfig.h: Added ln and
mknod commands.
* libmisc/shell/hexdump-display.c: Fixed the reopen bug which
showed up as a free with a bad pointer.
* libmisc/shell/main_mount.c: List the user adding file system
when listing the available file systems to mount.
* libmisc/shell/utils-cp.c: Remove the fixed static copy buffer
and use a large dynamic buffer.
* score/inline/rtems/score/address.inl, score/src/coremsgsubmit.c,
score/src/objectallocate.c, score/src/objectfree.c: Remove
warnings.
Diffstat (limited to 'cpukit/libcsupport')
-rw-r--r-- | cpukit/libcsupport/Makefile.am | 2 | ||||
-rw-r--r-- | cpukit/libcsupport/include/rtems/libio.h | 7 | ||||
-rw-r--r-- | cpukit/libcsupport/include/sys/statvfs.h | 45 | ||||
-rw-r--r-- | cpukit/libcsupport/src/statvfs.c | 60 |
4 files changed, 113 insertions, 1 deletions
diff --git a/cpukit/libcsupport/Makefile.am b/cpukit/libcsupport/Makefile.am index 40c46f0847..ef66d121ae 100644 --- a/cpukit/libcsupport/Makefile.am +++ b/cpukit/libcsupport/Makefile.am @@ -62,7 +62,7 @@ SYSTEM_CALL_C_FILES = src/open.c src/close.c src/read.c src/write.c \ src/link.c src/unlink.c src/umask.c src/ftruncate.c src/utime.c src/fstat.c \ src/fcntl.c src/fpathconf.c src/getdents.c src/fsync.c src/fdatasync.c \ src/pipe.c src/dup.c src/dup2.c src/symlink.c src/readlink.c src/creat.c \ - src/chroot.c src/sync.c src/_rename_r.c + src/chroot.c src/sync.c src/_rename_r.c src/statvfs.c ## Until sys/uio.h is moved to libcsupport, we have to have networking ## enabled to compile these. Hopefully this is a temporary situation. diff --git a/cpukit/libcsupport/include/rtems/libio.h b/cpukit/libcsupport/include/rtems/libio.h index 44e8b59267..e89427fa2e 100644 --- a/cpukit/libcsupport/include/rtems/libio.h +++ b/cpukit/libcsupport/include/rtems/libio.h @@ -28,6 +28,7 @@ #include <sys/types.h> #include <sys/stat.h> #include <sys/ioctl.h> +#include <sys/statvfs.h> /* * Define data types which must be constructed using forward references. @@ -250,6 +251,11 @@ typedef int (*rtems_filesystem_readlink_t)( size_t bufsize ); +typedef int (*rtems_filesystem_statvfs_t)( + rtems_filesystem_location_info_t *loc, /* IN */ + struct statvfs *buf /* OUT */ +); + /* * operations table that must be defined for every file system. */ @@ -274,6 +280,7 @@ struct _rtems_filesystem_operations_table { rtems_filesystem_evaluate_link_t eval_link_h; rtems_filesystem_symlink_t symlink_h; rtems_filesystem_readlink_t readlink_h; + rtems_filesystem_statvfs_t statvfs_h; }; #if 0 diff --git a/cpukit/libcsupport/include/sys/statvfs.h b/cpukit/libcsupport/include/sys/statvfs.h new file mode 100644 index 0000000000..1ef210a702 --- /dev/null +++ b/cpukit/libcsupport/include/sys/statvfs.h @@ -0,0 +1,45 @@ +/* + * COPYRIGHT (c) 2009 Chris Johns <chrisj@rtems.org> + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + */ +/* + * The statvfs as defined by the SUS: + * http://www.opengroup.org/onlinepubs/009695399/basedefs/sys/statvfs.h.html + */ + +#ifndef _SYS_STATVFS_H_ +#define _SYS_STATVFS_H_ + +#include <sys/cdefs.h> +#include <stdint.h> + +typedef uint64_t fsblkcnt_t; +typedef uint32_t fsfilcnt_t; + +struct statvfs +{ + unsigned long f_bsize; /**< File system block size. */ + unsigned long f_frsize; /**< Fundamental file system block size. */ + fsblkcnt_t f_blocks; /**< Total number of blocks on file system in units + * of f_frsize. */ + fsblkcnt_t f_bfree; /**< Total number of free blocks. */ + fsblkcnt_t f_bavail; /**< Number of free blocks available to + * non-privileged process. */ + fsfilcnt_t f_files; /**< Total number of file serial numbers. */ + fsfilcnt_t f_ffree; /**< Total number of free file serial numbers. */ + fsfilcnt_t f_favail; /**< Number of file serial numbers available to + * non-privileged process. */ + unsigned long f_fsid; /**< File system ID. */ + unsigned long f_flag; /**< Bit mask of f_flag values. */ + unsigned long f_namemax; /**< Maximum filename length. */ +}; + +int statvfs(const char *, struct statvfs *); +int fstatvfs(int, struct statvfs *); + +#endif diff --git a/cpukit/libcsupport/src/statvfs.c b/cpukit/libcsupport/src/statvfs.c new file mode 100644 index 0000000000..bd6827fe76 --- /dev/null +++ b/cpukit/libcsupport/src/statvfs.c @@ -0,0 +1,60 @@ +/* + * COPYRIGHT (c) 2009 Chris Johns <chrisj@rtems.org> + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + */ +/* + * The statvfs as defined by the SUS: + * http://www.opengroup.org/onlinepubs/009695399/basedefs/sys/statvfs.h.html + */ + +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#include <rtems/libio_.h> +#include <rtems/seterr.h> + +#include <sys/statvfs.h> + +/* + * Data structures and routines private to mount/unmount pair. + */ +extern rtems_chain_control rtems_filesystem_mount_table_control; + +int +statvfs (const char *path, struct statvfs *sb) +{ + rtems_filesystem_location_info_t loc; + rtems_filesystem_location_info_t *fs_mount_root; + rtems_filesystem_mount_table_entry_t *mt_entry; + int result; + + /* + * Get + * The root node of the mounted filesytem. + * The node for the directory that the fileystem is mounted on. + * The mount entry that is being refered to. + */ + + if ( rtems_filesystem_evaluate_path( path, strlen( path ), 0x0, &loc, true ) ) + return -1; + + mt_entry = loc.mt_entry; + fs_mount_root = &mt_entry->mt_fs_root; + + if ( !fs_mount_root->ops->statvfs_h ) + rtems_set_errno_and_return_minus_one( ENOTSUP ); + + memset (sb, 0, sizeof (struct statvfs)); + + result = ( fs_mount_root->ops->statvfs_h )( fs_mount_root, sb ); + + rtems_filesystem_freenode( &loc ); + + return result; +} |