xref: /plan9/sys/src/cmd/ip/imap4d/debug.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
1*7dd7cddfSDavid du Colombier #include <u.h>
2*7dd7cddfSDavid du Colombier #include <libc.h>
3*7dd7cddfSDavid du Colombier #include <auth.h>
4*7dd7cddfSDavid du Colombier #include <bio.h>
5*7dd7cddfSDavid du Colombier #include "imap4d.h"
6*7dd7cddfSDavid du Colombier 
7*7dd7cddfSDavid du Colombier void
8*7dd7cddfSDavid du Colombier boxVerify(Box *box)
9*7dd7cddfSDavid du Colombier {
10*7dd7cddfSDavid du Colombier 	Msg *m;
11*7dd7cddfSDavid du Colombier 	ulong seq, uid, recent;
12*7dd7cddfSDavid du Colombier 
13*7dd7cddfSDavid du Colombier 	if(box == nil)
14*7dd7cddfSDavid du Colombier 		return;
15*7dd7cddfSDavid du Colombier 	recent = 0;
16*7dd7cddfSDavid du Colombier 	seq = 0;
17*7dd7cddfSDavid du Colombier 	uid = 0;
18*7dd7cddfSDavid du Colombier 	for(m = box->msgs; m != nil; m = m->next){
19*7dd7cddfSDavid du Colombier 		if(m->seq == 0)
20*7dd7cddfSDavid du Colombier 			fprint(2, "m->seq == 0: m->seq=%lud\n", m->seq);
21*7dd7cddfSDavid du Colombier 		else if(m->seq <= seq)
22*7dd7cddfSDavid du Colombier 			fprint(2, "m->seq=%lud out of order: last=%lud\n", m->seq, seq);
23*7dd7cddfSDavid du Colombier 		seq = m->seq;
24*7dd7cddfSDavid du Colombier 
25*7dd7cddfSDavid du Colombier 		if(m->uid == 0)
26*7dd7cddfSDavid du Colombier 			fprint(2, "m->uid == 0: m->seq=%lud\n", m->seq);
27*7dd7cddfSDavid du Colombier 		else if(m->uid <= uid)
28*7dd7cddfSDavid du Colombier 			fprint(2, "m->uid=%lud out of order: last=%lud\n", m->uid, uid);
29*7dd7cddfSDavid du Colombier 		uid = m->uid;
30*7dd7cddfSDavid du Colombier 
31*7dd7cddfSDavid du Colombier 		if(m->flags & MRecent)
32*7dd7cddfSDavid du Colombier 			recent++;
33*7dd7cddfSDavid du Colombier 	}
34*7dd7cddfSDavid du Colombier 	if(seq != box->max)
35*7dd7cddfSDavid du Colombier 		fprint(2, "max=%lud, should be %lud\n", box->max, seq);
36*7dd7cddfSDavid du Colombier 	if(uid >= box->uidnext)
37*7dd7cddfSDavid du Colombier 		fprint(2, "uidnext=%lud, maxuid=%lud\n", box->uidnext, uid);
38*7dd7cddfSDavid du Colombier 	if(recent != box->recent)
39*7dd7cddfSDavid du Colombier 		fprint(2, "recent=%lud, should be %lud\n", box->recent, recent);
40*7dd7cddfSDavid du Colombier }
41*7dd7cddfSDavid du Colombier 
42*7dd7cddfSDavid du Colombier void
43*7dd7cddfSDavid du Colombier openfiles(void)
44*7dd7cddfSDavid du Colombier {
45*7dd7cddfSDavid du Colombier 	Dir d;
46*7dd7cddfSDavid du Colombier 	int i;
47*7dd7cddfSDavid du Colombier 
48*7dd7cddfSDavid du Colombier 	for(i = 0; i < 20; i++)
49*7dd7cddfSDavid du Colombier 		if(dirfstat(i, &d) >= 0)
50*7dd7cddfSDavid du Colombier 			fprint(2, "fd[%d]='%s' type=%c dev=%d user='%s group='%s'\n", i, d.name, d.type, d.dev, d.uid, d.gid);
51*7dd7cddfSDavid du Colombier }
52*7dd7cddfSDavid du Colombier 
53*7dd7cddfSDavid du Colombier void
54*7dd7cddfSDavid du Colombier ls(char *file)
55*7dd7cddfSDavid du Colombier {
56*7dd7cddfSDavid du Colombier 	Dir d[NDirs];
57*7dd7cddfSDavid du Colombier 	int fd, i, nd;
58*7dd7cddfSDavid du Colombier 
59*7dd7cddfSDavid du Colombier 	fd = open(file, OREAD);
60*7dd7cddfSDavid du Colombier 	if(fd < 0)
61*7dd7cddfSDavid du Colombier 		return;
62*7dd7cddfSDavid du Colombier 
63*7dd7cddfSDavid du Colombier 	/*
64*7dd7cddfSDavid du Colombier 	 * read box to find all messages
65*7dd7cddfSDavid du Colombier 	 * each one has a directory, and is in numerical order
66*7dd7cddfSDavid du Colombier 	 */
67*7dd7cddfSDavid du Colombier 	if(dirfstat(fd, d) < 0){
68*7dd7cddfSDavid du Colombier 		close(fd);
69*7dd7cddfSDavid du Colombier 		return;
70*7dd7cddfSDavid du Colombier 	}
71*7dd7cddfSDavid du Colombier 	if(!(d->mode & CHDIR)){
72*7dd7cddfSDavid du Colombier 		fprint(2, "file %s\n", file);
73*7dd7cddfSDavid du Colombier 		close(fd);
74*7dd7cddfSDavid du Colombier 		return;
75*7dd7cddfSDavid du Colombier 	}
76*7dd7cddfSDavid du Colombier 	while((nd = dirread(fd, d, sizeof(Dir) * NDirs)) >= sizeof(Dir)){
77*7dd7cddfSDavid du Colombier 		nd /= sizeof(Dir);
78*7dd7cddfSDavid du Colombier 		for(i = 0; i < nd; i++){
79*7dd7cddfSDavid du Colombier 			fprint(2, "%s/%s %c\n", file, d[i].name, "-d"[(d[i].mode & CHDIR) == CHDIR]);
80*7dd7cddfSDavid du Colombier 		}
81*7dd7cddfSDavid du Colombier 	}
82*7dd7cddfSDavid du Colombier 	close(fd);
83*7dd7cddfSDavid du Colombier }
84