rem: fail = 1;
add: ok = false;
context: buf_init_from_stdin (Buf *x, int eol_byte){  int last_byte_is_eol_byte = 1;  int fail = 0;#define OBS (&(x->obs))  obstack_init (OBS);  while (1)    {      char *buf = (char *) malloc (BUFFER_SIZE);      int bytes_read;      if (buf == NULL)	{	  /* Fall back on the code that relies on a temporary file.	     Write all buffers to that file and free them.  */	  /* FIXME */	  fail = 1;	  break;	}      bytes_read = full_read (STDIN_FILENO, buf, BUFFER_SIZE);      if (bytes_read < 0)	error (EXIT_FAILURE, errno, _("read error"));      {	struct B_pair bp;	bp.start = buf;	bp.one_past_end = buf + bytes_read;	obstack_grow (OBS, &bp, sizeof (bp));      }      if (bytes_read > 0)	last_byte_is_eol_byte = (buf[bytes_read - 1] == eol_byte);      if (bytes_read < BUFFER_SIZE)	break;    }  if (!fail)    {      /* If the file was non-empty and lacked an EOL_BYTE at its end,	 then add a buffer containing just that one byte.  */      if (!last_byte_is_eol_byte)	{	  char *buf = malloc (1);	  if (buf == NULL)	    {	      /* FIXME: just like above */	      fail = 1;	    }	  else	    {	      struct B_pair bp;	      *buf = eol_byte;	      bp.start = buf;	      bp.one_past_end = buf + 1;	      obstack_grow (OBS, &bp, sizeof (bp));	    }	}    }  x->n_bufs = obstack_object_size (OBS) / sizeof (x->p[0]);  x->p = (struct B_pair *) obstack_finish (OBS);  /* If there are two or more buffers and the last buffer is empty,     then free the last one and decrement the buffer count.  */  if (x->n_bufs >= 2      && x->p[x->n_bufs - 1].start == x->p[x->n_bufs - 1].one_past_end)    free (x->p[--(x->n_bufs)].start);  return fail;}