zipl: clean up temporary bootmap file in case of error

zipl creates a temp bootmap file to keep the original file in case of an
error. Delete this temp file in case of an error.

Signed-off-by: Stefan Haberland <sth@linux.ibm.com>
Reviewed-by: Philipp Rudo <prudo@linux.ibm.com>
Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
This commit is contained in:
Stefan Haberland
2019-11-20 15:30:12 +01:00
committed by Jan Höppner
parent 6f9337d101
commit 27a6409a4a
3 changed files with 14 additions and 3 deletions

View File

@@ -46,6 +46,7 @@ char* misc_make_path(char* dirname, char* filename);
int misc_temp_dev(dev_t dev, int blockdev, char** devno);
int misc_temp_dev_from_file(char* file, char** devno);
void misc_free_temp_dev(char* device);
void misc_free_temp_file(char *filename);
int misc_check_writable_directory(const char* directory);
int misc_check_readable_file(const char* filename);
int misc_check_writable_device(const char* devno, int blockdev, int chardev);

View File

@@ -1286,9 +1286,7 @@ bootmap_create(struct job_data *job, disk_blockptr_t *program_table,
break;
}
if (dry_run) {
if (remove(filename) == -1)
fprintf(stderr, "Warning: could not remove temporary "
"file %s!\n", filename);
misc_free_temp_file(filename);
} else if (job->id != job_dump_partition) {
/* Rename to final bootmap name */
mapname = misc_make_path(job->target.bootmap_dir,
@@ -1315,6 +1313,8 @@ out_disk_free_info:
disk_free_info(info);
out_close_fd:
close(fd);
if (job->id != job_dump_partition)
misc_free_temp_file(filename);
out_free_filename:
free(filename);
return -1;

View File

@@ -366,6 +366,16 @@ misc_free_temp_dev(char* device)
free(device);
}
/* Delete temporary bootmap file */
void
misc_free_temp_file(char *filename)
{
if (remove(filename)) {
fprintf(stderr,
"Warning: Could not remove temporary file %s: %s",
filename, strerror(errno));
}
}
/* Write COUNT bytes from memory at location DATA to the file identified by
* file descriptor FD. Return 0 when all bytes were successfully written,