rem: static int hit_eof = 0;  assert (not_used == NULL);  if (hit_eof) return 0;
context: read_and_delete (unsigned char *buf, size_t size, Filter not_used){  size_t n_saved;  static int hit_eof = 0;  assert (not_used == NULL);  if (hit_eof)    return 0;  /* This enclosing do-while loop is to make sure that     we don't return zero (indicating EOF) when we've     just deleted all the characters in a buffer.  */  do    {      size_t i;      size_t nr = safe_read (0, (char *) buf, size);      if (nr == SAFE_READ_ERROR)	error (EXIT_FAILURE, errno, _("read error"));      if (nr == 0)	{	  hit_eof = 1;	  return 0;	}      /* This first loop may be a waste of code, but gives much         better performance when no characters are deleted in         the beginning of a buffer.  It just avoids the copying         of buf[i] into buf[n_saved] when it would be a NOP.  */      for (i = 0; i < nr && !in_delete_set[buf[i]]; i++)	/* empty */ ;      n_saved = i;      for (++i; i < nr; i++)	if (!in_delete_set[buf[i]])	  buf[n_saved++] = buf[i];    }  while (n_saved == 0);  return n_saved;}