void ScanSpoolObject(uint16 spoolobj) { char *path; uint16 spoolnum; int i; for (i = GetFirstSpool(&spoolnum, &path, NULL, NULL, NULL, NULL, NULL); i; i = GetNextSpool(&spoolnum, &path, NULL, NULL, NULL, NULL, NULL)) { if (spoolobj == (uint16)-1 || spoolobj == spoolnum) { if (path == NULL || !*path) continue; if (chdir(PatExpand(SpoolHomePat)) == -1 || chdir(path) == -1) { fprintf(stderr, "Unable to chdir(%s/%s): %s\n", PatExpand(SpoolHomePat), path, strerror(errno)); exit(1); } ScanSpool(spoolnum); /* * Sort directories */ if (FileIdx > 1) qsort(FileAry, FileIdx, sizeof(char *), strSort); /* * Process directories */ { int i; for (i = 0; i < FileIdx; ++i) { int gmt; char *p; p = strstr(FileAry[i], "D."); if (p && sscanf(p, "D.%x", &gmt) == 1) { ScanSpoolDirectory(FileAry[i], gmt, spoolnum); } } } FileIdx = 0; } } }
int main(int ac, char **av) { int r = 0; int i; char *arg = NULL; char *file = NULL; LogFo = stderr; LoadDiabloConfig(ac, av); for (i = 1; i < ac; ++i) { char *ptr = av[i]; if (*ptr != '-') { arg = ptr; continue; } ptr += 2; switch(ptr[-1]) { case 'C': if (*ptr == 0) ++i; break; case 'd': DebugOpt = atoi(*ptr ? ptr : av[++i]); break; case 'F': ForceOpt = 1; break; case 'f': file = (*ptr) ? ptr : av[++i]; break; case 'H': ShowFileHeader = 1; break; case 'h': HeadOnly = 1; break; case 'q': QuietOpt = 1; break; case 's': StripCR = 0; break; case 'V': PrintVersion(); break; case 'v': VerifyOnly = 1; LogFo = stdout; break; default: fprintf(stderr, "dreadart: Illegal option: %s\n", ptr - 2); Usage(av[0]); } } if (arg == NULL && file == NULL) Usage(av[0]); HistoryOpen(NULL, HGF_READONLY); LoadSpoolCtl(0, 1); if (arg == NULL) { char buf[8192]; char msgid[MAXMSGIDLEN]; FILE *fi = (strcmp(file, "-") == 0) ? stdin : fopen(file, "r"); if (fi) { while (fgets(buf, sizeof(buf), fi) != NULL) { hash_t hv; char *m; if (strncmp(buf, "DUMP ", 5) == 0) { History h = { 0 }; if (sscanf(buf + 5, "%s gm=%d ex=%hd boff=%d bsize=%d", msgid, &h.gmt, &h.exp, &h.boffset, &h.bsize) == 5) { char *p; h.hv.h1 = (int32)strtoul(msgid, &p, 16); if (*p == '.') h.hv.h2 = (int32)strtoul(p + 1, &p, 16); if (*p == '.') h.iter = (int16)strtoul(p + 1, NULL, 16); r = LookupHash(h.hv, NULL, &h); } } else if ((m = strchr(buf, '<')) != NULL) { char *p; if ((p = strchr(m, '>')) == NULL) continue; *++p = 0; hv = hhash(m); r = LookupHash(hv, m, NULL); } else if (sscanf(buf, "%x.%x", &hv.h1, &hv.h2) == 2) { r = LookupHash(hv, NULL, NULL); } } if (fi != stdin) fclose(fi); } else { fprintf(stderr, "Unable to open %s (%s)\n", file, strerror(errno)); } } else { hash_t hv; char *msgid = NULL; if (arg[0] == '<') { msgid = arg; hv = hhash(arg); r = LookupHash(hv, msgid, NULL); } else if (arg[0] == 'D' && arg[1] == '.') { int32 dummy; if (sscanf(arg + 2, "%x/%x.%x", &dummy, &hv.h1, &hv.h2) != 3) { fprintf(stderr, "argument error\n"); exit(1); } r = LookupHash(hv, msgid, NULL); } else if (sscanf(arg, "%x.%x", &hv.h1, &hv.h2) == 2) { r = LookupHash(hv, msgid, NULL); } else { char fname[PATH_MAX]; char *p = fname; History h = { 0 }; *p = 0; if (*arg != '/') { sprintf(p, "%s/", PatExpand(SpoolHomePat)); p += strlen(p); } if (sscanf(arg, "%[^:]:%d,%d", p, &h.boffset, &h.bsize) == 3) { DumpArticle(fname, &h, NULL); } else { printf("Unknown argument: %s\n", arg); } } } exit(r); }
int main(int ac, char **av) { char *qFile = NULL; const char *cFile = NULL; int oldFormat = 0; OpenLog("dspoolout", (DebugOpt > 0 ? LOG_PERROR: 0) | LOG_NDELAY | LOG_PID); LoadDiabloConfig(ac, av); cFile = DNewsfeedsPat; /* * Maintain compatability with old format */ { struct stat sb; if (stat(PatLibExpand(DNNTPSpoolCtlPat), &sb) == 0) { cFile = DNNTPSpoolCtlPat; oldFormat = 1; } } /* * Shift into the out.going directory */ if (chdir(PatExpand(DQueueHomePat)) != 0) { fprintf(stderr, "unable to chdir to %s\n", PatExpand(DQueueHomePat)); exit(1); } { int i; for (i = 1; i < ac; ++i) { char *ptr = av[i]; if (*ptr == '-') { ptr += 2; switch(ptr[-1]) { case 'B': if (*ptr == 0) ptr = av[++i]; OutboundIpStr = malloc(strlen(ptr) + 8); sprintf(OutboundIpStr, "-B%s", ptr); break; case 'C': if (*ptr == 0) ++i; break; case 'd': DebugOpt = 1; if (*ptr) DebugOpt = strtol(ptr, NULL, 0); break; case 'f': cFile = (*ptr) ? ptr : av[++i]; break; case 'm': MaxRun = strtol((*ptr ? ptr : av[++i]), NULL, 0); break; case 'n': ForReal = 0; break; case 'p': oldFormat = 1; break; case 'q': Quiet = 1; break; case 'R': RxBufSize = strtol((*ptr ? ptr : av[++i]), NULL, 0); break; case 'Q': TOS = strtol((*ptr ? ptr : av[++i]), NULL, 0); break; case 'r': ForceRealTime = 1; break; case 's': MinFlushSecs = strtol((*ptr ? ptr : av[++i]), NULL, 0) * 60; break; case 'T': TxBufSize = strtol((*ptr ? ptr : av[++i]), NULL, 0); break; case 'V': PrintVersion(); break; case 'v': VerboseOpt = 1; break; default: break; } } else { qFile = ptr; } } } if (DebugOpt && qFile != NULL) printf("Processing label: %s\n", qFile); if (oldFormat || strstr(PatLibExpand(cFile), "dspoolout") != NULL) { processDspoolout(PatLibExpand(cFile), qFile); } else { DNewsfeedsPat = cFile; processDnewsfeeds(qFile); } return(0); }