|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ 1 T ┃
Length: 11361 (0x2c61) Types: TextFile Names: »14«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─ ⟦this⟧ »EUUGD11/euug-87hel/sec1/rn/BUGS/14«
System: rn version 4.3 Patch #: 14 Priority: ENHANCEMENT Subject: rn -c speedup From: mark@cbosgd.UUCP (Mark Horton), lwall@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++)