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