Path: utzoo!attcan!uunet!lll-winken!lll-lcc!ames!elroy!devvax!lroot From: lroot@devvax.JPL.NASA.GOV (The Superuser) Newsgroups: comp.sources.bugs Subject: perl 2.0 patch #3 Summary: This is an official patch for perl 2.0. Please apply it. Message-ID: <2438@devvax.JPL.NASA.GOV> Date: 13 Jul 88 00:54:17 GMT Organization: Jet Propulsion Laboratory, Pasadena, CA Lines: 1017 System: perl version 2.0 Patch #: 3 Priority: MEDIUM Subject: patch 2 continued Description: See patch 2. Fix: From rn, say "| patch -p -N -d DIR", where DIR is your perl source directory. Outside of rn, say "cd DIR; patch -p -N#define PATCHLEVEL 3 Index: perl.y Prereq: 2.0 *** perl.y.old Mon Jul 11 23:38:01 1988 --- perl.y Mon Jul 11 23:38:03 1988 *************** *** 1,6 **** ! /* $Header: perl.y,v 2.0 88/06/05 00:09:36 root Exp $ * * $Log: perl.y,v $ * Revision 2.0 88/06/05 00:09:36 root * Baseline version 2.0. * --- 1,11 ---- ! /* $Header: perl.y,v 2.0.1.1 88/07/11 22:46:03 root Exp $ * * $Log: perl.y,v $ + * Revision 2.0.1.1 88/07/11 22:46:03 root + * patch2: added ** + * patch2: no longer blows yacc stack on long LISTs (made , left associative) + * patch2: added j() to join multidimensional subscripts + * * Revision 2.0 88/06/05 00:09:36 root * Baseline version 2.0. * *************** *** 32,39 **** "unary operation", "file test", "<<",">>", ! "=~","!~", ! "unary -", "++", "--", "???" }; --- 37,44 ---- "unary operation", "file test", "<<",">>", ! "=~","!~", "unary -", ! "**", "++", "--", "???" }; *************** *** 93,98 **** --- 98,104 ---- %left '*' '/' '%' 'x' %left MATCH NMATCH %right '!' '~' UMINUS + %right POW %nonassoc INC DEC %left '(' *************** *** 298,304 **** { make_sub($2,$3); } ; ! expr : sexpr ',' expr { $$ = make_op(O_COMMA, 2, $1, $3, Nullarg,0); } | sexpr ; --- 304,310 ---- { make_sub($2,$3); } ; ! expr : expr ',' sexpr { $$ = make_op(O_COMMA, 2, $1, $3, Nullarg,0); } | sexpr ; *************** *** 308,313 **** --- 314,321 ---- if ($1->arg_type == O_LIST) $3 = listish($3); $$ = l(make_op(O_ASSIGN, 2, $1, $3, Nullarg,1)); } + | sexpr POW '=' sexpr + { $$ = l(make_op(O_POW, 2, $1, $4, Nullarg,0)); } | sexpr '*' '=' sexpr { $$ = l(make_op(O_MULTIPLY, 2, $1, $4, Nullarg,0)); } | sexpr '/' '=' sexpr *************** *** 334,339 **** --- 342,349 ---- { $$ = l(make_op(O_CONCAT, 2, $1, $4, Nullarg,0)); } + | sexpr POW sexpr + { $$ = make_op(O_POW, 2, $1, $3, Nullarg,0); } | sexpr '*' sexpr { $$ = make_op(O_MULTIPLY, 2, $1, $3, Nullarg,0); } | sexpr '/' sexpr *************** *** 456,465 **** Nullarg, Nullarg, 1); } | REG '{' expr '}' %prec '(' { $$ = make_op(O_HASH, 2, ! $3, stab2arg(A_STAB,hadd($1)), Nullarg,0); } | DELETE REG '{' expr '}' %prec '(' { $$ = make_op(O_DELETE, 2, ! $4, stab2arg(A_STAB,hadd($2)), Nullarg,0); } | ARYLEN %prec '(' { $$ = stab2arg(A_ARYLEN,$1); } | RSTRING %prec '(' --- 466,475 ---- Nullarg, Nullarg, 1); } | REG '{' expr '}' %prec '(' { $$ = make_op(O_HASH, 2, ! j($3), stab2arg(A_STAB,hadd($1)), Nullarg,0); } | DELETE REG '{' expr '}' %prec '(' { $$ = make_op(O_DELETE, 2, ! j($4), stab2arg(A_STAB,hadd($2)), Nullarg,0); } | ARYLEN %prec '(' { $$ = stab2arg(A_ARYLEN,$1); } | RSTRING %prec '(' Index: perly.c Prereq: 2.0.1.1 *** perly.c.old Mon Jul 11 23:38:12 1988 --- perly.c Mon Jul 11 23:38:14 1988 *************** *** 1,6 **** ! char rcsid[] = "$Header: perly.c,v 2.0.1.1 88/06/28 16:36:49 root Exp $"; /* * $Log: perly.c,v $ * Revision 2.0.1.1 88/06/28 16:36:49 root * patch1: added DOSUID code * --- 1,18 ---- ! char rcsid[] = "$Header: perly.c,v 2.0.1.2 88/07/11 23:02:05 root Exp $"; /* * $Log: perly.c,v $ + * Revision 2.0.1.2 88/07/11 23:02:05 root + * patch2: added $` and $' + * patch2: kludged in a BLOCK for return to refer to + * patch2: doubled possible size of error message + * patch2: fixed bogus copy into string space + * patch2: kludged in a join around multiple subscripts + * patch2: changed make_list() to handle left-associative COMMA op + * patch2: portabilized some structure copies in make_list() + * patch2: put 1-deep cache of last expression eval'ed to save reparse on s///e + * patch2: eval no longer needs trailing ; + * patch2: LIB/*.pl in "do" may now be > 256 chars + * * Revision 2.0.1.1 88/06/28 16:36:49 root * patch1: added DOSUID code * *************** *** 20,25 **** --- 32,39 ---- static int arg_tosave(); static int spat_tosave(); + static bool saw_return; + main(argc,argv,env) register int argc; register char **argv; *************** *** 350,358 **** if (sigstab = stabent("SIG",allstabs)) hadd(sigstab); ! magicalize("!#?^~=-%0123456789.+&*()<>,\\/[|"); ! sawampersand = (stabent("&",FALSE) != Nullstab); if (tmpstab = stabent("0",allstabs)) str_set(STAB_STR(tmpstab),origfilename); if (tmpstab = stabent("$",allstabs)) --- 364,379 ---- if (sigstab = stabent("SIG",allstabs)) hadd(sigstab); ! magicalize("!#?^~=-%0123456789.+&*()<>,\\/[|`'"); ! amperstab = stabent("&",allstabs); ! leftstab = stabent("`",allstabs); ! rightstab = stabent("'",allstabs); ! sawampersand = (amperstab || leftstab || rightstab); ! ! /* these aren't necessarily magical */ ! if (tmpstab = stabent(";",allstabs)) ! str_set(STAB_STR(tmpstab),"\034"); if (tmpstab = stabent("0",allstabs)) str_set(STAB_STR(tmpstab),origfilename); if (tmpstab = stabent("$",allstabs)) *************** *** 459,470 **** safefree((char*)stab->stab_sub); } bzero((char *)sub, sizeof(SUBR)); - sub->cmd = cmd; sub->filename = filename; tosave = anew(Nullstab); tosave->ary_fill = 0; /* make 1 based */ cmd_tosave(cmd); /* this builds the tosave array */ sub->tosave = tosave; stab->stab_sub = sub; } --- 480,500 ---- safefree((char*)stab->stab_sub); } bzero((char *)sub, sizeof(SUBR)); sub->filename = filename; + saw_return = FALSE; tosave = anew(Nullstab); tosave->ary_fill = 0; /* make 1 based */ cmd_tosave(cmd); /* this builds the tosave array */ sub->tosave = tosave; + if (saw_return) { + struct compcmd mycompblock; + + mycompblock.comp_true = cmd; + mycompblock.comp_alt = Nullcmd; + cmd = add_label("SUB",make_ccmd(C_BLOCK,Nullarg,mycompblock)); + saw_return = FALSE; + } + sub->cmd = cmd; stab->stab_sub = sub; } *************** *** 911,926 **** yyerror(s) char *s; { ! char tmpbuf[128]; char *tname = tmpbuf; if (yychar > 256) { ! tname = tokename[yychar-256]; ! if (strEQ(tname,"word")) strcpy(tname,tokenbuf); ! else if (strEQ(tname,"register")) sprintf(tname,"$%s",tokenbuf); ! else if (strEQ(tname,"array_length")) sprintf(tname,"$#%s",tokenbuf); } else if (!yychar) --- 941,957 ---- yyerror(s) char *s; { ! char tmpbuf[258]; char *tname = tmpbuf; + char *t; if (yychar > 256) { ! t = tokename[yychar-256]; ! if (strEQ(t,"word")) strcpy(tname,tokenbuf); ! else if (strEQ(t,"register")) sprintf(tname,"$%s",tokenbuf); ! else if (strEQ(t,"array_length")) sprintf(tname,"$#%s",tokenbuf); } else if (!yychar) *************** *** 931,942 **** strcpy(tname,"^?"); else sprintf(tname,"%c",yychar); ! sprintf(tokenbuf, "%s in file %s at line %d, next token \"%s\"\n", s,filename,line,tname); if (in_eval) ! str_set(stabent("@",TRUE)->stab_val,tokenbuf); else ! fputs(tokenbuf,stderr); } ARG * --- 962,973 ---- strcpy(tname,"^?"); else sprintf(tname,"%c",yychar); ! sprintf(buf, "%s in file %s at line %d, next token \"%s\"\n", s,filename,line,tname); if (in_eval) ! str_set(stabent("@",TRUE)->stab_val,buf); else ! fputs(buf,stderr); } ARG * *************** *** 1437,1443 **** --- 1468,1490 ---- return arg; } + /* maybe do a join on multiple array dimensions */ + ARG * + j(arg) + register ARG *arg; + { + if (arg && arg->arg_type == O_COMMA) { + arg = listish(arg); + arg = make_op(O_JOIN, 2, + stab2arg(A_STAB,stabent(";",TRUE)), + arg, + Nullarg, 0); + } + return arg; + } + + ARG * make_list(arg) register ARG *arg; { *************** *** 1458,1466 **** for (i = 2, node = arg; ; i++) { if (node->arg_len < 2) break; ! if (node[2].arg_type != A_EXPR) break; ! node = node[2].arg_ptr.arg_arg; if (node->arg_type != O_COMMA) break; } --- 1505,1513 ---- for (i = 2, node = arg; ; i++) { if (node->arg_len < 2) break; ! if (node[1].arg_type != A_EXPR) break; ! node = node[1].arg_ptr.arg_arg; if (node->arg_type != O_COMMA) break; } *************** *** 1468,1484 **** node = arg; arg = op_new(i); tmpstr = arg->arg_ptr.arg_str; *arg = *node; /* copy everything except the STR */ arg->arg_ptr.arg_str = tmpstr; ! for (j = 1; ; ) { ! arg[j] = node[1]; ! ++j; /* Bug in Xenix compiler */ ! if (j >= i) { ! arg[j] = node[2]; free_arg(node); break; } ! nxtnode = node[2].arg_ptr.arg_arg; free_arg(node); node = nxtnode; } --- 1515,1543 ---- node = arg; arg = op_new(i); tmpstr = arg->arg_ptr.arg_str; + #ifdef STRUCTCOPY *arg = *node; /* copy everything except the STR */ + #else + bcopy((char *)node, (char *)arg, sizeof(ARG)); + #endif arg->arg_ptr.arg_str = tmpstr; ! for (j = i; ; ) { ! #ifdef STRUCTCOPY ! arg[j] = node[2]; ! #else ! bcopy((char *)(node+2), (char *)(arg+j), sizeof(ARG)); ! #endif ! --j; /* Bug in Xenix compiler */ ! if (j < 2) { ! #ifdef STRUCTCOPY ! arg[1] = node[1]; ! #else ! bcopy((char *)(node+1), (char *)(arg+1), sizeof(ARG)); ! #endif free_arg(node); break; } ! nxtnode = node[1].arg_ptr.arg_arg; free_arg(node); node = nxtnode; } *************** *** 1709,1714 **** --- 1768,1775 ---- line_t oldline = line; int oldtmps_base = tmps_base; int oldsave = savestack->ary_fill; + static char *last_eval = Nullch; + static CMD *last_root = Nullcmd; tmps_base = tmps_max; str_set(stabent("@",TRUE)->stab_val,""); *************** *** 1716,1721 **** --- 1777,1783 ---- filename = "(eval)"; line = 1; str_sset(linestr,str); + str_cat(linestr,";"); /* be kind to them */ } else { filename = savestr(str_get(str)); /* can't free this easily */ *************** *** 1724,1734 **** ar = incstab->stab_array; if (!rsfp && *filename != '/') { for (i = 0; i <= ar->ary_fill; i++) { ! sprintf(tokenbuf,"%s/%s",str_get(afetch(ar,i)),filename); ! rsfp = fopen(tokenbuf,"r"); if (rsfp) { free(filename); ! filename = savestr(tokenbuf); break; } } --- 1786,1796 ---- ar = incstab->stab_array; if (!rsfp && *filename != '/') { for (i = 0; i <= ar->ary_fill; i++) { ! sprintf(buf,"%s/%s",str_get(afetch(ar,i)),filename); ! rsfp = fopen(buf,"r"); if (rsfp) { free(filename); ! filename = savestr(buf); break; } } *************** *** 1742,1758 **** } in_eval++; bufptr = str_get(linestr); ! if (setjmp(eval_env)) retval = 1; ! else ! retval = yyparse(); myroot = eval_root; /* in case cmd_exec does another eval! */ ! if (retval) str = &str_no; else { str = str_static(cmd_exec(eval_root)); /* if we don't save str, free zaps it */ ! cmd_free(myroot); /* can't free on error, for some reason */ } in_eval--; filename = oldfile; --- 1804,1842 ---- } in_eval++; bufptr = str_get(linestr); ! if (setjmp(eval_env)) { retval = 1; ! last_root = Nullcmd; ! } ! else { ! if (last_root && *bufptr == *last_eval && strEQ(bufptr,last_eval)) { ! retval = 0; ! eval_root = last_root; /* no point in reparsing */ ! } ! else if (in_eval == 1) { ! if (last_root) { ! safefree(last_eval); ! cmd_free(last_root); ! } ! last_eval = savestr(bufptr); ! last_root = Nullcmd; ! retval = yyparse(); ! if (!retval) ! last_root = eval_root; ! } ! else ! retval = yyparse(); ! } myroot = eval_root; /* in case cmd_exec does another eval! */ ! if (retval) { str = &str_no; + last_root = Nullcmd; /* can't free on error, for some reason */ + } else { str = str_static(cmd_exec(eval_root)); /* if we don't save str, free zaps it */ ! if (in_eval != 1 && myroot != last_root) ! cmd_free(myroot); } in_eval--; filename = oldfile; *************** *** 1940,1948 **** --- 2024,2036 ---- } } switch (arg->arg_type) { + case O_RETURN: + saw_return = TRUE; + break; case O_EVAL: case O_SUBR: saving = TRUE; + break; } if (saving) apush(tosave,arg->arg_ptr.arg_str); Index: regexp.c Prereq: 2.0.1.1 *** regexp.c.old Mon Jul 11 23:38:31 1988 --- regexp.c Mon Jul 11 23:38:34 1988 *************** *** 7,15 **** * blame Henry for some of the lack of readability. */ ! /* $Header: regexp.c,v 2.0.1.1 88/06/28 16:37:19 root Exp $ * * $Log: regexp.c,v $ * Revision 2.0.1.1 88/06/28 16:37:19 root * patch1: removed redundant debugging code * --- 7,20 ---- * blame Henry for some of the lack of readability. */ ! /* $Header: regexp.c,v 2.0.1.2 88/07/11 23:05:53 root Exp $ * * $Log: regexp.c,v $ + * Revision 2.0.1.2 88/07/11 23:05:53 root + * patch2: added Hokey's workaround for 68000 addlepation + * patch2: changed some savestr's to avoid recalculating length when we know it + * patch2: fixed dumper in dumper + * * Revision 2.0.1.1 88/06/28 16:37:19 root * patch1: removed redundant debugging code * *************** *** 801,807 **** --- 806,823 ---- *flagp |= HASWIDTH; if (len == 1) *flagp |= SIMPLE; + #ifdef m68k + #define Vomit /* Hokey's workaround */ + #endif + #ifdef Vomit + { + char *rs = regcode; + #endif Vomit *OPERAND(ret) = len; + #ifdef Vomit + regcode = rs; + } + #endif Vomit regc('\0'); } break; *************** *** 1225,1231 **** register int tmp, i; register char *string = stringarg; register char *c; - extern char *savestr(); /* Be paranoid... */ if (prog == NULL || string == NULL) { --- 1241,1246 ---- *************** *** 1241,1247 **** if (prog->do_folding) { i = strend - string; ! string = savestr(string); strend = string + i; for (s = string; *s; s++) if (isupper(*s)) --- 1256,1264 ---- if (prog->do_folding) { i = strend - string; ! c = safemalloc((MEM_SIZE)(i+1)); ! bcopy(string, c, i+1); ! string = c; strend = string + i; for (s = string; *s; s++) if (isupper(*s)) *************** *** 1421,1427 **** got_it: if (prog->nparens || sawampersand || prog->do_folding) { ! s = savestr(stringarg); /* so $digit will always work */ if (prog->subbase) safefree(prog->subbase); prog->subbase = s; --- 1438,1446 ---- got_it: if (prog->nparens || sawampersand || prog->do_folding) { ! i = strend - string; ! s = safemalloc((MEM_SIZE)(i+1)); /* so $digit will work later */ ! bcopy(stringarg, s, i+1); if (prog->subbase) safefree(prog->subbase); prog->subbase = s; *************** *** 1942,1948 **** if (r->regstart) printf("start `%s' ", r->regstart->str_ptr); if (r->regstclass) ! printf("stclass `%s' ", regprop(OP(r->regstclass))); if (r->reganch) printf("anchored "); if (r->regmust != NULL) --- 1961,1967 ---- if (r->regstart) printf("start `%s' ", r->regstart->str_ptr); if (r->regstclass) ! printf("stclass `%s' ", regprop(r->regstclass)); if (r->reganch) printf("anchored "); if (r->regmust != NULL) *************** *** 1959,1965 **** char *op; { register char *p; - static char buf[50]; (void) strcpy(buf, ":"); --- 1978,1983 ---- Index: stab.c Prereq: 2.0 *** stab.c.old Mon Jul 11 23:38:45 1988 --- stab.c Mon Jul 11 23:38:46 1988 *************** *** 1,6 **** ! /* $Header: stab.c,v 2.0 88/06/05 00:11:01 root Exp $ * * $Log: stab.c,v $ * Revision 2.0 88/06/05 00:11:01 root * Baseline version 2.0. * --- 1,10 ---- ! /* $Header: stab.c,v 2.0.1.1 88/07/11 23:07:44 root Exp $ * * $Log: stab.c,v $ + * Revision 2.0.1.1 88/07/11 23:07:44 root + * patch2: added $` and $' + * patch2: maximum length of groups list can now exceed 256 chars + * * Revision 2.0 88/06/05 00:11:01 root * Baseline version 2.0. * *************** *** 96,101 **** --- 100,129 ---- goto getparen; } break; + case '`': + if (curspat) { + if (curspat->spat_regexp && + (s = curspat->spat_regexp->subbase) ) { + i = curspat->spat_regexp->startp[0] - s; + if (i >= 0) + str_nset(stab->stab_val,s,i); + else + str_nset(stab->stab_val,"",0); + } + else + str_nset(stab->stab_val,"",0); + } + break; + case '\'': + if (curspat) { + if (curspat->spat_regexp && + (s = curspat->spat_regexp->endp[0]) ) { + str_set(stab->stab_val,s); + } + else + str_nset(stab->stab_val,"",0); + } + break; case '.': if (last_in_stab) { str_numset(stab->stab_val,(double)last_in_stab->stab_io->lines); *************** *** 155,165 **** str_numset(stab->stab_val,(double)euid); break; case '(': ! s = tokenbuf; sprintf(s,"%d",(int)getgid()); goto add_groups; case ')': ! s = tokenbuf; sprintf(s,"%d",(int)getegid()); add_groups: while (*s) s++; --- 183,193 ---- str_numset(stab->stab_val,(double)euid); break; case '(': ! s = buf; sprintf(s,"%d",(int)getgid()); goto add_groups; case ')': ! s = buf; sprintf(s,"%d",(int)getegid()); add_groups: while (*s) s++; *************** *** 177,183 **** } } #endif ! str_set(stab->stab_val,tokenbuf); break; } return stab->stab_val; --- 205,211 ---- } } #endif ! str_set(stab->stab_val,buf); break; } return stab->stab_val; Index: toke.c Prereq: 2.0.1.1 *** toke.c.old Mon Jul 11 23:39:11 1988 --- toke.c Mon Jul 11 23:39:13 1988 *************** *** 1,6 **** ! /* $Header: toke.c,v 2.0.1.1 88/06/28 16:39:50 root Exp $ * * $Log: toke.c,v $ * Revision 2.0.1.1 88/06/28 16:39:50 root * patch1: tr/x/y/ can dump core if y is shorter than x * --- 1,9 ---- ! /* $Header: toke.c,v 2.0.1.2 88/07/11 23:11:41 root Exp $ * * $Log: toke.c,v $ + * Revision 2.0.1.2 88/07/11 23:11:41 root + * patch2: added tokens for new operators + * * Revision 2.0.1.1 88/06/28 16:39:50 root * patch1: tr/x/y/ can dump core if y is shorter than x * *************** *** 47,53 **** switch (*s) { default: fprintf(stderr, ! "Unrecognized character %c in file %s line %ld--ignoring.\n", *s++,filename,(long)line); goto retry; case 0: --- 50,56 ---- switch (*s) { default: fprintf(stderr, ! "Unrecognized character \\%03o in file %s line %ld--ignoring.\n", *s++,filename,(long)line); goto retry; case 0: *************** *** 162,177 **** } } /*FALL THROUGH*/ case '+': if (s[1] == *s) { ! s++; if (*s++ == '+') RETURN(INC); ! else RETURN(DEC); } /* FALL THROUGH */ - case '*': case '%': case '^': case '~': --- 165,182 ---- } } /*FALL THROUGH*/ + case '*': case '+': if (s[1] == *s) { ! tmp = *s++; if (*s++ == '+') RETURN(INC); ! else if (tmp == '-') RETURN(DEC); + else + OPERATOR(POW); } /* FALL THROUGH */ case '%': case '^': case '~': *************** *** 311,316 **** --- 316,323 ---- OPERATOR(WORD); case 'a': case 'A': SNARFWORD; + if (strEQ(d,"atan2")) + FUN2(O_ATAN2); yylval.cval = savestr(d); OPERATOR(WORD); case 'b': case 'B': *************** *** 337,342 **** --- 344,351 ---- yylval.ival = O_CHOWN; OPERATOR(LISTOP); } + if (strEQ(d,"cos")) + FUN1(O_COS); yylval.cval = savestr(d); OPERATOR(WORD); case 'd': case 'D': *************** *** 507,512 **** --- 516,523 ---- OPERATOR(WORD); case 'r': case 'R': SNARFWORD; + if (strEQ(d,"return")) + UNI(O_RETURN); if (strEQ(d,"reset")) UNI(O_RESET); if (strEQ(d,"redo")) *************** *** 513,518 **** --- 524,531 ---- LOOPX(O_REDO); if (strEQ(d,"rename")) FUN2(O_RENAME); + if (strEQ(d,"rand")) + UNI(O_RAND); yylval.cval = savestr(d); OPERATOR(WORD); case 's': case 'S': *************** *** 555,560 **** --- 568,577 ---- yylval.ival = O_SORT; OPERATOR(LISTOP); } + if (strEQ(d,"srand")) + FUN1(O_SRAND); + if (strEQ(d,"sin")) + FUN1(O_SIN); yylval.cval = savestr(d); OPERATOR(WORD); case 't': case 'T': *************** *** 843,849 **** fatal("Substitution replacement not terminated"); spat->spat_repl = yylval.arg; spat->spat_flags |= SPAT_ONCE; ! while (*s == 'g' || *s == 'i') { if (*s == 'g') { s++; spat->spat_flags &= ~SPAT_ONCE; --- 860,875 ---- fatal("Substitution replacement not terminated"); spat->spat_repl = yylval.arg; spat->spat_flags |= SPAT_ONCE; ! while (*s == 'g' || *s == 'i' || *s == 'e') { ! if (*s == 'e') { ! s++; ! if (spat->spat_repl[1].arg_type == A_DOUBLE) ! spat->spat_repl[1].arg_type = A_SINGLE; ! spat->spat_repl = make_op(O_EVAL,1, ! spat->spat_repl, ! Nullarg, ! Nullarg,0); ! } if (*s == 'g') { s++; spat->spat_flags &= ~SPAT_ONCE; Index: util.c Prereq: 2.0 *** util.c.old Mon Jul 11 23:39:21 1988 --- util.c Mon Jul 11 23:39:22 1988 *************** *** 1,6 **** ! /* $Header: util.c,v 2.0 88/06/05 00:15:11 root Exp $ * * $Log: util.c,v $ * Revision 2.0 88/06/05 00:15:11 root * Baseline version 2.0. * --- 1,9 ---- ! /* $Header: util.c,v 2.0.1.1 88/07/11 23:12:55 root Exp $ * * $Log: util.c,v $ + * Revision 2.0.1.1 88/07/11 23:12:55 root + * patch2: increased maximum error message size from 256 to 1024 + * * Revision 2.0 88/06/05 00:15:11 root * Baseline version 2.0. * *************** *** 437,443 **** { char *s; ! s = tokenbuf; sprintf(s,pat,a1,a2,a3,a4); s += strlen(s); if (s[-1] != '\n') { --- 440,446 ---- { char *s; ! s = buf; sprintf(s,pat,a1,a2,a3,a4); s += strlen(s); if (s[-1] != '\n') { *************** *** 467,476 **** mess(pat,a1,a2,a3,a4); if (in_eval) { ! str_set(stabent("@",TRUE)->stab_val,tokenbuf); longjmp(eval_env,1); } ! fputs(tokenbuf,stderr); fflush(stderr); if (e_fp) UNLINK(e_tmpname); --- 470,479 ---- mess(pat,a1,a2,a3,a4); if (in_eval) { ! str_set(stabent("@",TRUE)->stab_val,buf); longjmp(eval_env,1); } ! fputs(buf,stderr); fflush(stderr); if (e_fp) UNLINK(e_tmpname); *************** *** 483,489 **** char *pat; { mess(pat,a1,a2,a3,a4); ! fputs(tokenbuf,stderr); fflush(stderr); } --- 486,492 ---- char *pat; { mess(pat,a1,a2,a3,a4); ! fputs(buf,stderr); fflush(stderr); }