[comp.os.minix] tsort patch

walls@killer.DALLAS.TX.US (Monty Walls) (10/09/88)

--------------------------------------------------------------------------

	Sorry this took so long to get sent out.  I have been without
a computer for 2 weeks.  This sould fix the problem people have mentioned
in tsort. 

-Monty Walls

---------------------------cut here---------------------------------------
*** tsort.c.orig
--- tsort.c
**************
*** 24,29
   * change log:
   *	possible bug in ungetc(), fixed readone() to avoid - 2/19/88 - mrw
   *	massive design error, rewrote dump logic - 3/15/88 - mrw
   */
  
  #include <stdio.h>
--- 24,31 -----
   * change log:
   *	possible bug in ungetc(), fixed readone() to avoid - 2/19/88 - mrw
   *	massive design error, rewrote dump logic - 3/15/88 - mrw
+  *	stupid error causing overlay of s1 & s2 in readnode - 9/12/88 - mrw
+  *
   */
  
  #include <stdio.h>
**************
*** 89,95
  struct node *
  readnode()
  {
! 	char *s1, *s2;
  	register struct node *n1, *n2;
  	struct dependents *pd;
  
--- 91,97 -----
  struct node *
  readnode()
  {
! 	static char s1[MAXNAMELEN], s2[MAXNAMELEN];
  	register struct node *n1, *n2;
  	struct dependents *pd;
  
**************
*** 93,99
  	register struct node *n1, *n2;
  	struct dependents *pd;
  
! 	if ((s1 = readone()) != (char *)NULL) {
  		if ((n1 = findnode(s1)) == (struct node *)NULL) {
  			/* is a new node so build it */
  			n1 = (struct node *)xalloc(sizeof(struct node));
--- 95,101 -----
  	register struct node *n1, *n2;
  	struct dependents *pd;
  
! 	if (readone(s1) != (char *)NULL) {
  		if ((n1 = findnode(s1)) == (struct node *)NULL) {
  			/* is a new node so build it */
  			n1 = (struct node *)xalloc(sizeof(struct node));
**************
*** 107,113
  			n1->visited = 0;
  			linknode(n1);
  		}
! 		if ((s2 = readone()) != (char *)NULL) {
  			if ((n2 = findnode(s2)) == (struct node *)NULL) {
  				/* is a new node so build it */
  				n2 = (struct node *)xalloc(sizeof(struct node));
--- 109,115 -----
  			n1->visited = 0;
  			linknode(n1);
  		}
! 		if (readone(s2) != (char *)NULL) {
  			if ((n2 = findnode(s2)) == (struct node *)NULL) {
  				/* is a new node so build it */
  				n2 = (struct node *)xalloc(sizeof(struct node));
**************
*** 223,229
  		fprintf(stderr,"Error: %s - member queue overflow\n",progname);
  		exit(1);
  	}
! 	else
  		q[back] = t;
  }
  
--- 225,231 -----
  		fprintf(stderr,"Error: %s - member queue overflow\n",progname);
  		exit(1);
  	}
! 	else {
  		q[back] = t;
  	}
  }
**************
*** 225,230
  	}
  	else
  		q[back] = t;
  }
  
  char *
--- 227,233 -----
  	}
  	else {
  		q[back] = t;
+ 	}
  }
  
  char *
**************
*** 228,234
  }
  
  char *
! readone()
  {
  	register int c, n = 0;
  	static char name[MAXNAMELEN];
--- 231,238 -----
  }
  
  char *
! readone(str)
! char str[];	/* of MAXNAMELEN length */
  {
  	register int c, n = 0;
  
**************
*** 231,237
  readone()
  {
  	register int c, n = 0;
- 	static char name[MAXNAMELEN];
  
  	/* eat up leading spaces */
  	while ((c = getchar()) != EOF && isspace(c))
--- 235,240 -----
  char str[];	/* of MAXNAMELEN length */
  {
  	register int c, n = 0;
  
  	/* eat up leading spaces */
  	while ((c = getchar()) != EOF && isspace(c))
**************
*** 238,244
  		;
  
  	if (c != EOF) {
! 		name[n++] = c;	/* save into name first non blank */
  		while ((c = getchar()) != EOF && !isspace(c)) {
  			if (n < MAXNAMELEN)
  				name[n++] = c;
--- 241,247 -----
  		;
  
  	if (c != EOF) {
! 		str[n++] = c;	/* save into name first non blank */
  		while ((c = getchar()) != EOF && !isspace(c)) {
  			if (n < MAXNAMELEN)
  				str[n++] = c;
**************
*** 241,247
  		name[n++] = c;	/* save into name first non blank */
  		while ((c = getchar()) != EOF && !isspace(c)) {
  			if (n < MAXNAMELEN)
! 				name[n++] = c;
  		}
  		name[n] = '\0';
  		return (name);
--- 244,250 -----
  		str[n++] = c;	/* save into name first non blank */
  		while ((c = getchar()) != EOF && !isspace(c)) {
  			if (n < MAXNAMELEN)
! 				str[n++] = c;
  		}
  		str[n] = '\0';
  		return (str);
**************
*** 243,250
  			if (n < MAXNAMELEN)
  				name[n++] = c;
  		}
! 		name[n] = '\0';
! 		return (name);
  	}
  	else
  		return ((char *)NULL);
--- 246,253 -----
  			if (n < MAXNAMELEN)
  				str[n++] = c;
  		}
! 		str[n] = '\0';
! 		return (str);
  	}
  	else
  		return ((char *)NULL);
---------------------------end here---------------------------------------

Monty Walls
MIS Division, Tech. Support
Oklahoma Tax Commission
2501 N. Lincoln
OKC, OK, 73194