changeset 2261:04c9eb8c07e9

* src/romfs.c (romfs_getinfo): Support for block usage call. * tests/romfs1.c (main): Add file system block usage test.
author asl
date Fri, 04 Aug 2006 09:21:33 +0000
parents 32d66e0b0050
children c393118a9636
files packages/fs/rom/current/ChangeLog packages/fs/rom/current/src/romfs.c packages/fs/rom/current/tests/romfs1.c
diffstat 3 files changed, 33 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/packages/fs/rom/current/ChangeLog
+++ b/packages/fs/rom/current/ChangeLog
@@ -1,3 +1,8 @@
+2006-08-04 Andrew Lunn <andrew.lunn@ascom.ch>
+	
+	* 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  <andrew.lunn@ascom.ch>
             Peter Korsgaard  <jacmet@sunsite.dk>
 	
--- a/packages/fs/rom/current/src/romfs.c
+++ b/packages/fs/rom/current/src/romfs.c
@@ -800,7 +800,7 @@ static int romfs_stat     ( cyg_mtab_ent
 
 // -------------------------------------------------------------------------
 // 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 @@ static int romfs_getinfo  ( cyg_mtab_ent
     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;
     }
--- a/packages/fs/rom/current/tests/romfs1.c
+++ b/packages/fs/rom/current/tests/romfs1.c
@@ -91,11 +91,11 @@ MTAB_ENTRY( romfs_mte1,
 //==========================================================================
 
 #define SHOW_RESULT( _fn, _res ) \
-diag_printf("<FAIL>: " #_fn "() returned %d %s\n", _res, _res<0?strerror(errno):"");
+  diag_printf("<FAIL>: " #_fn "() returned %d %s\n", (int)_res, _res<0?strerror(errno):"");
 
 #define CHKFAIL_TYPE( _fn, _res, _type ) { \
 if ( _res != -1 ) \
-    diag_printf("<FAIL>: " #_fn "() returned %d (expected -1)\n", _res); \
+  diag_printf("<FAIL>: " #_fn "() returned %d (expected -1)\n", (int)_res); \
 else if ( errno != _type ) \
     diag_printf("<FAIL>: " #_fn "() failed with errno %d (%s),\n    expected %d (%s)\n", errno, strerror(errno), _type, strerror(_type) ); \
 }
@@ -166,7 +166,7 @@ static void listdir( char *name, int sta
             }
             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 main( int argc, char **argv )
 {
     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 @@ int main( int argc, char **argv )
     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("<INFO>: total size: %6lld blocks, %10lld bytes\n",
+		usage.total_blocks, usage.total_blocks * usage.block_size); 
+    diag_printf("<INFO>: free size:  %6lld blocks, %10lld bytes\n",
+		usage.free_blocks, usage.free_blocks * usage.block_size); 
+    diag_printf("<INFO>: block size: %6u bytes\n", usage.block_size);
+#endif
+    // --------------------------------------------------------------
+
     err = umount( "/" );
     if( err < 0 ) SHOW_RESULT( umount, err );