@@ -410,41 +410,40 @@ struct kmod_file *kmod_file_open(const struct kmod_ctx *ctx,
{
struct kmod_file *file = calloc(1, sizeof(struct kmod_file));
const struct comp_type *itr;
- int err = 0;
+ char buf[7];
+ ssize_t sz;
if (file == NULL)
return NULL;
file->fd = open(filename, O_RDONLY|O_CLOEXEC);
if (file->fd < 0) {
- err = -errno;
- goto error;
+ free(file);
+ return NULL;
}
- {
- char buf[7];
- ssize_t sz;
-
- assert_cc(sizeof(magic_zstd) < sizeof(buf));
- assert_cc(sizeof(magic_xz) < sizeof(buf));
- assert_cc(sizeof(magic_zlib) < sizeof(buf));
-
- sz = read_str_safe(file->fd, buf, sizeof(buf));
- lseek(file->fd, 0, SEEK_SET);
- if (sz != (sizeof(buf) - 1)) {
- if (sz < 0)
- err = sz;
- else
- err = -EINVAL;
- goto error;
- }
+ assert_cc(sizeof(magic_zstd) < sizeof(buf));
+ assert_cc(sizeof(magic_xz) < sizeof(buf));
+ assert_cc(sizeof(magic_zlib) < sizeof(buf));
- for (itr = comp_types; itr->load != NULL; itr++) {
- if (memcmp(buf, itr->magic_bytes, itr->magic_size) == 0) {
- file->load = itr->load;
- file->compression = itr->compression;
- break;
- }
+ sz = read_str_safe(file->fd, buf, sizeof(buf));
+ lseek(file->fd, 0, SEEK_SET);
+ if (sz != (sizeof(buf) - 1)) {
+ if (sz < 0)
+ errno = -sz;
+ else
+ errno = EINVAL;
+
+ close(file->fd);
+ free(file);
+ return NULL;
+ }
+
+ for (itr = comp_types; itr->load != NULL; itr++) {
+ if (memcmp(buf, itr->magic_bytes, itr->magic_size) == 0) {
+ file->load = itr->load;
+ file->compression = itr->compression;
+ break;
}
}
@@ -455,15 +454,6 @@ struct kmod_file *kmod_file_open(const struct kmod_ctx *ctx,
file->ctx = ctx;
-error:
- if (err < 0) {
- if (file->fd >= 0)
- close(file->fd);
- free(file);
- errno = -err;
- return NULL;
- }
-
return file;
}