rem: int bytes_read, i; int ret = 0;
add: ssize_t bytes_read; int i; bool ok = true;
context: tee (int nfiles, const char **files){  FILE **descriptors;  char buffer[BUFSIZ];  int bytes_read, i;  int ret = 0;  const char *mode_string = (append ? "a" : "w");  descriptors = (FILE **) xmalloc ((nfiles + 1) * sizeof (descriptors[0]));  /* Move all the names `up' one in the argv array to make room for     the entry for standard output.  This writes into argv[argc].  */  for (i = nfiles; i >= 1; i--)    files[i] = files[i - 1];  SET_BINARY2 (0, 1);  /* In the array of NFILES + 1 descriptors, make     the first one correspond to standard output.   */  descriptors[0] = stdout;  files[0] = _("standard output");  SETVBUF (stdout, NULL, _IONBF, 0);  for (i = 1; i <= nfiles; i++)    {      descriptors[i] = fopen (files[i], mode_string);      if (descriptors[i] == NULL)	{	  error (0, errno, "%s", files[i]);	  ret = 1;	}      else	{	  SETVBUF (descriptors[i], NULL, _IONBF, 0);	  SET_BINARY (fileno (descriptors[i]));	}    }  while (1)    {      bytes_read = read (0, buffer, sizeof buffer);#ifdef EINTR      if (bytes_read < 0 && errno == EINTR)        continue;#endif      if (bytes_read <= 0)	break;      /* Write to all NFILES + 1 descriptors.	 Standard output is the first one.  */      for (i = 0; i <= nfiles; i++)	{	  if (descriptors[i] != NULL)	    fwrite (buffer, bytes_read, 1, descriptors[i]);	}    }  if (bytes_read == -1)    {      error (0, errno, _("read error"));      ret = 1;    }  /* Close the files, but not standard output.  */  for (i = 1; i <= nfiles; i++)    if (descriptors[i] != NULL	&& (ferror (descriptors[i]) || fclose (descriptors[i]) == EOF))      {	error (0, errno, "%s", files[i]);	ret = 1;      }  free (descriptors);  return ret;}