struct stat s;
struct replace_file *rf;
int fd;
+ int saved_errno = errno;
/* If FILE_NAME represents a special file, write to it directly
instead of trying to replace it. */
fd = open (file_name, O_WRONLY);
if (fd < 0)
{
+ saved_errno = errno;
msg (ME, _("Opening %s for writing: %s."),
- file_name, strerror (errno));
+ file_name, strerror (saved_errno));
+ errno = saved_errno;
return NULL;
}
*fp = fdopen (fd, mode);
if (*fp == NULL)
{
- msg (ME, _("Opening stream for %s: %s."),
- file_name, strerror (errno));
+ saved_errno = errno;
+ msg (ME, _("Opening stream for %s: %s."),
+ file_name, strerror (saved_errno));
close (fd);
+ errno = saved_errno;
return NULL;
}
{
msg (ME, _("Creating temporary file to replace %s: %s."),
rf->file_name, strerror (errno));
+ saved_errno = errno;
goto error;
}
{
msg (ME, _("Creating temporary file %s: %s."),
rf->tmp_name, strerror (errno));
+ saved_errno = errno;
goto error;
}
free (rf->tmp_name);
rf->tmp_name, strerror (errno));
close (fd);
unlink (rf->tmp_name);
+ saved_errno = errno;
goto error;
}
*fp = NULL;
if (tmp_name != NULL)
*tmp_name = NULL;
+ errno = saved_errno;
return NULL;
}