+ /* Register file for deletion. */
+ ll_push_head (&all_files, &rf->ll);
+ unblock_fatal_signals ();
+
+ return rf;
+
+ error:
+ unblock_fatal_signals ();
+ free_replace_file (rf);
+ *fd = -1;
+ errno = saved_errno;
+ return NULL;
+}
+
+struct replace_file *
+replace_file_start (const struct file_handle *fh, bool binary,
+ mode_t permissions, FILE **fp)
+{
+ struct replace_file *rf;
+ int fd;
+
+ /* Open fd. */
+ rf = replace_file_start_fd (fh, binary, permissions, &fd);
+ if (!rf)
+ goto error;
+