diff options
author | Karel Zak | 2016-10-04 16:08:55 +0200 |
---|---|---|
committer | Karel Zak | 2016-10-04 16:08:55 +0200 |
commit | 2d1fa4fdc3302b50f0263604a46e00c7b88ecc24 (patch) | |
tree | 8ba342f3d9171efd93c9446c3ca1492dc3a695b4 /disk-utils/sfdisk.c | |
parent | sfdisk: free before going out of scope [coverity scan] (diff) | |
download | kernel-qcow2-util-linux-2d1fa4fdc3302b50f0263604a46e00c7b88ecc24.tar.gz kernel-qcow2-util-linux-2d1fa4fdc3302b50f0263604a46e00c7b88ecc24.tar.xz kernel-qcow2-util-linux-2d1fa4fdc3302b50f0263604a46e00c7b88ecc24.zip |
sfdisk: cleanup before going out of scope [coverity scan]
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'disk-utils/sfdisk.c')
-rw-r--r-- | disk-utils/sfdisk.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/disk-utils/sfdisk.c b/disk-utils/sfdisk.c index d8d1a8762..52f2a6d92 100644 --- a/disk-utils/sfdisk.c +++ b/disk-utils/sfdisk.c @@ -365,13 +365,13 @@ static void backup_partition_table(struct sfdisk *sf, const char *devname) static int move_partition_data(struct sfdisk *sf, size_t partno, struct fdisk_partition *orig_pa) { struct fdisk_partition *pa = get_partition(sf->cxt, partno); - char *devname, *typescript; - FILE *f; + char *devname = NULL, *typescript = NULL, *buf = NULL; + FILE *f = NULL; int ok = 0, fd, backward = 0; fdisk_sector_t nsectors, from, to, step, i; size_t ss, step_bytes, cc; uintmax_t src, dst; - char *buf; + int errsv; assert(sf->movedata); @@ -519,11 +519,18 @@ static int move_partition_data(struct sfdisk *sf, size_t partno, struct fdisk_pa free(buf); free(devname); free(typescript); + return 0; fail: + errsv = -errno; warn(_("%s: failed to move data"), devname); - fclose(f); - return -errno; + if (f) + fclose(f); + free(buf); + free(devname); + free(typescript); + + return errsv; } static int write_changes(struct sfdisk *sf) |