URI:
       tdiskcat.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tdiskcat.c (976B)
       ---
            1 #include <u.h>
            2 #include <libc.h>
            3 #include <diskfs.h>
            4 
            5 void
            6 usage(void)
            7 {
            8         fprint(2, "usage: fscat fspartition\n");
            9         exits("usage");
           10 }
           11 
           12 int
           13 main(int argc, char **argv)
           14 {
           15         extern int nfilereads;
           16         u8int *zero;
           17         u32int i;
           18         u32int n;
           19         Block *b;
           20         Disk *disk;
           21         Fsys *fsys;
           22 
           23         ARGBEGIN{
           24         default:
           25                 usage();
           26         }ARGEND
           27 
           28         if(argc != 1)
           29                 usage();
           30 
           31         if((disk = diskopenfile(argv[0])) == nil)
           32                 sysfatal("diskopen: %r");
           33         if((disk = diskcache(disk, 16384, 16)) == nil)
           34                 sysfatal("diskcache: %r");
           35         if((fsys = fsysopen(disk)) == nil)
           36                 sysfatal("fsysopen: %r");
           37 
           38         zero = emalloc(fsys->blocksize);
           39         fprint(2, "%d blocks total\n", fsys->nblock);
           40         n = 0;
           41         for(i=0; i<fsys->nblock; i++){
           42                 if((b = fsysreadblock(fsys, i)) != nil){
           43                         write(1, b->data, fsys->blocksize);
           44                         n++;
           45                         blockput(b);
           46                 }else
           47                         write(1, zero, fsys->blocksize);
           48                 if(b == nil && i < 2)
           49                         sysfatal("block %d not in use", i);
           50         }
           51         fprint(2, "%d blocks in use, %d file reads\n", n, nfilereads);
           52         exits(nil);
           53         return 0;
           54 }