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