|
|
1.1 ! root 1: /* ! 2: * Batch: program to batch a list of news articles into an unbatch script. ! 3: * Usage: /usr/lib/news/batch listfile ! 4: * where listfile is a file containing a list, one per line, of full ! 5: * path names of files containing articles, e.g. as produced by the F ! 6: * transmission option in the sys file. ! 7: * Output is placed on standard output. ! 8: * ! 9: * Intended usage: ! 10: * uux -c -z -r rmt!rnews '<' =/usr/lib/news/batchnews_/usr/spool/outnews/rmt ! 11: * where the -c option and the = notation require local mods to uucp. ! 12: * This would be invoked every hour or two from crontab. ! 13: * ! 14: * Other possible usage: ! 15: * /usr/lib/news/batchnews /usr/spool/outnews/rmt | uux - -z -r rmt!rnews ! 16: * Also invoked from crontab every hour or two. This requires no changes ! 17: * to your uucp, but eats up disk space storing copies of the articles ! 18: * in the spool directory. The method you choose is transparent to the ! 19: * other end, but the other end must be expecting this batching format. ! 20: */ ! 21: static char *sccsid = "@(#)batch.c 1.3 4/3/83"; ! 22: #include <stdio.h> ! 23: #include <sys/types.h> ! 24: #include <sys/stat.h> ! 25: #include "defs.h" ! 26: struct stat sbuf; ! 27: ! 28: main(argc,argv) ! 29: char **argv; ! 30: { ! 31: register FILE *fd, *nfd; ! 32: register int c; ! 33: register char *cp; ! 34: char fname[512]; ! 35: char *index(); ! 36: ! 37: if (argc != 2) { ! 38: fprintf(stderr, "Usage: batchnews listfile\n"); ! 39: exit(1); ! 40: } ! 41: ! 42: if (strncmp(BATCHDIR, argv[1], strlen(BATCHDIR))) { ! 43: fprintf(stderr, "Permission denied - BATCHDIR mismatch\n"); ! 44: fprintf(stderr, "BATCHDIR %s, arg %s\n", BATCHDIR, argv[1]); ! 45: exit(2); ! 46: } ! 47: ! 48: fd = fopen(argv[1], "r"); ! 49: if (fd == NULL) { ! 50: /* ! 51: * This is not necessarily an error condition, if the ! 52: * file doesn't exist perhaps there's just no news. ! 53: */ ! 54: perror(argv[1]); ! 55: exit(2); ! 56: } ! 57: ! 58: while (fgets(fname, sizeof fname, fd) != NULL) { ! 59: cp = index(fname, '\n'); ! 60: if (cp) ! 61: *cp = '\0'; ! 62: nfd = fopen(fname, "r"); ! 63: if (nfd == NULL) { ! 64: printf(": cannot open %s\n", fname); ! 65: continue; ! 66: } ! 67: fstat(fileno(nfd), &sbuf); ! 68: printf("#! rnews %ld\n", sbuf.st_size); ! 69: while ((c = getc(nfd)) != EOF) ! 70: putchar(c); ! 71: fclose(nfd); ! 72: } ! 73: fclose(fd); ! 74: ! 75: /* ! 76: * We have reached EOF. We assume that even if more news ! 77: * came in while we were generating this, we got it. So ! 78: * it's safe to truncate the file. ! 79: */ ! 80: close(creat(argv[1], 0666)); ! 81: exit(0); ! 82: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.