compactdb.c 652 B

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