diff options
author | Daniel Golle <daniel@makrotopia.org> | 2021-11-16 20:49:23 +0000 |
---|---|---|
committer | Daniel Golle <daniel@makrotopia.org> | 2021-11-16 21:52:36 +0000 |
commit | 77c02889177c43df8ebe07bce4d55b7f7358118f (patch) | |
tree | c7e865a50afd8bc5ad0313079e63d9450c9bb984 /libblkid-tiny/libblkid-tiny.c | |
parent | d3907445b7aa9cbde70d501bd68a5e38db90c6b2 (diff) | |
download | fstools-77c02889177c43df8ebe07bce4d55b7f7358118f.tar.gz |
fstools: fix a couple of minor code problems
Improve error handling and fix a resource leak inside an error path.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Diffstat (limited to 'libblkid-tiny/libblkid-tiny.c')
-rw-r--r-- | libblkid-tiny/libblkid-tiny.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/libblkid-tiny/libblkid-tiny.c b/libblkid-tiny/libblkid-tiny.c index 6e8cd81..8520f8a 100644 --- a/libblkid-tiny/libblkid-tiny.c +++ b/libblkid-tiny/libblkid-tiny.c @@ -87,11 +87,15 @@ unsigned char *blkid_probe_get_buffer(blkid_probe pr, memset(bf, 0, sizeof(*bf)); bf->data = ((unsigned char *)bf) + sizeof(*bf); - lseek(pr->fd, off, SEEK_SET); + if (lseek(pr->fd, off, SEEK_SET) < 0) { + fprintf(stderr, "failed to seek\n"); + free(bf); + return NULL; + } ret = read(pr->fd, bf->data, len); if (ret != len) { - fprintf(stderr, "faile to read blkid\n"); + fprintf(stderr, "failed to read blkid\n"); free(bf); return NULL; } @@ -212,10 +216,14 @@ int probe_block(char *block, struct blkid_struct_probe *pr) int off = (mag->kboff * 1024) + mag->sboff; char magic[32] = { 0 }; - lseek(pr->fd, off, SEEK_SET); - if (read(pr->fd, magic, mag->len) < 0) + if (lseek(pr->fd, off, SEEK_SET) < 0) { + close(pr->fd); return -1; - + } + if (read(pr->fd, magic, mag->len) < 0) { + close(pr->fd); + return -1; + } DEBUG("magic: %s %s %d\n", mag->magic, magic, mag->len); if (!memcmp(mag->magic, magic, mag->len)) break; |