change#3447 didn't do enough to exempt Foo->bar(qw/.../) from
[p5sagit/p5-mst-13.2.git] / ext / SDBM_File / sdbm / dba.c
CommitLineData
463ee0b2 1/*
2 * dba dbm analysis/recovery
3 */
4
5#include <stdio.h>
6#include <sys/file.h>
17f28c40 7#include "EXTERN.h"
463ee0b2 8#include "sdbm.h"
9
10char *progname;
11extern void oops();
12
13int
14main(argc, argv)
15char **argv;
16{
17 int n;
18 char *p;
19 char *name;
20 int pagf;
21
22 progname = argv[0];
23
24 if (p = argv[1]) {
25 name = (char *) malloc((n = strlen(p)) + 5);
db7c17d7 26 if (!name)
27 oops("cannot get memory");
28
463ee0b2 29 strcpy(name, p);
30 strcpy(name + n, ".pag");
31
32 if ((pagf = open(name, O_RDONLY)) < 0)
33 oops("cannot open %s.", name);
34
35 sdump(pagf);
36 }
37 else
38 oops("usage: %s dbname", progname);
39
40 return 0;
41}
42
43sdump(pagf)
44int pagf;
45{
46 register b;
47 register n = 0;
48 register t = 0;
49 register o = 0;
50 register e;
51 char pag[PBLKSIZ];
52
53 while ((b = read(pagf, pag, PBLKSIZ)) > 0) {
54 printf("#%d: ", n);
55 if (!okpage(pag))
56 printf("bad\n");
57 else {
58 printf("ok. ");
59 if (!(e = pagestat(pag)))
60 o++;
61 else
62 t += e;
63 }
64 n++;
65 }
66
67 if (b == 0)
68 printf("%d pages (%d holes): %d entries\n", n, o, t);
69 else
70 oops("read failed: block %d", n);
71}
72
73pagestat(pag)
74char *pag;
75{
76 register n;
77 register free;
78 register short *ino = (short *) pag;
79
80 if (!(n = ino[0]))
81 printf("no entries.\n");
82 else {
83 free = ino[n] - (n + 1) * sizeof(short);
84 printf("%3d entries %2d%% used free %d.\n",
85 n / 2, ((PBLKSIZ - free) * 100) / PBLKSIZ, free);
86 }
87 return n / 2;
88}