74 lines · 1.5 KB · C
RawDownload
#include <u.h>#include <libc.h>#include <venti.h>#include <diskfs.h>#include <thread.h> voidusage(void){	fprint(2, "usage: vcat [-z] score >diskfile\n");	threadexitsall("usage");} voidthreadmain(int argc, char **argv){	extern int nfilereads;	char *pref;	int zerotoo;	uchar score[VtScoreSize];	u8int *zero;	u32int i;	u32int n;	Block *b;	Disk *disk;	Fsys *fsys;	VtCache *c;	VtConn *z; 	zerotoo = 0;	ARGBEGIN{	case 'z':		zerotoo = 1;		break;	default:		usage();	}ARGEND 	if(argc != 1)		usage(); 	fmtinstall('V', vtscorefmt); 	if(vtparsescore(argv[0], &pref, score) < 0)		sysfatal("bad score '%s'", argv[0]);	if((z = vtdial(nil)) == nil)		sysfatal("vtdial: %r");	if(vtconnect(z) < 0)		sysfatal("vtconnect: %r");	if((c = vtcachealloc(z, 16384*32)) == nil)		sysfatal("vtcache: %r");	if((disk = diskopenventi(c, score)) == nil)		sysfatal("diskopenventi: %r");	if((fsys = fsysopen(disk)) == nil)		sysfatal("fsysopen: %r"); 	zero = emalloc(fsys->blocksize);	fprint(2, "%d blocks total\n", fsys->nblock);	n = 0;	for(i=0; i<fsys->nblock; i++){		if((b = fsysreadblock(fsys, i)) != nil){			if(pwrite(1, b->data, fsys->blocksize,			    (u64int)fsys->blocksize*i) != fsys->blocksize)				fprint(2, "error writing block %lud: %r\n", i);			n++;			blockput(b);		}else if(zerotoo || i==fsys->nblock-1)			if(pwrite(1, zero, fsys->blocksize,			    (u64int)fsys->blocksize*i) != fsys->blocksize)				fprint(2, "error writing block %lud: %r\n", i);	}	fprint(2, "%d blocks in use, %d file reads\n", n, nfilereads);	threadexitsall(nil);}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t