home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
unix
/
volume7
/
2.11news
/
patch03
< prev
next >
Wrap
Text File
|
1987-02-05
|
17KB
|
682 lines
Path: mirror!adelie!necntc!husc6!seismo!rick
From: rick@seismo.CSS.GOV (Rick Adams)
Newsgroups: news.software.b
Subject: 2.11 news src patch #3
Message-ID: <43045@beno.seismo.CSS.GOV>
Date: 30 Dec 86 00:03:28 GMT
Sender: rick@seismo.CSS.GOV
Organization: Center for Seismic Studies, Arlington, VA
Lines: 666
THIS ARTICLE ALSO HAS THE TYPO-FIX THAT WAS IN THE ORIGINAL POSTING...
--r$
Description:
patch#2's change to vnews to keep the save filename can be confusing.
restore the old behavior and add control-e to retrieve the old filename.
patch#2 broke the SPOOLBATCH code. This is fixed.
Yet another HIDDENNET problem is fixed.
NOTIFY didn't tell you if the newsgroup to be created was moderated
or not.
unbatch should use the existing string RNEWS for the rnews program
instead of building it itself.
The vnews helpfile has a tab instead of multiple blanks.
Fix:
cd to the src directory and apply the following patch.
Index: visual.c
Prereq: 1.34
*** .d/visual.c Wed Dec 17 18:23:37 1986
--- visual.c Mon Dec 29 15:54:08 1986
***************
*** 4,10 ****
*/
#ifdef SCCSID
! static char *SccsId = "@(#)visual.c 1.34 12/16/86";
#endif /* SCCSID */
#include "rparams.h"
--- 4,10 ----
*/
#ifdef SCCSID
! static char *SccsId = "@(#)visual.c 1.35 12/23/86";
#endif /* SCCSID */
#include "rparams.h"
***************
*** 52,57 ****
--- 52,58 ----
#endif
#define PIPECHAR '|' /* indicate save command should pipe to program */
+ #define CAGAIN ('e'&0x1F) /* Save-to-same-place indicator */
#define META 0200 /* meta character bit (as in emacs) */
/* print (display) flags */
#define HDRONLY 0001 /* print header only */
***************
*** 514,537 ****
int wflags;
case '|':
- if (savebuf[0] != '|') {
- savebuf[0] = '|';
- savebuf[1] = '\0';
- }
- c = 's';
case 's':
case 'w':
/* We loop back to here each time user types ^U to prompt */
do {
! if (savebuf[0] == 0) {
! /* No saved default. Ask. */
! msg("file: ");
! curflag = CURP2;
! while ((wflags = vgetc()) == ' ');
! if (wflags == cintr) {
! secpr[0] = '\0';
! break;
! }
savebuf[0] = wflags;
savebuf[1] = 0;
}
--- 515,533 ----
int wflags;
case '|':
case 's':
case 'w':
/* We loop back to here each time user types ^U to prompt */
do {
! /* No saved default. Ask. */
! msg( (c=='|')? "|": "file: ");
! curflag = CURP2;
! while ((wflags = vgetc()) == ' ');
! if (wflags == cintr) {
! secpr[0] = '\0';
! break;
! }
! if (wflags != CAGAIN) {
savebuf[0] = wflags;
savebuf[1] = 0;
}
***************
*** 540,545 ****
--- 536,542 ----
} while (wflags == 2);
if (wflags) break; /* Interrupted out */
wflags = 0;
+ if (c == '|') c = 's';
if (c == 's')
wflags |= SVHEAD;
if (count != 1)
***************
*** 787,794 ****
case '<':
/* could improve this */
linebuf[0] = '<'; linebuf[1] = 0;
! if (prget("", linebuf))
break;
searchid: secpr[0] = '\0';
if (index(linebuf, '@') == NULL && index(linebuf, '>') == NULL) {
ptr1 = linebuf;
--- 784,793 ----
case '<':
/* could improve this */
linebuf[0] = '<'; linebuf[1] = 0;
! if (prget("", linebuf)) {
! secpr[0] = 0;
break;
+ }
searchid: secpr[0] = '\0';
if (index(linebuf, '@') == NULL && index(linebuf, '>') == NULL) {
ptr1 = linebuf;
***************
*** 2502,2507 ****
--- 2501,2507 ----
char temp[20];
char *fname;
char prog[BUFLEN + 24];
+ int err;
saveoff = ftell(fp);
(void) fseek(fp, artbody, 0);
***************
*** 2559,2574 ****
tprint(fp, ufp, FALSE);
}
fclose(ufp);
if (isprogram) {
! (void) sprintf(prog, "(%s)<%s", to + 1, fname);
! shcmd(prog, CWAIT);
! prflags |= NOPRT;
} else {
! if ((flags & OVWRITE) == 0)
! msg("file: %s %s", to, isnew ? "created" : "appended");
! else
! msg("file: %s written", to);
}
out:
--- 2559,2589 ----
tprint(fp, ufp, FALSE);
}
+ err = ferror(ufp);
+
fclose(ufp);
if (isprogram) {
! if (err)
! msg("error in writing temp file, maybe disk full?");
! else {
! (void) sprintf(prog, "(%s)<%s", to + 1, fname);
! shcmd(prog, CWAIT);
! prflags |= NOPRT;
! }
} else {
! msg("%sfile: %s %s",
! err? "ERROR WHILE WRITING ": "",
! to,
! (flags&OVWRITE)? "written":
! isnew ? "created" : "appended");
! }
!
! /* If we got an error, screen may be messed. E.g. 4.2BSD
! * writes "disk full" messages to the user's tty.
! */
! if (err) {
! clearok(curscr, 1);
! updscr();
}
out:
Index: inews.c
Prereq: 2.71
*** .d/inews.c Wed Dec 17 18:23:19 1986
--- inews.c Mon Dec 29 18:17:41 1986
***************
*** 17,23 ****
*/
#ifdef SCCSID
! static char *SccsId = "@(#)inews.c 2.71 12/16/86";
#endif /* SCCSID */
#include "iparams.h"
--- 17,23 ----
*/
#ifdef SCCSID
! static char *SccsId = "@(#)inews.c 2.73 12/29/86";
#endif /* SCCSID */
#include "iparams.h"
***************
*** 47,53 ****
#define CREATENG 0020 /* Create a new newsgroup */
char forgedname[NAMELEN]; /* A user specified -f option. */
! int spool_news = FALSE;
extern char histline[];
/* Fake sys line in case they forget their own system */
struct srec dummy_srec = { "MEMEME", "", "all", "", "" };
--- 47,53 ----
#define CREATENG 0020 /* Create a new newsgroup */
char forgedname[NAMELEN]; /* A user specified -f option. */
! int spool_news = 0;
extern char histline[];
/* Fake sys line in case they forget their own system */
struct srec dummy_srec = { "MEMEME", "", "all", "", "" };
***************
*** 123,128 ****
--- 123,129 ----
mode = UNKNOWN;
infp = stdin;
pathinit();
+ savmask = umask(N_UMASK); /* set up mask */
ptr = rindex(*argv, '/');
if (!ptr)
ptr = *argv - 1;
***************
*** 138,144 ****
if (LINK(ACTIVE,bfr) < 0 && errno == EEXIST)
#endif /* V7 */
#endif /* !BSD4_2 */
! spool_news = TRUE;
else {
#ifdef SPOOLNEWS
if (argc > 1 && !strcmp(*(argv+1), "-S")) {
--- 139,145 ----
if (LINK(ACTIVE,bfr) < 0 && errno == EEXIST)
#endif /* V7 */
#endif /* !BSD4_2 */
! spool_news = 2;
else {
#ifdef SPOOLNEWS
if (argc > 1 && !strcmp(*(argv+1), "-S")) {
***************
*** 145,159 ****
argc--;
argv++;
} else
! spool_news = TRUE;
#endif /* SPOOLNEWS */
- #if !defined(BSD4_2) && !defined(LOCKF)
- (void) UNLINK(bfr);
- #endif /* !BSD4_2 && !LOCKF */
}
if (argc > 1 && !strcmp(*(argv+1), "-U")) {
! if (spool_news) /* can't unspool while things are locked */
xxit(0);
dounspool();
/* NOT REACHED */
--- 146,166 ----
argc--;
argv++;
} else
! spool_news = 1;
#endif /* SPOOLNEWS */
}
+ #ifdef BSD4_2
+ flock(fileno(actfp), LOCK_UN);
+ #else /* !BSD4_2 */
+ #ifdef LOCKF
+ lockf(fileno(actfp), F_ULOCK, 0);
+ #else /* !LOCKF */
+ UNLINK(bfr);
+ #endif /* V7 */
+ #endif /* !BSD4_2 */
if (argc > 1 && !strcmp(*(argv+1), "-U")) {
! if (spool_news > 1) /* can't unspool while things are locked */
xxit(0);
dounspool();
/* NOT REACHED */
***************
*** 216,222 ****
(void) signal(SIGHUP, onsig);
(void) signal(SIGINT, onsig);
}
- savmask = umask(N_UMASK); /* set up mask */
uid = getuid();
gid = getgid();
duid = geteuid();
--- 223,228 ----
***************
*** 327,333 ****
*/
if (*filename) {
- (void) fclose(stdin);
infp = freopen(filename, "r", stdin);
if (infp == NULL)
xerror("freopen(%s): %s", filename, errmsg(errno));
--- 333,338 ----
***************
*** 511,519 ****
SPOOL,
tp->tm_year, tp->tm_mon+1, tp->tm_mday,
tp->tm_hour, tp->tm_min, getpid());
! sp = xfopen(buf, "w");
if (batchcmd != NULL)
fprintf(sp, "%s\n", batchcmd);
if (dolhwrite)
lhwrite(&header, sp);
while ((c = getc(infp)) != EOF)
--- 516,538 ----
SPOOL,
tp->tm_year, tp->tm_mon+1, tp->tm_mday,
tp->tm_hour, tp->tm_min, getpid());
! sp = fopen(buf, "w");
! if (sp == NULL) {
! char dbuf[BUFLEN];
! #ifdef VMS
! sprintf(dbuf, "%s/+rnews", SPOOL);
! #else /* !VMS */
! sprintf(dbuf, "%s/.rnews", SPOOL);
! #endif /* !VMS */
! if (mkdir(dbuf, 0777&~N_UMASK) < 0)
! xerror("Cannot mkdir %s: %s", dbuf, errmsg(errno));
! sp = xfopen(buf, "w");
! }
if (batchcmd != NULL)
fprintf(sp, "%s\n", batchcmd);
+ else
+ if (not_here[0] != '\0')
+ fprintf(sp, "#! inews -x %s -p\n", not_here);
if (dolhwrite)
lhwrite(&header, sp);
while ((c = getc(infp)) != EOF)
***************
*** 798,804 ****
if (spool_news && mode != PROC) {
fprintf(stderr,"Your article has been spooled for later processing.\n");
! dospool((char *)NULL, TRUE);
/* NOT REACHED */
}
--- 817,823 ----
if (spool_news && mode != PROC) {
fprintf(stderr,"Your article has been spooled for later processing.\n");
! dospool("#! inews -S -h", TRUE);
/* NOT REACHED */
}
***************
*** 877,883 ****
if ((pid=fork()) < 0)
xerror("Can't fork");
else if (pid > 0)
! exit(0);
}
#ifdef SIGTTOU
signal(SIGTTOU, SIG_IGN);
--- 896,902 ----
if ((pid=fork()) < 0)
xerror("Can't fork");
else if (pid > 0)
! _exit(0);
}
#ifdef SIGTTOU
signal(SIGTTOU, SIG_IGN);
***************
*** 885,891 ****
savehist(histline);
broadcast(mode==PROC);
}
! xxit(mode == PROC ? 0 : exitcode);
}
input()
--- 904,910 ----
savehist(histline);
broadcast(mode==PROC);
}
! xxit((mode == PROC && filename[0] == '\0') ? 0 : exitcode);
}
input()
***************
*** 1104,1109 ****
--- 1123,1129 ----
register DIR *dirp;
register struct direct *dir;
register int foundsome;
+ int pid, status, ret;
#ifdef VMS
sprintf(bfr, "%s/+rnews", SPOOL);
#else /* !VMS */
***************
*** 1122,1133 ****
while ((dir=readdir(dirp)) != NULL) {
if (dir->d_name[0] == '.')
continue;
! sprintf(bfr,"%s -S -p %s", RNEWS, dir->d_name);
! if (system(bfr) != 0) {
sprintf(bfr, "../%s", dir->d_name);
(void) LINK(dir->d_name, bfr);
! logerr("rnews failed. Batch saved in %s/%s",
! SPOOLDIR, dir->d_name);
}
(void) unlink(dir->d_name);
foundsome++;
--- 1142,1163 ----
while ((dir=readdir(dirp)) != NULL) {
if (dir->d_name[0] == '.')
continue;
! if ((pid=vfork()) == -1)
! xerror("Can't fork: %s", errmsg(errno));
! if (pid == 0) {
! execl(RNEWS, "rnews", "-S", "-p", dir->d_name,
! (char *) NULL);
! _exit(1);
! }
!
! while ((ret=wait(&status)) != pid && ret != -1)
! /* continue */;
!
! if (status != 0) {
sprintf(bfr, "../%s", dir->d_name);
(void) LINK(dir->d_name, bfr);
! logerr("rnews failed, status %d. Batch saved in %s/%s",
! status, SPOOL, dir->d_name);
}
(void) unlink(dir->d_name);
foundsome++;
Index: control.c
Prereq: 2.49
*** .d/control.c Wed Dec 17 18:23:05 1986
--- control.c Mon Dec 29 18:17:52 1986
***************
*** 19,25 ****
*/
#ifdef SCCSID
! static char *SccsId = "@(#)control.c 2.49 12/16/86";
#endif /* SCCSID */
#include "iparams.h"
--- 19,25 ----
*/
#ifdef SCCSID
! static char *SccsId = "@(#)control.c 2.50 12/29/86";
#endif /* SCCSID */
#include "iparams.h"
***************
*** 479,489 ****
ORGDISTRIB);
fprintf(fd,
"In other words, by executing the command:\n");
! fprintf(fd, "%s/inews -d %s -C %s\n", LIB,
! ORGDISTRIB, argv[1]);
# else /* !ORGDISTRIB */
fprintf(fd, "In other words, by executing the command:\n");
! fprintf(fd, "%s/inews -C %s\n", LIB, argv[1]);
# endif /* !ORGDISTRIB */
}
(void) mclose(fd);
--- 479,490 ----
ORGDISTRIB);
fprintf(fd,
"In other words, by executing the command:\n");
! fprintf(fd, "%s/inews -d %s -C %s %s\n", LIB,
! ORGDISTRIB, argv[1], argc > 2 ? argv[2] : "");
# else /* !ORGDISTRIB */
fprintf(fd, "In other words, by executing the command:\n");
! fprintf(fd, "%s/inews -C %s %s\n", LIB, argv[1],
! argc > 2 ? argv[2] : "");
# endif /* !ORGDISTRIB */
}
(void) mclose(fd);
Index: rfuncs.c
Prereq: 2.38
*** .d/rfuncs.c Wed Dec 17 18:23:41 1986
--- rfuncs.c Mon Dec 29 15:54:15 1986
***************
*** 16,22 ****
*/
#ifdef SCCSID
! static char *SccsId = "@(#)rfuncs.c 2.38 12/16/86";
#endif /* SCCSID */
/*LINTLIBRARY*/
--- 16,22 ----
*/
#ifdef SCCSID
! static char *SccsId = "@(#)rfuncs.c 2.39 12/23/86";
#endif /* SCCSID */
/*LINTLIBRARY*/
***************
*** 622,631 ****
p = ACTIVE;
ACTIVE = newactivename;
afp = xfopen(p, "r");
- tp = table;
#else /* !SORTACTIVE */
afp = xfopen(ACTIVE, "r");
#endif /* !SORTACTIVE */
while (fgets(aline, sizeof aline, afp) != NULL) {
if (sscanf(aline,"%s %ld %ld %c", ngname, &tp->maxart,
&tp->minart, &tp->yn) != 4)
--- 622,631 ----
p = ACTIVE;
ACTIVE = newactivename;
afp = xfopen(p, "r");
#else /* !SORTACTIVE */
afp = xfopen(ACTIVE, "r");
#endif /* !SORTACTIVE */
+ tp = table;
while (fgets(aline, sizeof aline, afp) != NULL) {
if (sscanf(aline,"%s %ld %ld %c", ngname, &tp->maxart,
&tp->minart, &tp->yn) != 4)
Index: rfuncs2.c
Prereq: 1.33
*** .d/rfuncs2.c Wed Dec 17 18:23:28 1986
--- rfuncs2.c Mon Dec 29 15:54:19 1986
***************
*** 16,22 ****
*/
#ifdef SCCSID
! static char *SccsId = "@(#)rfuncs2.c 1.33 12/16/86";
#endif /* SCCSID */
/*LINTLIBRARY*/
--- 16,22 ----
*/
#ifdef SCCSID
! static char *SccsId = "@(#)rfuncs2.c 1.34 12/23/86";
#endif /* SCCSID */
/*LINTLIBRARY*/
***************
*** 149,154 ****
--- 149,155 ----
if (checkfrom && strncmp(bfr, "From ", 5) == 0)
putc('>', ofp);
(void) fputs(bfr, ofp);
+ if (ferror(ofp)) break; /* E.g. disk full */
}
if (SigTrap)
qfflush(ofp);
Index: unbatch.c
Prereq: 1.24
*** .d/unbatch.c Wed Dec 17 18:23:30 1986
--- unbatch.c Mon Dec 29 15:54:23 1986
***************
*** 13,19 ****
*/
#ifdef SCCSID
! static char *SccsId = "@(#)unbatch.c 1.24 12/16/86";
#endif /* SCCSID */
#define MAXARGS 32
--- 13,19 ----
*/
#ifdef SCCSID
! static char *SccsId = "@(#)unbatch.c 1.25 12/23/86";
#endif /* SCCSID */
#define MAXARGS 32
***************
*** 105,111 ****
#ifdef IHCC
(void) sprintf(buf, "%s/%s/rnews", logdir(HOME), LIBDIR);
#else
! (void) sprintf(buf, "%s/rnews", BINDIR);
#endif
#ifdef SPOOLNEWS
execlp(buf, "rnews", "-S", (char *)0);
--- 105,111 ----
#ifdef IHCC
(void) sprintf(buf, "%s/%s/rnews", logdir(HOME), LIBDIR);
#else
! strcpy(buf, RNEWS);
#endif
#ifdef SPOOLNEWS
execlp(buf, "rnews", "-S", (char *)0);
Index vnews.help
*** .d/vnews.help Wed Dec 17 18:23:38 1986
--- vnews.help Mon Dec 29 15:49:43 1986
***************
*** 17,22 ****
ESC-r Reply directly using mailer m Move on to next item in a digest
f Post a followup article s Save article in file
N Go to newsgroup (next is default) w Save without header
! l List unread articles in group L List all articles in group
[Press ^L to see article again]
--- 17,22 ----
ESC-r Reply directly using mailer m Move on to next item in a digest
f Post a followup article s Save article in file
N Go to newsgroup (next is default) w Save without header
! l List unread articles in group L List all articles in group
[Press ^L to see article again]
Index: funcs2.c
Prereq: 1.17
*** .d/funcs2.c Wed Dec 17 18:23:11 1986
--- funcs2.c Mon Dec 29 18:19:19 1986
***************
*** 17,23 ****
*/
#ifdef SCCSID
! static char *SccsId = "@(#)funcs2.c 1.17 12/16/86";
#endif /* SCCSID */
#include "params.h"
--- 17,23 ----
*/
#ifdef SCCSID
! static char *SccsId = "@(#)funcs2.c 1.18 12/29/86";
#endif /* SCCSID */
#include "params.h"
***************
*** 127,133 ****
--- 127,137 ----
* A sys file line reading "ME" means the name of the local system.
*/
if (strcmp(sp->s_name, "ME") == 0)
+ #ifdef HIDDENNET
+ (void) strcpy(sp->s_name, LOCALSYSNAME);
+ #else /* !HIDDENNET */
(void) strcpy(sp->s_name, FULLSYSNAME);
+ #endif /* !HIDDENNET */
e = index(sp->s_name, '/');
if (e) {
*e++ = '\0';
Index: patchlevel.h
*** .d/patchlevel.h Wed Dec 17 18:23:46 1986
--- patchlevel.h Mon Dec 29 18:19:21 1986
***************
*** 1,3 ****
! #define PATCHLEVEL 2
! #define NEWS_VERSION "B 2.11 12/17/86"
--- 1,3 ----
! #define PATCHLEVEL 3
! #define NEWS_VERSION "B 2.11 12/29/86"