xref: /plan9/sys/src/cmd/replica/compactdb.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
1*9a747e4fSDavid du Colombier /*
2*9a747e4fSDavid du Colombier  * compact a database file
3*9a747e4fSDavid du Colombier  */
4*9a747e4fSDavid du Colombier #include "all.h"
5*9a747e4fSDavid du Colombier 
6*9a747e4fSDavid du Colombier Db *db;
7*9a747e4fSDavid du Colombier 
8*9a747e4fSDavid du Colombier void
usage(void)9*9a747e4fSDavid du Colombier usage(void)
10*9a747e4fSDavid du Colombier {
11*9a747e4fSDavid du Colombier 	fprint(2, "usage: replica/compactdb db\n");
12*9a747e4fSDavid du Colombier 	exits("usage");
13*9a747e4fSDavid du Colombier }
14*9a747e4fSDavid du Colombier 
15*9a747e4fSDavid du Colombier void
main(int argc,char ** argv)16*9a747e4fSDavid du Colombier main(int argc, char **argv)
17*9a747e4fSDavid du Colombier {
18*9a747e4fSDavid du Colombier 	Avlwalk *w;
19*9a747e4fSDavid du Colombier 	Biobuf bout;
20*9a747e4fSDavid du Colombier 	Entry *e;
21*9a747e4fSDavid du Colombier 
22*9a747e4fSDavid du Colombier 	quotefmtinstall();
23*9a747e4fSDavid du Colombier 	ARGBEGIN{
24*9a747e4fSDavid du Colombier 	default:
25*9a747e4fSDavid du Colombier 		usage();
26*9a747e4fSDavid du Colombier 	}ARGEND
27*9a747e4fSDavid du Colombier 
28*9a747e4fSDavid du Colombier 	if(argc != 1)
29*9a747e4fSDavid du Colombier 		usage();
30*9a747e4fSDavid du Colombier 
31*9a747e4fSDavid du Colombier 	Binit(&bout, 1, OWRITE);
32*9a747e4fSDavid du Colombier 	db = opendb(argv[0]);
33*9a747e4fSDavid du Colombier 	w = avlwalk(db->avl);
34*9a747e4fSDavid du Colombier 	while(e = (Entry*)avlnext(w))
35*9a747e4fSDavid du Colombier 		Bprint(&bout, "%q %q %luo %q %q %lud %lld\n",
36*9a747e4fSDavid du Colombier 			e->name, strcmp(e->name, e->d.name)==0 ? "-" : e->d.name, e->d.mode,
37*9a747e4fSDavid du Colombier 			e->d.uid, e->d.gid, e->d.mtime, e->d.length);
38*9a747e4fSDavid du Colombier 	if(Bterm(&bout) < 0)
39*9a747e4fSDavid du Colombier 		sysfatal("writing output: %r");
40*9a747e4fSDavid du Colombier 
41*9a747e4fSDavid du Colombier 	exits(nil);
42*9a747e4fSDavid du Colombier }
43