rem: return 1;
add: errno = e; return -1; } if (fclose (utmp) != 0) { int e = errno; free (buf); errno = e; return -1;
context: read_utmp (const char *filename, int *n_entries, STRUCT_UTMP **utmp_buf){  FILE *utmp;  struct stat file_stats;  size_t n_read;  size_t size;  STRUCT_UTMP *buf;  utmp = fopen (filename, "r");  if (utmp == NULL)    return 1;  fstat (fileno (utmp), &file_stats);  size = file_stats.st_size;  if (size > 0)    buf = (STRUCT_UTMP *) xmalloc (size);  else    {      fclose (utmp);      return 1;    }  /* Use < instead of != in case the utmp just grew.  */  n_read = fread (buf, 1, size, utmp);  if (ferror (utmp) || fclose (utmp) == EOF      || n_read < size)    return 1;  *n_entries = size / sizeof (STRUCT_UTMP);  *utmp_buf = buf;  return 0;}