[net.bugs.v7] Some "lex" cleanups and bug fixes

guy@sun.uucp (Guy Harris) (08/10/85)

Index:	usr.bin/lex/lmain.c usr.bin/lex/sub1.c 4.2BSD
	(The same bug exists in the S5 "lex" and probably exists
	in the V7 "lex" as well).

Description:
	1) A couple of bits of code here are really sloppy when it comes
	   to pointers vs. integers.

	2) Some other bits of code are sloppy when it comes to - surprise! -
	   dereferencing NULL pointers.
Repeat-By:
	Try "lex -Q anything.l" if your machine dumps core when dereferencing
	null pointers.
Fix:
	See following context diffs.  Line numbers and exact code
	will be different for S3/S5/V7.

diff -c /arch/4.2/usr/src/usr.bin/lex/lmain.c ./lmain.c
*** /arch/4.2/usr/src/usr.bin/lex/lmain.c	Thu Aug 11 20:51:24 1983
--- ./lmain.c	Tue Aug  6 11:43:35 1985
***************
*** 129,135
  dp =	dchar = myalloc(DEFCHAR,sizeof(*dchar));
  	sname = myalloc(STARTSIZE,sizeof(*sname));
  sp = 	schar = myalloc(STARTCHAR,sizeof(*schar));
! 	if(ccl == 0 || def == 0 || subs == 0 || dchar == 0 || sname == 0 || schar == 0)
  		error("Too little core to begin");
  	}
  free1core(){

--- 129,135 -----
  dp =	dchar = myalloc(DEFCHAR,sizeof(*dchar));
  	sname = myalloc(STARTSIZE,sizeof(*sname));
  sp = 	schar = myalloc(STARTCHAR,sizeof(*schar));
! 	if(ccl == 0 || pchar == 0 || def == 0 || subs == 0 || dchar == 0 || sname == 0 || schar == 0)
  		error("Too little core to begin");
  	}
  free1core(){
***************
*** 193,199
  # endif
  char *myalloc(a,b)
    int a,b; {
! 	register int i;
  	i = calloc(a, b);
  	if(i==0)
  		warning("OOPS - calloc returns a 0");

--- 193,199 -----
  # endif
  char *myalloc(a,b)
    int a,b; {
! 	register char *i;
  	i = calloc(a, b);
  # ifdef DEBUG
  	if(i==0)
***************
*** 195,200
    int a,b; {
  	register int i;
  	i = calloc(a, b);
  	if(i==0)
  		warning("OOPS - calloc returns a 0");
  	else if(i == -1){

--- 195,201 -----
    int a,b; {
  	register char *i;
  	i = calloc(a, b);
+ # ifdef DEBUG
  	if(i==0)
  		warning("OOPS - calloc returns a 0");
  # endif
***************
*** 197,205
  	i = calloc(a, b);
  	if(i==0)
  		warning("OOPS - calloc returns a 0");
- 	else if(i == -1){
- # ifdef DEBUG
- 		warning("calloc returns a -1");
  # endif
  		return(0);
  		}

--- 198,203 -----
  # ifdef DEBUG
  	if(i==0)
  		warning("OOPS - calloc returns a 0");
  # endif
  	return(i);
  	}
***************
*** 201,208
  # ifdef DEBUG
  		warning("calloc returns a -1");
  # endif
- 		return(0);
- 		}
  	return(i);
  	}
  # ifdef DEBUG

--- 199,204 -----
  	if(i==0)
  		warning("OOPS - calloc returns a 0");
  # endif
  	return(i);
  	}
  # ifdef DEBUG
***************
*** 208,214
  # ifdef DEBUG
  buserr(){
  	fflush(errorf);
! 	fflush(fout);
  	fflush(stdout);
  	fprintf(errorf,"Bus error\n");
  	if(report == 1)statistics();

--- 204,211 -----
  # ifdef DEBUG
  buserr(){
  	fflush(errorf);
! 	if(fout != NULL)
! 		fflush(fout);
  	fflush(stdout);
  	fprintf(errorf,"Bus error\n");
  	if(report == 1)statistics();
***************
*** 216,222
  	}
  segviol(){
  	fflush(errorf);
! 	fflush(fout);
  	fflush(stdout);
  	fprintf(errorf,"Segmentation violation\n");
  	if(report == 1)statistics();

--- 213,220 -----
  	}
  segviol(){
  	fflush(errorf);
! 	if(fout != NULL)
! 		fflush(fout);
  	fflush(stdout);
  	fprintf(errorf,"Segmentation violation\n");
  	if(report == 1)statistics();

diff -c /arch/4.2/usr/src/usr.bin/lex/sub1.c ./sub1.c
*** /arch/4.2/usr/src/usr.bin/lex/sub1.c	Thu Aug 11 20:51:25 1983
--- ./sub1.c	Tue Aug  6 11:35:17 1985
***************
*** 62,68
  	fprintf(errorf,s,p,d);
  	putc('\n',errorf);
  	fflush(errorf);
! 	fflush(fout);
  	fflush(stdout);
  	}
  index(a,s)

--- 62,69 -----
  	fprintf(errorf,s,p,d);
  	putc('\n',errorf);
  	fflush(errorf);
! 	if(fout != NULL)
! 		fflush(fout);
  	fflush(stdout);
  	}
  index(a,s)