rem: dash_found++;
add: dash_found = true;
context: set_fields (const char *fieldstr){  unsigned int initial = 1;	/* Value of first number in a range.  */  unsigned int value = 0;	/* If nonzero, a number being accumulated.  */  int dash_found = 0;		/* Nonzero if a '-' is found in this field.  */  int field_found = 0;		/* Non-zero if at least one field spec				   has been processed.  */  struct range_pair *rp;  unsigned int n_rp;  unsigned int n_rp_allocated;  unsigned int i;  n_rp = 0;  n_rp_allocated = 16;  rp = (struct range_pair *) xmalloc (n_rp_allocated * sizeof (*rp));  /* Collect and store in RP the range end points.     It also sets EOL_RANGE_START if appropriate.  */  for (;;)    {      if (*fieldstr == '-')	{	  /* Starting a range. */	  if (dash_found)	    FATAL_ERROR (_("invalid byte or field list"));	  dash_found++;	  fieldstr++;	  if (value)	    {	      initial = value;	      value = 0;	    }	  else	    initial = 1;	}      else if (*fieldstr == ',' || ISBLANK (*fieldstr) || *fieldstr == '\0')	{	  /* Ending the string, or this field/byte sublist. */	  if (dash_found)	    {	      dash_found = 0;	      /* A range.  Possibilites: -n, m-n, n-.		 In any case, `initial' contains the start of the range. */	      if (value == 0)		{		  /* `n-'.  From `initial' to end of line. */		  eol_range_start = initial;		  field_found = 1;		}	      else		{		  /* `m-n' or `-n' (1-n). */		  if (value < initial)		    FATAL_ERROR (_("invalid byte or field list"));		  /* Is there already a range going to end of line? */		  if (eol_range_start != 0)		    {		      /* Yes.  Is the new sequence already contained			 in the old one?  If so, no processing is			 necessary. */		      if (initial < eol_range_start)			{			  /* No, the new sequence starts before the			     old.  Does the old range going to end of line			     extend into the new range?  */			  if (eol_range_start <= value)			    {			      /* Yes.  Simply move the end of line marker. */			      eol_range_start = initial;			    }			  else			    {			      /* No.  A simple range, before and disjoint from				 the range going to end of line.  Fill it. */			      ADD_RANGE_PAIR (rp, initial, value);			    }			  /* In any case, some fields were selected. */			  field_found = 1;			}		    }		  else		    {		      /* There is no range going to end of line. */		      ADD_RANGE_PAIR (rp, initial, value);		      field_found = 1;		    }		  value = 0;		}	    }	  else if (value != 0)	    {	      /* A simple field number, not a range. */	      ADD_RANGE_PAIR (rp, value, value);	      value = 0;	      field_found = 1;	    }	  if (*fieldstr == '\0')	    {	      break;	    }	  fieldstr++;	}      else if (ISDIGIT (*fieldstr))	{	  /* FIXME: detect overflow?  */	  value = 10 * value + *fieldstr - '0';	  fieldstr++;	}      else	FATAL_ERROR (_("invalid byte or field list"));    }  max_range_endpoint = 0;  for (i = 0; i < n_rp; i++)    {      if (rp[i].hi > max_range_endpoint)	max_range_endpoint = rp[i].hi;    }  /* Allocate an array large enough so that it may be indexed by     the field numbers corresponding to all finite ranges     (i.e. `2-6' or `-4', but not `5-') in FIELDSTR.  */  printable_field = (int *) xmalloc ((max_range_endpoint + 1) * sizeof (int));  memset (printable_field, 0, (max_range_endpoint + 1) * sizeof (int));  /* Set the array entries corresponding to integers in the ranges of RP.  */  for (i = 0; i < n_rp; i++)    {      unsigned int j = rp[i].lo;      /* Mark the first position of field or range with a sentinel,	 but not if it's already part of another range.  */      if (j <= rp[i].hi && ! printable_field[j])	printable_field[j] = RANGE_START_SENTINEL;      for (++j; j <= rp[i].hi; j++)	{	  printable_field[j] = 1;	}    }  free (rp);  return field_found;}