[net.sources.bugs] areacode.c

ken@rochester.ARPA (SKY) (11/20/86)

Murphy strikes again. First fix is an off by one error. Second fix
allows the program to continue on other arguments after an invalid
code.

Thanks to all who told me about *grep. I use and like Unix, but I run
this program on a Z-80 machine.

	Ken

*** /tmp/areacode.c	Thu Nov 20 10:17:06 1986
--- areacode.c	Thu Nov 20 10:23:34 1986
***************
*** 183,189
  	register int	i, high, low, mid;
  	int		strncmp();
  
! 	low = 0; high = sizeof(areacode) / sizeof(areacode[0]);
  	while (low <= high)
  	{
  		mid = (low + high) / 2;

--- 183,189 -----
  	register int	i, high, low, mid;
  	int		strncmp();
  
! 	low = 0; high = sizeof(areacode) / sizeof(areacode[0]) - 1;
  	while (low <= high)
  	{
  		mid = (low + high) / 2;
***************
*** 205,211
  
  	if (!isdigit(code[0]) || !isdigit(code[1]) || !isdigit(code[2])
  		|| code[3] != '\0')
- 	{
  		printf("Area code %s is not a valid area code!\n", code);
  		exit(1);
  	}

--- 205,210 -----
  
  	if (!isdigit(code[0]) || !isdigit(code[1]) || !isdigit(code[2])
  		|| code[3] != '\0')
  		printf("Area code %s is not a valid area code!\n", code);
  	else
  		printf("Area code %s is %s.\n", code, where(code));
***************
*** 207,215
  		|| code[3] != '\0')
  	{
  		printf("Area code %s is not a valid area code!\n", code);
! 		exit(1);
! 	}
! 	printf("Area code %s is %s.\n", code, where(code));
  }
  
  main(argc, argv)

--- 206,213 -----
  	if (!isdigit(code[0]) || !isdigit(code[1]) || !isdigit(code[2])
  		|| code[3] != '\0')
  		printf("Area code %s is not a valid area code!\n", code);
! 	else
! 		printf("Area code %s is %s.\n", code, where(code));
  }
  
  main(argc, argv)