Newsgroups: news.software.b Subject: C News patch CR.B This is the first part of a two-part patch, CR.C being the second, for the C News Cleanup Release. The distribution files on ftp.cs.toronto.edu and zoo.toronto.edu have been updated to match. See the README.changes diff below for what's been done. start of patch CR.B (suggested archive name: patchCR.B) apply with patch -p0 conf/liblist stdio: ! cd libstdio ; $(MAKE) r || ( $(MAKE) clean ; exit 1 ) : and only if that succeeded... cd libstdio ; $(MAKE) rclean echo "libstdio" >>conf/liblist --- 91,97 ---- echo "include libc libcnews $(DBZ) libfake libbig" >conf/liblist stdio: ! cd libstdio ; $(MAKE) r $(ROPT) || ( $(MAKE) clean ; exit 1 ) : and only if that succeeded... cd libstdio ; $(MAKE) rclean echo "libstdio" >>conf/liblist *************** *** 102,111 **** : "You must run 'quiz' before running 'make'." exit 1 ; r: ! $(INALL) "$(MAKE) r && $(MAKE) rclean" $(RDIRS) : leave libdbz to last because its regression test is rather slow ! $(INALL) "$(MAKE) r && $(MAKE) rclean" $(SLOWRDIRS) : 'all tests successful!' : 'either you or newsmaster should have mail from the "report" test' --- 112,124 ---- : "You must run 'quiz' before running 'make'." exit 1 ; + patchchores: + cd conf ; $(MAKE) patchchores + r: ! $(INALL) "$(MAKE) r $(ROPT) && $(MAKE) rclean" $(RDIRS) : leave libdbz to last because its regression test is rather slow ! $(INALL) "$(MAKE) r $(ROPT) && $(MAKE) rclean" $(SLOWRDIRS) : 'all tests successful!' : 'either you or newsmaster should have mail from the "report" test' *************** *** 129,132 **** --- 142,147 ---- # this is strictly for development use .DEFAULT: + : if you see this, you are doing something wrong -- the following + : is strictly for development use $(MAKE) -f mfile $@ *** batch/viauux.mastercopy Sun Nov 27 20:04:59 1994 --- batch/viauux Mon Oct 24 16:59:51 1994 *************** *** 8,14 **** for dummy do case "$1" in ! -g?) grade="$1" ;; -g) grade="-g$2" ; shift ;; -z) z=-z ;; -n) z=-n ;; --- 8,14 ---- for dummy do case "$1" in ! -g?*) grade="$1" ;; -g) grade="-g$2" ; shift ;; -z) z=-z ;; -n) z=-n ;; *** batch/batcher.c.mastercopy Sun Nov 27 20:04:59 1994 --- batch/batcher.c Mon Oct 31 15:22:46 1994 *************** *** 122,128 **** if (fstat(artfile, &sbuf) < 0) error("internal disaster, can't fstat", ""); ! printf("#! rnews %ld\n", sbuf.st_size); while ((count = read(artfile, buffer, sizeof buffer)) > 0) { if (fwrite(buffer, sizeof(char), count, stdout) != count) error("write failure in `%s'", article); --- 122,128 ---- if (fstat(artfile, &sbuf) < 0) error("internal disaster, can't fstat", ""); ! printf("#! rnews %ld\n", (long)sbuf.st_size); while ((count = read(artfile, buffer, sizeof buffer)) > 0) { if (fwrite(buffer, sizeof(char), count, stdout) != count) error("write failure in `%s'", article); *** conf/subst.all.mastercopy Sun Nov 27 20:05:00 1994 --- conf/subst.all Sun Nov 27 18:26:46 1994 *************** *** 43,48 **** --- 43,49 ---- maint/addgroup maint/addmissing maint/badexpiry + maint/checkactive maint/cnewsdo maint/delgroup maint/histfrom *************** *** 57,62 **** --- 58,65 ---- maint/newshist maint/newswatch maint/sysck + man/badexpiry.8cn + man/checkactive.8 man/checknews.1cn man/cnewsdo.8cn man/controlperm.5 *************** *** 89,97 **** util/mkpdir util/newshostname util/queuelen.hdb - util/queuelen.old util/queuelen.sub util/queuelen.svr4 util/report util/sfcproto util/sfshproto --- 92,100 ---- util/mkpdir util/newshostname util/queuelen.hdb util/queuelen.sub util/queuelen.svr4 + util/queuelen.vo util/report util/sfcproto util/sfshproto *** conf/versionname.mastercopy Sun Nov 27 20:05:01 1994 --- conf/versionname Sun Nov 27 19:29:48 1994 *************** *** 1 **** ! Cleanup Release, with patch CR.A --- 1 ---- ! Cleanup Release, with patch CR.B but not .C *** conf/active.eg.mastercopy Sun Nov 27 20:05:01 1994 --- conf/active.eg Thu Nov 3 19:19:29 1994 *************** *** 1,3 **** control 0000000000 00001 y junk 0000000000 00001 y ! news.announce.newusers 0000000000 00001 y --- 1,3 ---- control 0000000000 00001 y junk 0000000000 00001 y ! news.announce.newusers 0000000000 00001 m *** conf/deadfiles.mastercopy Sun Nov 27 20:05:02 1994 --- conf/deadfiles Sun Nov 27 20:04:55 1994 *************** *** 0 **** --- 1,4 ---- + doc/flow.old + expire/mkadir + util/queuelen.old + README.old *** conf/useanswers.mastercopy Sun Nov 27 20:05:03 1994 --- conf/useanswers Wed Nov 9 19:35:22 1994 *************** *** 168,185 **** echo "HFAKE=$fakehdrs" echo "OFAKE=$fake" ) >$tf ! if cmp $tf $uacm >/dev/null 2>/dev/null then ! echo "unchanged, old one left in place" ! else ! >$uacm ! if test ! -w $uacm ! then ! echo "$0: unable to create \`$uacm'; aborting" >&2 ! exit 1 ! fi ! cp $tf $uacm || exit 1 fi rm -f $tf exit 0 --- 168,181 ---- echo "HFAKE=$fakehdrs" echo "OFAKE=$fake" ) >$tf ! # this one we always change, so makefile knows when quiz was re-run ! >$uacm ! if test ! -w $uacm then ! echo "$0: unable to create \`$uacm'; aborting" >&2 ! exit 1 fi + cp $tf $uacm || exit 1 rm -f $tf exit 0 *** conf/makefile.mastercopy Sun Nov 27 20:05:04 1994 --- conf/makefile Sun Nov 27 19:30:31 1994 *************** *** 12,17 **** --- 12,23 ---- all: $(ALL) $(MX) report.ctl config + patchchores: + : if this fails, you have not installed all parts of a multi-part patch + test " `cat versionname | sed 's/^[^.]*\..//'`" = " " ; + : delete files obsoleted by patches + cd .. ; rm -f `cat conf/deadfiles` conf/dummy + install: $(ALL) LASTGROUP=`egrep -v = $(NEWSCTL)/active | tr . / | sed -n '$$s/ .*//p'` *** ctl/rmgroup.mastercopy Sun Nov 27 20:05:05 1994 --- ctl/rmgroup Sat Nov 5 16:32:45 1994 *************** *** 60,66 **** ?*) case "$action" in *q*) ;; *) ( ! echo "$0: \`$author' tried" echo "to remove newsgroup \`$g'." echo "Request was refused:" echo " $reject" --- 60,66 ---- ?*) case "$action" in *q*) ;; *) ( ! echo "rmgroup: \`$author' tried" echo "to remove newsgroup \`$g'." echo "Request was refused:" echo " $reject" *** ctl/newgroup.mastercopy Sun Nov 27 20:05:05 1994 --- ctl/newgroup Sat Nov 5 16:32:36 1994 *************** *** 113,119 **** ?*) case "$action" in *q*) ;; *) ( ! echo "$0: \`$author' tried" case "$oldstatus" in '') echo "to create newsgroup \`$g'." ;; *) echo "to set newsgroup \`$g' to \`$f'." ;; --- 113,119 ---- ?*) case "$action" in *q*) ;; *) ( ! echo "newgroup: \`$author' tried" case "$oldstatus" in '') echo "to create newsgroup \`$g'." ;; *) echo "to set newsgroup \`$g' to \`$f'." ;; *************** *** 158,165 **** cat $tmp >>$NEWSCTL/newsgroups ;; *) # status change ! awk '$1 == "'"$g"'" { print $1, $2, $3, "'"$newstatus"'" }' \ ! $NEWSCTL/active >$NEWSCTL/active.tmp if test `wc -l <$NEWSCTL/active.tmp` -lt `wc -l <$NEWSCTL/active` then fail="active.tmp is shorter than active, something's wrong" --- 158,165 ---- cat $tmp >>$NEWSCTL/newsgroups ;; *) # status change ! awk '$1 == "'"$g"'" { print $1, $2, $3, "'"$newstatus"'" ; next } ! { print }' $NEWSCTL/active >$NEWSCTL/active.tmp if test `wc -l <$NEWSCTL/active.tmp` -lt `wc -l <$NEWSCTL/active` then fail="active.tmp is shorter than active, something's wrong" *** ctl/makefile.mastercopy Sun Nov 27 20:05:06 1994 --- ctl/makefile Tue Nov 1 23:54:49 1994 *************** *** 80,85 **** --- 80,98 ---- test -d arts/comp/lang/beta ; test -r arts/comp/lang/beta/.overview ; rm -f reports + : newgroup for status change + sed '/^comp.lang.beta/s/y$$/m/' active >active.good + sed 's/ [0-9][0-9]* / 0 /' active.times >at.good + cp newsgroups newsgroups.ok + $(HERE) ./newgroup comp.lang.beta moderated out.tmp 2>err.tmp + test ! -s out.tmp ; + test ! -s err.tmp ; + cmp active.good active || diff active.good active + sed 's/ [0-9][0-9]* / 0 /' active.times >at.tmp + cmp at.good at.tmp || diff at.good at.tmp + cmp newsgroups.ok newsgroups || diff newsgroups.ok newsgroups + cmp reg/n.2r reports || diff reg/n.2r reports + rm -f reports : rmgroup egrep -v soundcard active >active.good egrep -v soundcard active.times >at.good *** ctl/reg/n.2.mastercopy Sun Nov 27 20:05:06 1994 --- ctl/reg/n.2 Tue Nov 1 23:50:35 1994 *************** *** 0 **** --- 1,25 ---- + Control: newgroup comp.lang.beta moderated + Newsgroups: comp.lang.beta + Path: tadpole.com!uunet!tale + From: tale@uunet.uu.net (David C Lawrence) + Subject: newgroup comp.lang.beta + Approved: tale@uunet.uu.net + Sender: tale@uunet.uu.net (David C Lawrence) + Date: Tue, 6 Sep 1994 14:31:58 GMT + Message-ID: <2CvpppA.B1M@uunet.uu.net> + Lines: 14 + + comp.lang.beta is an unmoderated newsgroup which passed its vote for + creation by 354:18 as reported in news.announce.newgroups on 30 Aug 1994. + + For your newsgroups file: + comp.lang.beta The object-oriented programming language BETA. + + The charter, culled from the call for votes: + + comp.lang.beta will receive all the postings from comp.lang.misc and + comp.object concerning the BETA language and the programs and systems + written in or supporting BETA. Discussions concerning object-oriented + programming principles based on the concepts known from BETA will also + take place, possibly cross-posted to comp.object. + *** ctl/reg/n.2r.mastercopy Sun Nov 27 20:05:07 1994 --- ctl/reg/n.2r Tue Nov 1 23:54:30 1994 *************** *** 0 **** --- 1,32 ---- + status change for comp.lang.beta + ::: + tale@uunet.uu.net (David C Lawrence) said to + set `comp.lang.beta' to moderated. + This was done. + === + Control: newgroup comp.lang.beta moderated + Newsgroups: comp.lang.beta + Path: tadpole.com!uunet!tale + From: tale@uunet.uu.net (David C Lawrence) + Subject: newgroup comp.lang.beta + Approved: tale@uunet.uu.net + Sender: tale@uunet.uu.net (David C Lawrence) + Date: Tue, 6 Sep 1994 14:31:58 GMT + Message-ID: <2CvpppA.B1M@uunet.uu.net> + Lines: 14 + + comp.lang.beta is an unmoderated newsgroup which passed its vote for + creation by 354:18 as reported in news.announce.newgroups on 30 Aug 1994. + + For your newsgroups file: + comp.lang.beta The object-oriented programming language BETA. + + The charter, culled from the call for votes: + + comp.lang.beta will receive all the postings from comp.lang.misc and + comp.object concerning the BETA language and the programs and systems + written in or supporting BETA. Discussions concerning object-oriented + programming principles based on the concepts known from BETA will also + take place, possibly cross-posted to comp.object. + + === *** ctl/controlperm.eg.mastercopy Sun Nov 27 20:05:07 1994 --- ctl/controlperm.eg Wed Nov 2 00:09:38 1994 *************** *** 1,14 **** # Dave Lawrence runs the main Usenet hierarchies ! comp,sci,misc,rec,soc,talk tale@uunet.uu.net n y # but his name can be forged, so don't let him rmgroup... ! comp,sci,misc,rec,soc,talk tale@uunet.uu.net r n # and nobody else gets any attention in these hierarchies ! comp,sci,misc,rec,soc,talk any nr nq # same for Jim McIntosh in bit bit jim@american.edu n y bit jim@american.edu r n bit any nr nq # it's really tempting to change this one to nq... alt any nr nv --- 1,21 ---- # Dave Lawrence runs the main Usenet hierarchies ! comp,sci,misc,news,rec,soc,talk tale@uunet.uu.net n y # but his name can be forged, so don't let him rmgroup... ! comp,sci,misc,news,rec,soc,talk tale@uunet.uu.net r n # and nobody else gets any attention in these hierarchies ! comp,sci,misc,news,rec,soc,talk any nr nq # same for Jim McIntosh in bit bit jim@american.edu n y bit jim@american.edu r n bit any nr nq + + # ClariNet newgroups come from this address + clari clarinet@clarinet.com n yv + # You can turn this on, at the risk of accepting forged rmgroups + clari clarinet@clarinet.com r nv + # And that's all for ClariNet. + clari any nr nq # it's really tempting to change this one to nq... alt any nr nv *** expire/README.mastercopy Sun Nov 27 20:05:08 1994 --- expire/README Wed Oct 19 00:01:24 1994 *************** *** 3,9 **** expire.c does the real work expireiflow wrapper to run expire only if things are tight explist.eg sample expiry-control file - mkadir auxiliary program used to make archiving directories pgood part of the expire regression test tgood part of the expire regression test upact active-file updater, much improved from past incarnations --- 3,8 ---- *** expire/expire.c.mastercopy Sun Nov 27 20:05:08 1994 --- expire/expire.c Tue Oct 18 23:55:56 1994 *************** *** 20,26 **** #include "libc.h" #include "news.h" #include "config.h" ! #include "fgetmfs.h" #include "case.h" #include "dbz.h" #include "ngmatch.h" --- 20,26 ---- #include "libc.h" #include "news.h" #include "config.h" ! #include "fgetfln.h" #include "case.h" #include "dbz.h" #include "ngmatch.h" *************** *** 47,52 **** --- 47,54 ---- time_t normal; /* earliest not expired in default case */ time_t purge; /* latest arrival date always expired */ char *dir; /* Archive dir or NULL. */ + long ngroups; /* for explist, number of groups dealt with */ + int lineno; /* line number in explist */ }; /* header for internal form of control file */ *************** *** 144,149 **** --- 146,152 ---- void die(); void control(); void prime(); + void checkused(); void doit(); void cd(); time_t readdate(); *************** *** 280,296 **** control(f) register FILE *f; { - char line[200]; /* long enough for any sane line */ register char *p; register int gotone = 0; ! while (fgets(line, sizeof(line), f) != NULL) { ! p = &line[strlen(line) - 1]; ! if (*p != '\n') ! die("control line `%.30s...' too long", line); ! *p = '\0'; ! if (line[0] != '#') ! ctlline(line); gotone = 1; } --- 283,296 ---- control(f) register FILE *f; { register char *p; register int gotone = 0; + register int lineno = 0; ! while ((p = fgetline(f, (size_t *)NULL)) != NULL) { ! lineno++; ! if (*p != '#') ! ctlline(p, lineno); gotone = 1; } *************** *** 302,309 **** - ctlline - process one control-file line */ void ! ctlline(ctl) char *ctl; { register struct ctl *ct; char *field[4]; --- 302,310 ---- - ctlline - process one control-file line */ void ! ctlline(ctl, lineno) char *ctl; + int lineno; { register struct ctl *ct; char *field[4]; *************** *** 379,384 **** --- 380,388 ---- checkadir(ct->dir); } + ct->ngroups = 0; + ct->lineno = lineno; + /* put it where it belongs */ if (STREQ(ct->groups, "/expired/")) holdover = ct; *************** *** 410,422 **** char *field[NFACT]; int nf; register int hash; - register int i; af = eufopen(afile, "r"); ! while ((line = fgetms(af)) != NULL) { ! i = strlen(line); ! if (i > 0) /* Geoff's bloody useless \n */ ! line[i-1] = '\0'; nf = split(line, field, NFACT, ""); if (nf != NFACT) die("wrong number of fields in active for `%s'", field[0]); --- 414,422 ---- char *field[NFACT]; int nf; register int hash; af = eufopen(afile, "r"); ! while ((line = fgetline(af, (size_t *)NULL)) != NULL) { nf = split(line, field, NFACT, ""); if (nf != NFACT) die("wrong number of fields in active for `%s'", field[0]); *************** *** 431,439 **** hash = NHASH-1; ct->next = ngs[hash]; ngs[hash] = ct; - free(line); } (void) fclose(af); } /* --- 431,440 ---- hash = NHASH-1; ct->next = ngs[hash]; ngs[hash] = ct; } (void) fclose(af); + + checkused(); } /* *************** *** 453,458 **** --- 454,460 ---- ct->normal = cscan->normal; ct->purge = cscan->purge; ct->dir = cscan->dir; + cscan->ngroups++; return; } *************** *** 463,468 **** --- 465,488 ---- } /* + - checkused - check that all lines of the control file got used + */ + void + checkused() + { + register struct ctl *cscan; + char grump[100]; + + for (cscan = ctls; cscan != NULL; cscan = cscan->next) + if (cscan->ngroups == 0) { + sprintf(grump, + "warning: line %d of control file controls no active newsgroups", + cscan->lineno); + complain(grump, ""); + } + } + + /* - doit - file manipulation and master control */ void *************** *** 1053,1076 **** register char *p; ocmd = str3save("PATH=", ctlfile("bin"), ":"); ! cmd = str3save(ocmd, binfile("expire"), ":"); free(ocmd); ocmd = cmd; /* the semicolon here avoids problems with some buggy shells */ ! cmd = str3save(ocmd, newspath(), " ; mkadir"); free(ocmd); ocmd = cmd; ! cmd = str3save(ocmd, " ", dir); free(ocmd); ! p = strchr(art, '/'); ! while (p != NULL) { ! *p = '\0'; ! ocmd = cmd; ! cmd = str3save(ocmd, " ", art); ! free(ocmd); ! *p = '/'; ! p = strchr(p+1, '/'); ! } (void) system(cmd); free(cmd); } --- 1073,1093 ---- register char *p; ocmd = str3save("PATH=", ctlfile("bin"), ":"); ! cmd = str3save(ocmd, binfile((char *)NULL), ":"); free(ocmd); ocmd = cmd; /* the semicolon here avoids problems with some buggy shells */ ! cmd = str3save(ocmd, newspath(), " ; mkpdir "); free(ocmd); ocmd = cmd; ! cmd = str3save(ocmd, dir, "/"); free(ocmd); ! p = strrchr(art, '/'); ! *p = '\0'; ! ocmd = cmd; ! cmd = str3save(ocmd, art, ""); ! free(ocmd); ! *p = '/'; (void) system(cmd); free(cmd); } *** expire/makefile.mastercopy Sun Nov 27 20:05:09 1994 --- expire/makefile Sat Oct 22 23:59:20 1994 *************** *** 2,10 **** .include "../include/config.make" BINS=expire ! PROGS=$(BINS) upact doexpire mkadir expireiflow DEST=$(NEWSBIN)/expire ALL=$(PROGS) explist.eg all: $(ALL) $(MX) $(PROGS) --- 2,12 ---- .include "../include/config.make" BINS=expire ! PROGS=$(BINS) upact doexpire expireiflow DEST=$(NEWSBIN)/expire ALL=$(PROGS) explist.eg + UPACTOPT= + UPACTBARF= all: $(ALL) $(MX) $(PROGS) *************** *** 34,40 **** lint: expire.c lint $(LINTFLAGS) expire.c 2>&1 ! explist.reg: rm -f $@ echo "/expired/ x 0.08 -" >>$@ echo '/bounds/ x 0.01-0.1-0.11 - ' >>$@ --- 36,42 ---- lint: expire.c lint $(LINTFLAGS) expire.c 2>&1 ! explist.regw: rm -f $@ echo "/expired/ x 0.08 -" >>$@ echo '/bounds/ x 0.01-0.1-0.11 - ' >>$@ *************** *** 46,63 **** echo 'mod u 0.05 -' >>$@ echo 'urp x 0.01-0.05-0.1 -' >>$@ echo "bletch x 0.1 =`pwd`/arch3/bletch" >>$@ echo 'all x 0.1 @' >>$@ ../util/dbz: ! ( cd ../util ; $(MAKE) dbz ) # setup for regression test ! rsetup: $(PROGS) ../util/dbz explist.reg $(MX) $(PROGS) dircheck >history.pag >history.dir mkdir bin ! cp mkadir ../util/dbz bin echo 'exit 0' >bin/lock echo 'exit 0' >bin/unlock echo 'echo 10' >bin/spacefor --- 48,84 ---- echo 'mod u 0.05 -' >>$@ echo 'urp x 0.01-0.05-0.1 -' >>$@ echo "bletch x 0.1 =`pwd`/arch3/bletch" >>$@ + echo 'unused x 1 -' >>$@ echo 'all x 0.1 @' >>$@ + explist.reg: explist.regw + rm -f $@ + egrep -v '^unused' explist.regw >$@ + + UTILS=../util/dbz ../util/mkpdir + ../util/dbz: ! cd ../util ; $(MAKE) dbz ! ! ../util/mkpdir: ! cd ../util ; $(MAKE) mkpdir ! ! BARFS=active.barf active.nobarf ! AB=active.$(UPACTBARF)barf ! ! active.barf: ! echo 'barf.puke 01111 01112 y' >$@ ! ! active.nobarf: ! touch $@ # setup for regression test ! rsetup: $(PROGS) $(UTILS) explist.reg explist.regw $(BARFS) $(MX) $(PROGS) dircheck >history.pag >history.dir mkdir bin ! cp ../util/dbz ../util/mkpdir bin echo 'exit 0' >bin/lock echo 'exit 0' >bin/unlock echo 'echo 10' >bin/spacefor *************** *** 65,72 **** mkdir arts arts/foo arts/bar arts/bar/ugh arts/urp arch arch2 mkdir arts/mod arts/mod/mod arts/mod/unmod arch3 arch3/bletch mkdir arts/bletch arts/lost+found arts/barf arts/barf/puke ! echo 'foo 00099 00000 y ' >>active ! echo 'foo 00099 00001 y' >>active.after echo 'bar 00099 00000 m' >>active echo 'bar 00099 00100 m' >>active.after echo 'bar.ugh 00099 00000 m' >>active --- 86,93 ---- mkdir arts arts/foo arts/bar arts/bar/ugh arts/urp arch arch2 mkdir arts/mod arts/mod/mod arts/mod/unmod arch3 arch3/bletch mkdir arts/bletch arts/lost+found arts/barf arts/barf/puke ! echo 'foo 00103 00000 y ' >>active ! echo 'foo 00103 00098 y' >>active.after echo 'bar 00099 00000 m' >>active echo 'bar 00099 00100 m' >>active.after echo 'bar.ugh 00099 00000 m' >>active *************** *** 79,94 **** echo 'mod.unmod 00016 00016 y' >>active.after echo 'bletch 00099 00000 y' >>active echo 'bletch 00099 00100 y' >>active.after ! echo 'barf.puke 01111 01112 y' >>active ! echo 'barf.puke 01111 01112 y' >>active.after echo nevermore >arts/lost+found/1 ! echo ' 9999~- foo/1' >>history.proto ! echo :foo/1: >arts/foo/1 ! echo 'MeSsAge-ID: ' >>arts/foo/1 ! echo ' 1000~- foo/2' >>history.proto ! echo foo/2 >arts/foo/2 ! echo ' 1000~100 foo/3' >>history.proto ! echo foo/3 >arts/foo/3 echo ' 100 bar/4' >>history.proto echo :bar/4: >arts/bar/4 echo 'SuBjeCt: yes' >>arts/bar/4 --- 100,115 ---- echo 'mod.unmod 00016 00016 y' >>active.after echo 'bletch 00099 00000 y' >>active echo 'bletch 00099 00100 y' >>active.after ! cat $(AB) >>active ! cat $(AB) >>active.after echo nevermore >arts/lost+found/1 ! echo ' 9999~- foo/98' >>history.proto ! echo :foo/98: >arts/foo/98 ! echo 'MeSsAge-ID: ' >>arts/foo/98 ! echo ' 1000~- foo/99' >>history.proto ! echo foo/99 >arts/foo/99 ! echo ' 1000~100 foo/100' >>history.proto ! echo foo/100 >arts/foo/100 echo ' 100 bar/4' >>history.proto echo :bar/4: >arts/bar/4 echo 'SuBjeCt: yes' >>arts/bar/4 *************** *** 105,118 **** echo ' 100~20000 urp/8' >>history.proto echo urp/8 >arts/urp/8 echo ' 100~- urp/9' >>history.proto ! echo ' 1000~20000 foo/10' >>history.proto ! echo :foo/10: >arts/foo/10 ! echo 'Message-ID: ' >>arts/foo/10 ! echo 'Expires: 20000' >>arts/foo/10 ! echo 'Supersedes: ' >>arts/foo/10 ! echo >>arts/foo/10 ! echo ' 100~20000 foo/11' >>history.proto ! echo foo/11 >arts/foo/11 echo ' 100~- mod.mod/12' >>history.proto echo mod/mod/12 >arts/mod/mod/12 echo ' 2000 mod.mod/13' >>history.proto --- 126,139 ---- echo ' 100~20000 urp/8' >>history.proto echo urp/8 >arts/urp/8 echo ' 100~- urp/9' >>history.proto ! echo ' 1000~20000 foo/101' >>history.proto ! echo :foo/101: >arts/foo/101 ! echo 'Message-ID: ' >>arts/foo/101 ! echo 'Expires: 20000' >>arts/foo/101 ! echo 'Supersedes: ' >>arts/foo/101 ! echo >>arts/foo/101 ! echo ' 100~20000 foo/102' >>history.proto ! echo foo/102 >arts/foo/102 echo ' 100~- mod.mod/12' >>history.proto echo mod/mod/12 >arts/mod/mod/12 echo ' 2000 mod.mod/13' >>history.proto *************** *** 133,145 **** echo ' 5000~- urp/98' >>history.proto echo ' 5000~-' >>history.after echo urp/98 >arts/urp/98 ! echo ' 5000~- bar/99, bar.ugh/99 foo/99 urp/99' >>history.proto ! echo ' 5000~- bar.ugh/99 foo/99' >>history.after ! echo :foo/99:bar/99:bar/ugh/99:urp/99: >arts/foo/99 ! echo 'Message-ID: ' >>arts/foo/99 ! ln arts/foo/99 arts/bar/99 ! ln arts/foo/99 arts/bar/ugh/99 ! ln arts/foo/99 arts/urp/99 cp history.proto history # regression test machinery --- 154,166 ---- echo ' 5000~- urp/98' >>history.proto echo ' 5000~-' >>history.after echo urp/98 >arts/urp/98 ! echo ' 5000~- bar/99, bar.ugh/99 foo/103 urp/99' >>history.proto ! echo ' 5000~- bar.ugh/99 foo/103' >>history.after ! echo :foo/103:bar/99:bar/ugh/99:urp/99: >arts/foo/103 ! echo 'Message-ID: ' >>arts/foo/103 ! ln arts/foo/103 arts/bar/99 ! ln arts/foo/103 arts/bar/ugh/99 ! ln arts/foo/103 arts/urp/99 cp history.proto history # regression test machinery *************** *** 160,166 **** # the regression test proper r: $(PROGS) rclean rsetup dircheck tgood pgood ! $(RUN) -c explist.reg : "okay, it's sane" $(RUN) -t explist.reg >test.out 2>&1 sed $(FIXPATHS) test.out | cmp - tgood --- 181,189 ---- # the regression test proper r: $(PROGS) rclean rsetup dircheck tgood pgood ! $(RUN) -c explist.regw >test.out 2>test.stderr ! test ! -s test.out ; ! cmp wgood test.stderr || diff wgood test.stderr : "okay, it's sane" $(RUN) -t explist.reg >test.out 2>&1 sed $(FIXPATHS) test.out | cmp - tgood *************** *** 178,198 **** egrep 'will|wont|gone|three' history.proto | ./dircheck -n arch2 egrep three history.proto | ./dircheck arch3 egrep 'will|wont|gone|two' history.proto | ./dircheck -n arch3 ! test -f arts/foo/99 ; test -f arts/bar/ugh/99 ; test -f arch2/bar/99 ; test ! -f arts/urp/99 ; cmp history history.after : "that's it for expire, on to upact" ! $(HERE) ./upact '-#' ! cmp active.tmp active.after test ! -s active.errs ; mv active.tmp active ! $(HERE) ./upact ! cmp active active.after ! sed '/^foo /s/99/09/' active.after >active ! $(HERE) ./upact -b ! cmp active active.after : "success!" rclean: --- 201,221 ---- egrep 'will|wont|gone|three' history.proto | ./dircheck -n arch2 egrep three history.proto | ./dircheck arch3 egrep 'will|wont|gone|two' history.proto | ./dircheck -n arch3 ! test -f arts/foo/103 ; test -f arts/bar/ugh/99 ; test -f arch2/bar/99 ; test ! -f arts/urp/99 ; cmp history history.after : "that's it for expire, on to upact" ! $(HERE) ./upact $(UPACTOPT) '-#' ! cmp active.after active.tmp || diff active.after active.tmp test ! -s active.errs ; mv active.tmp active ! $(HERE) ./upact $(UPACTOPT) ! cmp active.after active || diff active.after active ! sed '/^foo /s/103/009/' active.after >active ! $(HERE) ./upact -b $(UPACTOPT) ! cmp active.after active || diff active.after active : "success!" rclean: *************** *** 199,205 **** rm -f junk history history.pag history.dir history.o active active.tmp rm -f history.n* *mon.out history.proto history.after test.out doit rm -f active.old active.new explist.reg lint active.after test.stderr ! rm -f active.errs rm -rf arts arch arch2 arch3 bin clean: rclean --- 222,228 ---- rm -f junk history history.pag history.dir history.o active active.tmp rm -f history.n* *mon.out history.proto history.after test.out doit rm -f active.old active.new explist.reg lint active.after test.stderr ! rm -f active.errs explist.regw $(BARFS) rm -rf arts arch arch2 arch3 bin clean: rclean *** expire/tgood.mastercopy Sun Nov 27 20:05:10 1994 --- expire/tgood Sat Oct 22 22:51:32 1994 *************** *** 1,11 **** ! copy foo/2 P/arch ; remove foo/2 ! copy foo/3 P/arch ; remove foo/3 copy bar/4 P/arch2 ; remove bar/4 copy bar/ugh/5 P/arch ; remove bar/ugh/5 remove urp/6 remove urp/8 remove urp/9 ! copy foo/11 P/arch ; remove foo/11 copy mod/mod/12 P/arch ; remove mod/mod/12 remove mod/unmod/14 remove mod/unmod/15 --- 1,11 ---- ! copy foo/99 P/arch ; remove foo/99 ! copy foo/100 P/arch ; remove foo/100 copy bar/4 P/arch2 ; remove bar/4 copy bar/ugh/5 P/arch ; remove bar/ugh/5 remove urp/6 remove urp/8 remove urp/9 ! copy foo/102 P/arch ; remove foo/102 copy mod/mod/12 P/arch ; remove mod/mod/12 remove mod/unmod/14 remove mod/unmod/15 *** expire/pgood.mastercopy Sun Nov 27 20:05:10 1994 --- expire/pgood Sat Oct 22 22:52:23 1994 *************** *** 1,8 **** ! foo/2 1-Jan-1970 ??? ! foo/3 1-Jan-1970 ??? bar/4 1-Jan-1970 yes bar/ugh/5 1-Jan-1970 ??? ! foo/11 1-Jan-1970 ??? mod/mod/12 1-Jan-1970 ??? bletch/17 1-Jan-1970 ??? bar/99 1-Jan-1970 ??? --- 1,8 ---- ! foo/99 1-Jan-1970 ??? ! foo/100 1-Jan-1970 ??? bar/4 1-Jan-1970 yes bar/ugh/5 1-Jan-1970 ??? ! foo/102 1-Jan-1970 ??? mod/mod/12 1-Jan-1970 ??? bletch/17 1-Jan-1970 ??? bar/99 1-Jan-1970 ??? *** expire/doexpire.mastercopy Sun Nov 27 20:05:11 1994 --- expire/doexpire Fri Nov 11 11:58:02 1994 *************** *** 100,106 **** if test -s /tmp/doex$$ then ! report 'possible expire problems' @}>()= . ${NEWSCONFIG-/etc/news/bin/config} ! PATH=$NEWSCTL/bin:$NEWSBIN:$NEWSPATH ; export PATH umask $NEWSUMASK maxlen=200 # max length for shell cmd; 200 is pretty safe --- 4,10 ---- # =()<. ${NEWSCONFIG-@@}>()= . ${NEWSCONFIG-/etc/news/bin/config} ! PATH=$NEWSCTL/bin:$NEWSBIN/maint:$NEWSBIN:$NEWSPATH ; export PATH umask $NEWSUMASK maxlen=200 # max length for shell cmd; 200 is pretty safe *************** *** 29,43 **** cd $NEWSCTL # check out the active file ! nf=`sed 1q active | awk '{print NF}'` ! if test $nf -ne 4 then ! echo "$0: active file has other than 4 fields" >&2 exit 1 fi if test " `awk '{print $1}' active | sort | uniq -d`" != " " then ! echo "$0: duplicate entries in active file, unable to run" >&2 exit 1 fi --- 29,45 ---- cd $NEWSCTL # check out the active file ! checkactive -q >active.eek ! if test -s active.eek then ! echo "$0: problems in active file -- aborting" >&2 ! cat active.eek >&2 ! rm -f active.eek exit 1 fi if test " `awk '{print $1}' active | sort | uniq -d`" != " " then ! echo "$0: duplicate newsgroups in active file, unable to run" >&2 exit 1 fi *************** *** 81,90 **** dir = "" } $0 ~ /^[0-9]+$/ { ! if ($0 < lowest) ! lowest = $0 ! if ($0 > highest) ! highest = $0 next } $0 ~ /\/\.:$/ { --- 83,93 ---- dir = "" } $0 ~ /^[0-9]+$/ { ! # some old awks do not think $0 is numeric, so use $1 ! if ($1 < lowest) ! lowest = $1 ! if ($1 > highest) ! highest = $1 next } $0 ~ /\/\.:$/ { *************** *** 135,144 **** }' >active.tmp # check that everything looks okay ! awk '$2 ~ /e/ || $3 ~ /e/' active.tmp >active.eek if test -s active.eek then ! echo "$0: setting awk OFMT doesn't work -- aborting" >&2 exit # with status=1 fi if test `wc -l active.tmp # check that everything looks okay ! checkactive -q active.tmp >active.eek if test -s active.eek then ! echo "$0: errors in active.tmp -- aborting" >&2 ! cat active.eek >&2 exit # with status=1 fi if test `wc -l bin/unlock echo "echo 5" >bin/sizeof echo "echo 1000" >bin/spacefor ! echo "( echo \"$$*\" ; echo ::: ; cat ) >&2" >bin/report cp $(BINS) bin $(MX) bin/* echo hostb >whoami --- 35,42 ---- echo "exit 0" >bin/unlock echo "echo 5" >bin/sizeof echo "echo 1000" >bin/spacefor ! echo "( echo \"\$$*\" ; echo ::: ; cat ) >&2" >bin/report ! echo "echo 12345" >bin/now cp $(BINS) bin $(MX) bin/* echo hostb >whoami *************** *** 43,48 **** --- 44,59 ---- cp om.0 arts/out.master/0 mkdir arts/out.going mkdir arts/out.going/foo arts/out.going/bar arts/out.going/baz + $(HERE) ./doexplode >stdout 2>stderr + test ! -s stdout ; + cmp om.err stderr || diff om.err stderr + test " `ls arts/out.master`" = " 0.12345" ; + cmp om.0 arts/out.master/0.12345 || diff om.0 arts/out.master/0.12345 + cmp og.foo arts/out.going/foo/togo || diff og.foo arts/out.going/foo/togo + cmp og.bar arts/out.going/bar/togo || diff og.bar arts/out.going/bar/togo + cmp og.baz arts/out.going/baz/togo || diff og.baz arts/out.going/baz/togo + rm -f arts/out.master/0.12345 arts/out.going/*/togo stdout stderr + egrep -v nope om.0 >arts/out.master/0 $(HERE) ./doexplode >stdout 2>stderr test ! -s stdout ; test ! -s stderr ; *** explode/trbatch.c.mastercopy Sun Nov 27 20:05:13 1994 --- explode/trbatch.c Mon Nov 7 00:01:28 1994 *************** *** 40,46 **** bf = bfincache(name); if (bf->bf_str == NULL) { bf->bf_str = fopenclex(name, "a"); /* silent try */ ! if (bf->bf_str == NULL) { if (bfrclose() != ST_OKAY) return NULL; errno = 0; --- 40,47 ---- bf = bfincache(name); if (bf->bf_str == NULL) { bf->bf_str = fopenclex(name, "a"); /* silent try */ ! if (bf->bf_str == NULL && errno == EMFILE) { ! /* try to free up a descriptor */ if (bfrclose() != ST_OKAY) return NULL; errno = 0; *************** *** 47,53 **** warning( "had to close a descriptor to reuse it; this should not happen!", ""); /* bad input? canthappen? */ ! /* retry, may bitch */ bf->bf_str = fopenwclex(name, "a"); } if (bf->bf_str != NULL) --- 48,56 ---- warning( "had to close a descriptor to reuse it; this should not happen!", ""); /* bad input? canthappen? */ ! } ! if (bf->bf_str == NULL) { ! /* retry, noisily this time */ bf->bf_str = fopenwclex(name, "a"); } if (bf->bf_str != NULL) *** explode/doexplode.mastercopy Sun Nov 27 20:05:13 1994 --- explode/doexplode Sun Nov 6 19:18:26 1994 *************** *** 33,39 **** report -u "explode unable to rename file" exit fi ! if explode out.master/$work 2>/tmp/ex$$ then rm -f out.master/$work else --- 33,39 ---- report -u "explode unable to rename file" exit fi ! if explode out.master/$work 2>/tmp/ex$$ && test ! -s /tmp/ex$$ then rm -f out.master/$work else *** explode/om.0.mastercopy Sun Nov 27 20:05:14 1994 --- explode/om.0 Sun Nov 6 21:21:18 1994 *************** *** 13,18 **** --- 13,19 ---- f out.going/foo/togo f out.going/bar/togo f out.going/baz/togo + f out.going/nope/togo <#5@host> control/1 192 f out.going/foo/togo f out.going/bar/togo *** explode/om.err.mastercopy Sun Nov 27 20:05:14 1994 --- explode/om.err Sun Nov 6 23:55:59 1994 *************** *** 0 **** --- 1,3 ---- + -u explode failed on out.master/0.12345 + ::: + explode: can't open `out.going/nope/togo' (No such file or directory) *** input/makefile.mastercopy Sun Nov 27 20:05:15 1994 --- input/makefile Sun Oct 23 00:58:44 1994 *************** *** 8,18 **** DEST=$(NEWSBIN)/input DBIN=$(NEWSBIN)/decompressors DECS=c7decode bdecode gunzip BATCH=../batch all: $(ALL) ! $(MX) $(PROGS) install: $(PROGS) $(MKDIR) $(DEST) $(DBIN) --- 8,19 ---- DEST=$(NEWSBIN)/input DBIN=$(NEWSBIN)/decompressors DECS=c7decode bdecode gunzip + PGMS=$(PROGS) $(DECS) BATCH=../batch all: $(ALL) ! $(MX) $(PGMS) install: $(PROGS) $(MKDIR) $(DEST) $(DBIN) *************** *** 104,110 **** echo 'here is a phony third batch' >>$@ rsetup: $(ALL) rclean ! $(MX) $(PROGS) mkdir bin echo "shift;shift;shift;cat \$$* >>`pwd`/tmp.1" >bin/relaynews echo "echo 10" >bin/spacefor --- 105,111 ---- echo 'here is a phony third batch' >>$@ rsetup: $(ALL) rclean ! $(MX) $(PGMS) mkdir bin echo "shift;shift;shift;cat \$$* >>`pwd`/tmp.1" >bin/relaynews echo "echo 10" >bin/spacefor *** libcnews/mkinperm.c.mastercopy Sun Nov 27 20:05:15 1994 --- libcnews/mkinperm.c Tue Nov 8 22:33:43 1994 *************** *** 22,29 **** #define MAXTRIES 100 /* limit on attempts to make links */ #endif - #define JAN1991 (time_t)662706000 - int mkinpdebug = 0; char *progname; --- 22,27 ---- *************** *** 44,50 **** (void) strcpy(name, p); p = name + strlen(name); ! now = time((time_t *)NULL) - JAN1991; /* reduce range */ for (ntries = 0; ; ntries++) { (void) sprintf(p, "%s%ld%c%s", grade, now, uniq, class); if (mkinpdebug) --- 42,48 ---- (void) strcpy(name, p); p = name + strlen(name); ! now = time((time_t *)NULL); for (ntries = 0; ; ntries++) { (void) sprintf(p, "%s%ld%c%s", grade, now, uniq, class); if (mkinpdebug) *************** *** 63,69 **** uniq = 'A'; else if (uniq == 'Z'+1) { (void) sleep(2); ! now = time((time_t *)NULL) - JAN1991; /* reduce range */ uniq = '0'; } if (mkinpdebug) --- 61,67 ---- uniq = 'A'; else if (uniq == 'Z'+1) { (void) sleep(2); ! now = time((time_t *)NULL); uniq = '0'; } if (mkinpdebug) *** libdbz/dbz.c.mastercopy Sun Nov 27 20:05:17 1994 --- libdbz/dbz.c Tue Nov 15 12:49:25 1994 *************** *** 518,524 **** stop <<= 1; /* try odd numbers up to stop */ ! for (div = *--ip; div < stop; div += 2) if (x%div == 0) return(0); --- 518,524 ---- stop <<= 1; /* try odd numbers up to stop */ ! for (div = *--ip + 2; div < stop; div += 2) if (x%div == 0) return(0); *** libdbz/makefile.mastercopy Sun Nov 27 20:05:18 1994 --- libdbz/makefile Tue Oct 25 15:47:40 1994 *************** *** 42,58 **** rdbz.o: dbz.c cp dbz.c rdbz.c $(CC) $(CFLAGS) $(DEBUG) -DDEFSIZE=$(RSIZE) -c rdbz.c ! rm rdbz.c rdbzmain.o: dbzmain.c cp dbzmain.c rdbzmain.c $(CC) $(CFLAGS) $(RFC) -c rdbzmain.c ! rm rdbzmain.c tdbz.o: dbz.c cp dbz.c tdbz.c $(CC) $(CFLAGS) -DDEFSIZE=$(TSIZE) -c tdbz.c ! rm tdbz.c tdbz: dbzmain.o tdbz.o dbzdbm.o $(CC) $(LDFLAGS) dbzmain.o tdbz.o dbzdbm.o $(LIBS) -o $@ --- 42,58 ---- rdbz.o: dbz.c cp dbz.c rdbz.c $(CC) $(CFLAGS) $(DEBUG) -DDEFSIZE=$(RSIZE) -c rdbz.c ! rm -f rdbz.c rdbzmain.o: dbzmain.c cp dbzmain.c rdbzmain.c $(CC) $(CFLAGS) $(RFC) -c rdbzmain.c ! rm -f rdbzmain.c tdbz.o: dbz.c cp dbz.c tdbz.c $(CC) $(CFLAGS) -DDEFSIZE=$(TSIZE) -c tdbz.c ! rm -f tdbz.c tdbz: dbzmain.o tdbz.o dbzdbm.o $(CC) $(LDFLAGS) dbzmain.o tdbz.o dbzdbm.o $(LIBS) -o $@ *************** *** 80,86 **** : crude check of synthetic history file ( sed 25q $(RHIST) ; tail -25 $(RHIST) ) >histjunk cmp histjunk firstlast25 ! rm histjunk : basic tests, exercising as many options as possible cp $(RHIST) dbase mkdir xx --- 80,86 ---- : crude check of synthetic history file ( sed 25q $(RHIST) ; tail -25 $(RHIST) ) >histjunk cmp histjunk firstlast25 ! rm -f histjunk : basic tests, exercising as many options as possible cp $(RHIST) dbase mkdir xx *************** *** 159,165 **** rclean: rm -f dbase dbase[23] dbase.* dbase[23].* fake fake.o random.o ! rm -f rdbz rdbz.o rdbzmain.o $(RHIST) $(R2HIST) byteflip byteflip.o rm -f histjunk core test ! -d xx || rmdir xx --- 159,165 ---- rclean: rm -f dbase dbase[23] dbase.* dbase[23].* fake fake.o random.o ! rm -f rdbz rdbz.o rdbzmain.? $(RHIST) $(R2HIST) byteflip byteflip.o rm -f histjunk core test ! -d xx || rmdir xx