st->total += newstr->len - (*sep)->len;
strtabadd (struct Strtab *st, const char *str, size_t len){  struct Strent *newstr;  struct Strent **sep;  /* Allocate memory for the new string and its associated information.  */  newstr = newstring (st, str, len);  /* Search in the array for the place to insert the string.  If there     is no string with matching prefix and no string with matching     leading substring, create a new entry.  */  sep = searchstring (&st->root, newstr);  if (*sep != newstr)    {      /* This is not the same entry.  This means we have a prefix match.  */      if ((*sep)->len > newstr->len)	{	  /* We have a new substring.  This means we don't need the reverse	     string of this entry anymore.  */	  st->backp -= newstr->len;	  st->left += newstr->len;	  newstr->next = (*sep)->next;	  (*sep)->next = newstr;	}      else if ((*sep)->len != newstr->len)	{	  /* When we get here it means that the string we are about to	     add has a common prefix with a string we already have but	     it is longer.  In this case we have to put it first.  */	  newstr->next = *sep;	  *sep = newstr;	  st->total += newstr->len - (*sep)->len;	}      else	{	  /* We have an exact match.  Free the memory we allocated.  */	  st->left += st->backp - (char *) newstr;	  st->backp = (char *) newstr;	  newstr = *sep;	}    }  else    st->total += newstr->len;  return newstr;}