summaryrefslogtreecommitdiffstats
path: root/disk-utils/sfdisk.c
diff options
context:
space:
mode:
authorKarel Zak2016-10-04 16:08:55 +0200
committerKarel Zak2016-10-04 16:08:55 +0200
commit2d1fa4fdc3302b50f0263604a46e00c7b88ecc24 (patch)
tree8ba342f3d9171efd93c9446c3ca1492dc3a695b4 /disk-utils/sfdisk.c
parentsfdisk: free before going out of scope [coverity scan] (diff)
downloadkernel-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.c17
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)