Index: fs/rom/current/ChangeLog =================================================================== RCS file: /cvs/ecos/ecos/packages/fs/rom/current/ChangeLog,v retrieving revision 1.19 diff -u -r1.19 ChangeLog --- fs/rom/current/ChangeLog 15 Feb 2006 20:04:51 -0000 1.19 +++ fs/rom/current/ChangeLog 4 Aug 2006 09:21:05 -0000 @@ -1,3 +1,8 @@ +2006-08-04 Andrew Lunn + + * src/romfs.c (romfs_getinfo): Support for block usage call. + * tests/romfs1.c (main): Add file system block usage test. + 2006-02-15 Andrew Lunn Peter Korsgaard Index: fs/rom/current/src/romfs.c =================================================================== RCS file: /cvs/ecos/ecos/packages/fs/rom/current/src/romfs.c,v retrieving revision 1.7 diff -u -r1.7 romfs.c --- fs/rom/current/src/romfs.c 5 Oct 2004 08:00:43 -0000 1.7 +++ fs/rom/current/src/romfs.c 4 Aug 2006 09:21:05 -0000 @@ -800,7 +800,7 @@ // ------------------------------------------------------------------------- // romfs_getinfo() -// Getinfo. Currently only support pathconf(). +// Getinfo. Currently only support pathconf() and file system block usage static int romfs_getinfo ( cyg_mtab_entry *mte, cyg_dir dir, const char *name, int key, void *buf, int len ) @@ -819,7 +819,16 @@ case FS_INFO_CONF: err = romfs_pathconf( ds.node, (struct cyg_pathconf_info *)buf ); break; - +#if defined(CYGSEM_FILEIO_BLOCK_USAGE) + case FS_INFO_BLOCK_USAGE: { + struct cyg_fs_block_usage *usage = (struct cyg_fs_block_usage *) buf; + struct romfs_disk *disk = (struct romfs_disk*) mte->data; + usage->total_blocks = disk->disksize; + usage->free_blocks = 0; + usage->block_size = 1; + return ENOERR; + } +#endif default: err = EINVAL; } Index: fs/rom/current/tests/romfs1.c =================================================================== RCS file: /cvs/ecos/ecos/packages/fs/rom/current/tests/romfs1.c,v retrieving revision 1.1 diff -u -r1.1 romfs1.c --- fs/rom/current/tests/romfs1.c 13 Dec 2004 15:34:53 -0000 1.1 +++ fs/rom/current/tests/romfs1.c 4 Aug 2006 09:21:06 -0000 @@ -91,11 +91,11 @@ //========================================================================== #define SHOW_RESULT( _fn, _res ) \ -diag_printf(": " #_fn "() returned %d %s\n", _res, _res<0?strerror(errno):""); + diag_printf(": " #_fn "() returned %d %s\n", (int)_res, _res<0?strerror(errno):""); #define CHKFAIL_TYPE( _fn, _res, _type ) { \ if ( _res != -1 ) \ - diag_printf(": " #_fn "() returned %d (expected -1)\n", _res); \ + diag_printf(": " #_fn "() returned %d (expected -1)\n", (int)_res); \ else if ( errno != _type ) \ diag_printf(": " #_fn "() failed with errno %d (%s),\n expected %d (%s)\n", errno, strerror(errno), _type, strerror(_type) ); \ } @@ -166,7 +166,7 @@ } else { - diag_printf(" [mode %08x ino %08x nlink %d size %d]", + diag_printf(" [mode %08x ino %08x nlink %d size %ld]", sbuf.st_mode,sbuf.st_ino,sbuf.st_nlink,sbuf.st_size); } } @@ -286,6 +286,9 @@ { int err; char address[16]; +#if defined(CYGSEM_FILEIO_BLOCK_USAGE) + struct cyg_fs_block_usage usage; +#endif CYG_TEST_INIT(); @@ -377,6 +380,17 @@ CHKFAIL_TYPE( umount, err, EINVAL ); #endif +#if defined(CYGSEM_FILEIO_BLOCK_USAGE) + err = cyg_fs_getinfo("/", FS_INFO_BLOCK_USAGE, &usage, sizeof(usage)); + if( err < 0 ) SHOW_RESULT( cyg_fs_getinfo, err ); + diag_printf(": total size: %6lld blocks, %10lld bytes\n", + usage.total_blocks, usage.total_blocks * usage.block_size); + diag_printf(": free size: %6lld blocks, %10lld bytes\n", + usage.free_blocks, usage.free_blocks * usage.block_size); + diag_printf(": block size: %6u bytes\n", usage.block_size); +#endif + // -------------------------------------------------------------- + err = umount( "/" ); if( err < 0 ) SHOW_RESULT( umount, err );