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