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));
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);
return NULL;
}
rf->tmp_name = xasprintf ("%s.tmpXXXXXX", file_name);
if (gen_tempname (rf->tmp_name, 0, 0600, GT_NOCREATE) < 0)
{
+ saved_errno = errno;
msg (ME, _("Creating temporary file to replace %s: %s."),
- rf->file_name, strerror (errno));
+ rf->file_name, strerror (saved_errno));
goto error;
}
break;
if (errno != EEXIST)
{
+ saved_errno = errno;
msg (ME, _("Creating temporary file %s: %s."),
- rf->tmp_name, strerror (errno));
+ rf->tmp_name, strerror (saved_errno));
goto error;
}
free (rf->tmp_name);
*fp = fdopen (fd, mode);
if (*fp == NULL)
{
+ saved_errno = errno;
msg (ME, _("Opening stream for temporary file %s: %s."),
- rf->tmp_name, strerror (errno));
+ rf->tmp_name, strerror (saved_errno));
close (fd);
unlink (rf->tmp_name);
goto error;
*fp = NULL;
if (tmp_name != NULL)
*tmp_name = NULL;
+ errno = saved_errno;
return NULL;
}
/* We don't free_replace_file(RF) because calling free is unsafe
from an asynchronous signal handler. */
unlink (rf->tmp_name);
- fflush (stdout);
}
unblock_fatal_signals ();
}