summaryrefslogtreecommitdiff
path: root/sqmail-4.3.07/src/qmail-qread.c
diff options
context:
space:
mode:
Diffstat (limited to 'sqmail-4.3.07/src/qmail-qread.c')
-rw-r--r--sqmail-4.3.07/src/qmail-qread.c162
1 files changed, 0 insertions, 162 deletions
diff --git a/sqmail-4.3.07/src/qmail-qread.c b/sqmail-4.3.07/src/qmail-qread.c
deleted file mode 100644
index 888c14a..0000000
--- a/sqmail-4.3.07/src/qmail-qread.c
+++ /dev/null
@@ -1,162 +0,0 @@
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include "stralloc.h"
-#include "fmt.h"
-#include "str.h"
-#include "getln.h"
-#include "fmtqfn.h"
-#include "readsubdir.h"
-#include "auto_qmail.h"
-#include "open.h"
-#include "datetime.h"
-#include "date822fmt.h"
-#include "error.h"
-#include "exit.h"
-
-readsubdir rs;
-
-void die(int n) { buffer_flush(buffer_1); _exit(n); }
-
-void warn(char *s1,char *s2)
-{
- char *x;
- x = error_str(errno);
- buffer_puts(buffer_1,s1);
- buffer_puts(buffer_1,s2);
- buffer_puts(buffer_1,": ");
- buffer_puts(buffer_1,x);
- buffer_puts(buffer_1,"\n");
-}
-
-void die_nomem() { buffer_puts(buffer_1,"fatal: out of memory\n"); die(111); }
-void die_chdir() { warn("fatal: unable to chdir",""); die(110); }
-void die_opendir(fn) char *fn; { warn("fatal: unable to opendir ",fn); die(110); }
-
-void err(unsigned long id)
-{
- char foo[FMT_ULONG];
- foo[fmt_ulong(foo,id)] = 0;
- warn("warning: trouble with #",foo);
-}
-
-char fnmess[FMTQFN];
-char fninfo[FMTQFN];
-char fnlocal[FMTQFN];
-char fnremote[FMTQFN];
-char fnbounce[FMTQFN];
-
-char inbuf[1024];
-stralloc sender = {0};
-
-unsigned long id;
-datetime_sec qtime;
-int flagbounce;
-unsigned long size;
-
-unsigned int fmtstats(char *s)
-{
- struct datetime dt;
- unsigned int len;
- unsigned int i;
-
- len = 0;
- datetime_tai(&dt,qtime);
- i = date822fmt(s,&dt) - 7/*XXX*/; len += i; if (s) s += i;
- i = fmt_str(s," GMT #"); len += i; if (s) s += i;
- i = fmt_ulong(s,id); len += i; if (s) s += i;
- i = fmt_str(s," "); len += i; if (s) s += i;
- i = fmt_ulong(s,size); len += i; if (s) s += i;
- i = fmt_str(s," <"); len += i; if (s) s += i;
- i = fmt_str(s,sender.s + 1); len += i; if (s) s += i;
- i = fmt_str(s,"> "); len += i; if (s) s += i;
- if (flagbounce) {
- i = fmt_str(s," bouncing"); len += i; if (s) s += i;
- }
-
- return len;
-}
-
-stralloc stats = {0};
-
-void out(char *s,unsigned int n)
-{
- while (n > 0) {
- buffer_put(buffer_1,((*s >= 32) && (*s <= 126)) ? s : "_",1);
- --n;
- ++s;
- }
-}
-void outs(char *s) { out(s,str_len(s)); }
-void outok(char *s) { buffer_puts(buffer_1,s); }
-
-void putstats()
-{
- if (!stralloc_ready(&stats,fmtstats(FMT_LEN))) die_nomem();
- stats.len = fmtstats(stats.s);
- out(stats.s,stats.len);
- outok("\n");
-}
-
-stralloc line = {0};
-
-int main()
-{
- int channel;
- int match;
- struct stat st;
- int fd;
- buffer b;
- int x;
-
- if (chdir(auto_qmail) == -1) die_chdir();
- if (chdir("queue") == -1) die_chdir();
- readsubdir_init(&rs,"info",die_opendir);
-
- while ((x = readsubdir_next(&rs,&id)))
- if (x > 0) {
- fmtqfn(fnmess,"mess/",id,1);
- fmtqfn(fninfo,"info/",id,1);
- fmtqfn(fnlocal,"local/",id,1);
- fmtqfn(fnremote,"remote/",id,1);
- fmtqfn(fnbounce,"bounce/",id,0);
-
- if (stat(fnmess,&st) == -1) { err(id); continue; }
- size = st.st_size;
- flagbounce = !stat(fnbounce,&st);
-
- fd = open_read(fninfo);
- if (fd == -1) { err(id); continue; }
- buffer_init(&b,read,fd,inbuf,sizeof(inbuf));
- if (getln(&b,&sender,&match,0) == -1) die_nomem();
- if (fstat(fd,&st) == -1) { close(fd); err(id); continue; }
- close(fd);
- qtime = st.st_mtime;
-
- putstats();
-
- for (channel = 0; channel < 2; ++channel) {
- fd = open_read(channel ? fnremote : fnlocal);
- if (fd == -1) {
- if (errno != ENOENT) err(id);
- } else {
- for (;;) {
- if (getln(&b,&line,&match,0) == -1) die_nomem();
- if (!match) break;
- switch (line.s[0]) {
- case 'D':
- outok(" done");
- case 'T':
- outok(channel ? "\tremote\t" : "\tlocal\t");
- outs(line.s + 1);
- outok("\n");
- break;
- }
- }
- close(fd);
- }
- }
- }
-
- die(0);
-}