rn 4.3 patch #14
Larry Wall
lwall at sdcrdcf.UUCP
Wed May 22 07:28:39 AEST 1985
System: rn version 4.3
Patch #: 14
Priority: ENHANCEMENT
Subject: rn -c speedup
From: mark at cbosgd.UUCP (Mark Horton), lwall at sdcrdcf.UUCP (Larry Wall)
Description:
Mark mentioned that he didn't want to put "rn -c" into his
system-wide login profile because it was kind of slow, and he
suggested that it might be speedupable. Okay, here it is.
The following patches make "rn -c" run between two and three
times faster on our machine. These figures are for comparison
only and may vary depending on the environment and your driving
habits.
Fix: From rn, say "| patch -d DIR", where DIR is your rn source directory.
Outside of rn, say "cd DIR; patch <thisarticle". If you don't have
the patch program, apply the following by hand, or get patch.
(Has anyone really made it this far without patch?)
If patch indicates that patchlevel is the wrong version, you may need
to apply one or more previous patches, or the patch may already
have been applied. See the patchlevel file to find out what has or
has not been applied. In any event, don't continue with the patch.
Index: patchlevel
Prereq: 13
1c1
< Patch #: 13
---
> Patch #: 14
Index: init.c
Prereq: 4.3
*** init.c.old Tue May 21 13:38:34 1985
--- init.c Tue May 21 13:38:37 1985
***************
*** 1,4
! /* $Header: init.c,v 4.3 85/05/01 16:16:13 lwall Exp $
*
* $Log: init.c,v $
* Revision 4.3 85/05/01 16:16:13 lwall
--- 1,4 -----
! /* $Header: init.c,v 4.3.1.2 85/05/21 14:22:46 lwall Exp $
*
* $Log: init.c,v $
* Revision 4.3.1.2 85/05/21 14:22:46 lwall
***************
*** 1,6
/* $Header: init.c,v 4.3 85/05/01 16:16:13 lwall Exp $
*
* $Log: init.c,v $
* Revision 4.3 85/05/01 16:16:13 lwall
* Baseline for release with 4.3bsd.
*
--- 1,12 -----
/* $Header: init.c,v 4.3.1.2 85/05/21 14:22:46 lwall Exp $
*
* $Log: init.c,v $
+ * Revision 4.3.1.2 85/05/21 14:22:46 lwall
+ * Sped up "rn -c" by avoiding unnecessary initialization.
+ *
+ * Revision 4.3.1.1 85/05/10 11:33:39 lwall
+ * Branch for patches.
+ *
* Revision 4.3 85/05/01 16:16:13 lwall
* Baseline for release with 4.3bsd.
*
***************
*** 80,86
/* now make sure we have a current working directory */
! cwd_check();
/* now that we know where to save things, cd to news directory */
--- 86,93 -----
/* now make sure we have a current working directory */
! if (!checkflag)
! cwd_check();
/* now that we know where to save things, cd to news directory */
***************
*** 96,102
/* get info on last rn run, if any */
! last_init(tcbuf);
free(tcbuf); /* recover 1024 bytes */
--- 103,110 -----
/* get info on last rn run, if any */
! if (!checkflag)
! last_init(tcbuf);
free(tcbuf); /* recover 1024 bytes */
***************
*** 102,108
/* make sure we are the right version */
! version_check();
/* make sure we are the sole possessors of .newsrc */
--- 110,117 -----
/* make sure we are the right version */
! if (!checkflag)
! version_check();
/* make sure we are the sole possessors of .newsrc */
***************
*** 106,112
/* make sure we are the sole possessors of .newsrc */
! lock_check();
/* check for news news */
--- 115,122 -----
/* make sure we are the sole possessors of .newsrc */
! if (!checkflag)
! lock_check();
/* check for news news */
***************
*** 110,116
/* check for news news */
! newsnews_check();
/* open active file, etc. */
--- 120,127 -----
/* check for news news */
! if (!checkflag)
! newsnews_check();
/* open active file, etc. */
***************
*** 214,220
tmpfp = fopen(lockname,"r");
if (tmpfp != Nullfp) {
int processnum;
!
fgets(buf,LBUFLEN,tmpfp);
fclose(tmpfp);
processnum = atoi(buf);
--- 225,231 -----
tmpfp = fopen(lockname,"r");
if (tmpfp != Nullfp) {
int processnum;
!
fgets(buf,LBUFLEN,tmpfp);
fclose(tmpfp);
processnum = atoi(buf);
***************
*** 285,291
{
char *newsnewsname = filexp(NEWSNEWSNAME);
! if (!checkflag && (tmpfp = fopen(newsnewsname,"r")) != Nullfp) {
fstat(tmpfp->_file,&filestat);
if (filestat.st_mtime > lasttime) {
while (fgets(buf,sizeof(buf),tmpfp) != Nullch)
--- 296,302 -----
{
char *newsnewsname = filexp(NEWSNEWSNAME);
! if ((tmpfp = fopen(newsnewsname,"r")) != Nullfp) {
fstat(tmpfp->_file,&filestat);
if (filestat.st_mtime > lasttime) {
while (fgets(buf,sizeof(buf),tmpfp) != Nullch)
Index: intrp.c
Prereq: 4.3.1.3
*** intrp.c.old Tue May 21 13:39:24 1985
--- intrp.c Tue May 21 13:39:37 1985
***************
*** 1,4
! /* $Header: intrp.c,v 4.3.1.3 85/05/17 10:37:11 lwall Exp $
*
* $Log: intrp.c,v $
* Revision 4.3.1.3 85/05/17 10:37:11 lwall
--- 1,4 -----
! /* $Header: intrp.c,v 4.3.1.4 85/05/21 13:35:21 lwall Exp $
*
* $Log: intrp.c,v $
* Revision 4.3.1.4 85/05/21 13:35:21 lwall
***************
*** 1,6
/* $Header: intrp.c,v 4.3.1.3 85/05/17 10:37:11 lwall Exp $
*
* $Log: intrp.c,v $
* Revision 4.3.1.3 85/05/17 10:37:11 lwall
* Fixed & substitution to capitalize last name too.
*
--- 1,9 -----
/* $Header: intrp.c,v 4.3.1.4 85/05/21 13:35:21 lwall Exp $
*
* $Log: intrp.c,v $
+ * Revision 4.3.1.4 85/05/21 13:35:21 lwall
+ * Sped up "rn -c" by not doing unnecessary initialization.
+ *
* Revision 4.3.1.3 85/05/17 10:37:11 lwall
* Fixed & substitution to capitalize last name too.
*
***************
*** 83,91
spool = savestr(filexp(SPOOL)); /* usually /usr/spool/news */
- getwd(tcbuf); /* find working directory name */
- origdir = savestr(tcbuf); /* and remember it */
-
/* get environmental stuff */
/* get home directory */
--- 86,91 -----
spool = savestr(filexp(SPOOL)); /* usually /usr/spool/news */
/* get environmental stuff */
/* get home directory */
***************
*** 105,110
if (logname == Nullch)
logname = savestr(getlogin());
#endif
/* get the real name of the person (%N) */
/* Must be done after logname is read in because BERKNAMES uses that */
--- 105,115 -----
if (logname == Nullch)
logname = savestr(getlogin());
#endif
+
+ if (checkflag) /* that getwd below takes ~1/3 sec. */
+ return; /* and we do not need it for -c */
+ getwd(tcbuf); /* find working directory name */
+ origdir = savestr(tcbuf); /* and remember it */
/* get the real name of the person (%N) */
/* Must be done after logname is read in because BERKNAMES uses that */
Index: rcstuff.c
Prereq: 4.3
*** rcstuff.c.old Tue May 21 13:38:02 1985
--- rcstuff.c Tue May 21 13:38:10 1985
***************
*** 1,4
! /* $Header: rcstuff.c,v 4.3 85/05/01 11:45:56 lwall Exp $
*
* $Log: rcstuff.c,v $
* Revision 4.3 85/05/01 11:45:56 lwall
--- 1,4 -----
! /* $Header: rcstuff.c,v 4.3.1.2 85/05/17 11:40:08 lwall Exp $
*
* $Log: rcstuff.c,v $
* Revision 4.3.1.2 85/05/17 11:40:08 lwall
***************
*** 1,6
/* $Header: rcstuff.c,v 4.3 85/05/01 11:45:56 lwall Exp $
*
* $Log: rcstuff.c,v $
* Revision 4.3 85/05/01 11:45:56 lwall
* Baseline for release with 4.3bsd.
*
--- 1,12 -----
/* $Header: rcstuff.c,v 4.3.1.2 85/05/17 11:40:08 lwall Exp $
*
* $Log: rcstuff.c,v $
+ * Revision 4.3.1.2 85/05/17 11:40:08 lwall
+ * Sped up "rn -c" by not mallocing unnecessarily.
+ *
+ * Revision 4.3.1.1 85/05/10 11:37:18 lwall
+ * Branch for patches.
+ *
* Revision 4.3 85/05/01 11:45:56 lwall
* Baseline for release with 4.3bsd.
*
***************
*** 84,90
else
softptr[newng] = 0;
some_buf[--length] = '\0'; /* wipe out newline */
! if (some_buf == buf) {
rcline[newng] = savestr(some_buf);
/* make a semipermanent copy */
}
--- 90,98 -----
else
softptr[newng] = 0;
some_buf[--length] = '\0'; /* wipe out newline */
! if (checkflag) /* no extra mallocs for -c */
! rcline[newng] = some_buf;
! else if (some_buf == buf) {
rcline[newng] = savestr(some_buf);
/* make a semipermanent copy */
}
***************
*** 110,116
continue;
}
for (s = rcline[newng]; *s && *s != ':' && *s != NEGCHAR; s++) ;
! if (!*s) {
#ifndef lint
rcline[newng] = saferealloc(rcline[newng],(MEM_SIZE)length+2);
#endif lint
--- 118,124 -----
continue;
}
for (s = rcline[newng]; *s && *s != ':' && *s != NEGCHAR; s++) ;
! if (!*s && !checkflag) {
#ifndef lint
rcline[newng] = saferealloc(rcline[newng],(MEM_SIZE)length+2);
#endif lint
Index: sw.c
Prereq: 4.3
*** sw.c.old Tue May 21 13:38:54 1985
--- sw.c Tue May 21 13:38:57 1985
***************
*** 1,4
! /* $Header: sw.c,v 4.3 85/05/01 11:50:54 lwall Exp $
*
* $Log: sw.c,v $
* Revision 4.3 85/05/01 11:50:54 lwall
--- 1,4 -----
! /* $Header: sw.c,v 4.3.1.2 85/05/21 13:36:23 lwall Exp $
*
* $Log: sw.c,v $
* Revision 4.3.1.2 85/05/21 13:36:23 lwall
***************
*** 1,6
/* $Header: sw.c,v 4.3 85/05/01 11:50:54 lwall Exp $
*
* $Log: sw.c,v $
* Revision 4.3 85/05/01 11:50:54 lwall
* Baseline for release with 4.3bsd.
*
--- 1,12 -----
/* $Header: sw.c,v 4.3.1.2 85/05/21 13:36:23 lwall Exp $
*
* $Log: sw.c,v $
+ * Revision 4.3.1.2 85/05/21 13:36:23 lwall
+ * Sped up "rn -c" by not doing unnecessary initialization.
+ *
+ * Revision 4.3.1.1 85/05/10 11:40:38 lwall
+ * Branch for patches.
+ *
* Revision 4.3 85/05/01 11:50:54 lwall
* Baseline for release with 4.3bsd.
*
***************
*** 25,30
{
register int i;
interp(*tcbufptr,1024,GLOBINIT);
sw_file(tcbufptr,FALSE);
safecpy(*tcbufptr,getenv("RNINIT"),1024);
--- 31,38 -----
{
register int i;
+ if (argc >= 2 && strEQ(argv[1],"-c"))
+ checkflag=TRUE; /* so we can optimize for -c */
interp(*tcbufptr,1024,GLOBINIT);
sw_file(tcbufptr,FALSE);
safecpy(*tcbufptr,getenv("RNINIT"),1024);
***************
*** 161,166
break;
#endif
case '/':
#ifdef SETENV
setenv("SAVEDIR", upordown ? "%p/%c" : "%p" );
setenv("SAVENAME", upordown ? "%a" : "%^C");
--- 169,176 -----
break;
#endif
case '/':
+ if (checkflag)
+ break;
#ifdef SETENV
setenv("SAVEDIR", upordown ? "%p/%c" : "%p" );
setenv("SAVENAME", upordown ? "%a" : "%^C");
***************
*** 177,182
docheckwhen = atoi(s);
break;
case 'd': {
s++;
if (*s == '=') s++;
if (cwd) {
--- 187,194 -----
docheckwhen = atoi(s);
break;
case 'd': {
+ if (checkflag)
+ break;
s++;
if (*s == '=') s++;
if (cwd) {
***************
*** 237,242
char *t;
int flag = (*s == 'h' ? HT_HIDE : HT_MAGIC);
s++;
len = strlen(s);
for (t=s; *t; t++)
--- 249,256 -----
char *t;
int flag = (*s == 'h' ? HT_HIDE : HT_MAGIC);
+ if (checkflag)
+ break;
s++;
len = strlen(s);
for (t=s; *t; t++)
More information about the Comp.sources.bugs
mailing list