• Home
  • Raw
  • Download

Lines Matching refs:file

46 	int (*load)(struct kmod_file *file);
47 void (*unload)(struct kmod_file *file);
70 static int zstd_read_block(struct kmod_file *file, size_t block_size, in zstd_read_block() argument
81 ERR(file->ctx, "zstd: %m\n"); in zstd_read_block()
87 rdret = read(file->fd, (void *)input->src, block_size); in zstd_read_block()
90 ERR(file->ctx, "zstd: %m\n"); in zstd_read_block()
117 static int zstd_decompress_block(struct kmod_file *file, ZSTD_DStream *dstr, in zstd_decompress_block() argument
129 ERR(file->ctx, "zstd: %s\n", strerror(-ret)); in zstd_decompress_block()
136 ERR(file->ctx, "zstd: %s\n", ZSTD_getErrorName(dsret)); in zstd_decompress_block()
148 static int load_zstd(struct kmod_file *file) in load_zstd() argument
160 ERR(file->ctx, "zstd: Failed to create decompression stream\n"); in load_zstd()
167 ret = zstd_read_block(file, next_block_size, &zst_inb, in load_zstd()
174 ret = zstd_decompress_block(file, dstr, &zst_inb, &zst_outb, in load_zstd()
182 file->zstd_used = true; in load_zstd()
183 file->memory = zst_outb.dst; in load_zstd()
184 file->size = zst_outb.pos; in load_zstd()
194 static void unload_zstd(struct kmod_file *file) in unload_zstd() argument
196 if (!file->zstd_used) in unload_zstd()
198 free(file->memory); in unload_zstd()
205 static void xz_uncompress_belch(struct kmod_file *file, lzma_ret ret) in xz_uncompress_belch() argument
209 ERR(file->ctx, "xz: %s\n", strerror(ENOMEM)); in xz_uncompress_belch()
212 ERR(file->ctx, "xz: File format not recognized\n"); in xz_uncompress_belch()
215 ERR(file->ctx, "xz: Unsupported compression options\n"); in xz_uncompress_belch()
218 ERR(file->ctx, "xz: File is corrupt\n"); in xz_uncompress_belch()
221 ERR(file->ctx, "xz: Unexpected end of input\n"); in xz_uncompress_belch()
224 ERR(file->ctx, "xz: Internal error (bug)\n"); in xz_uncompress_belch()
229 static int xz_uncompress(lzma_stream *strm, struct kmod_file *file) in xz_uncompress() argument
243 ssize_t rdret = read(file->fd, in_buf, sizeof(in_buf)); in xz_uncompress()
270 xz_uncompress_belch(file, ret); in xz_uncompress()
275 file->xz_used = true; in xz_uncompress()
276 file->memory = p; in xz_uncompress()
277 file->size = total; in xz_uncompress()
284 static int load_xz(struct kmod_file *file) in load_xz() argument
292 ERR(file->ctx, "xz: %s\n", strerror(ENOMEM)); in load_xz()
295 ERR(file->ctx, "xz: Internal error (bug)\n"); in load_xz()
298 ret = xz_uncompress(&strm, file); in load_xz()
303 static void unload_xz(struct kmod_file *file) in unload_xz() argument
305 if (!file->xz_used) in unload_xz()
307 free(file->memory); in unload_xz()
315 static int load_zlib(struct kmod_file *file) in load_zlib() argument
322 file->gzf = gzdopen(file->fd, "rb"); in load_zlib()
323 if (file->gzf == NULL) in load_zlib()
325 file->fd = -1; /* now owned by gzf due gzdopen() */ in load_zlib()
340 r = gzread(file->gzf, p + did, total - did); in load_zlib()
345 const char *gz_errmsg = gzerror(file->gzf, &gzerr); in load_zlib()
347 ERR(file->ctx, "gzip: %s\n", gz_errmsg); in load_zlib()
356 file->memory = p; in load_zlib()
357 file->size = did; in load_zlib()
362 gzclose(file->gzf); in load_zlib()
366 static void unload_zlib(struct kmod_file *file) in unload_zlib() argument
368 if (file->gzf == NULL) in unload_zlib()
370 free(file->memory); in unload_zlib()
371 gzclose(file->gzf); /* closes file->fd */ in unload_zlib()
394 static int load_reg(struct kmod_file *file) in load_reg() argument
398 if (fstat(file->fd, &st) < 0) in load_reg()
401 file->size = st.st_size; in load_reg()
402 file->memory = mmap(NULL, file->size, PROT_READ, MAP_PRIVATE, in load_reg()
403 file->fd, 0); in load_reg()
404 if (file->memory == MAP_FAILED) in load_reg()
406 file->direct = true; in load_reg()
410 static void unload_reg(struct kmod_file *file) in unload_reg() argument
412 munmap(file->memory, file->size); in unload_reg()
419 struct kmod_elf *kmod_file_get_elf(struct kmod_file *file) in kmod_file_get_elf() argument
421 if (file->elf) in kmod_file_get_elf()
422 return file->elf; in kmod_file_get_elf()
424 file->elf = kmod_elf_new(file->memory, file->size); in kmod_file_get_elf()
425 return file->elf; in kmod_file_get_elf()
431 struct kmod_file *file = calloc(1, sizeof(struct kmod_file)); in kmod_file_open() local
436 if (file == NULL) in kmod_file_open()
439 file->fd = open(filename, O_RDONLY|O_CLOEXEC); in kmod_file_open()
440 if (file->fd < 0) { in kmod_file_open()
450 file->direct = false; in kmod_file_open()
459 sz = read_str_safe(file->fd, buf, magic_size_max + 1); in kmod_file_open()
460 lseek(file->fd, 0, SEEK_SET); in kmod_file_open()
474 file->ops = &itr->ops; in kmod_file_open()
477 if (file->ops == NULL) in kmod_file_open()
478 file->ops = &reg_ops; in kmod_file_open()
480 err = file->ops->load(file); in kmod_file_open()
481 file->ctx = ctx; in kmod_file_open()
484 if (file->fd >= 0) in kmod_file_open()
485 close(file->fd); in kmod_file_open()
486 free(file); in kmod_file_open()
491 return file; in kmod_file_open()
494 void *kmod_file_get_contents(const struct kmod_file *file) in kmod_file_get_contents() argument
496 return file->memory; in kmod_file_get_contents()
499 off_t kmod_file_get_size(const struct kmod_file *file) in kmod_file_get_size() argument
501 return file->size; in kmod_file_get_size()
504 bool kmod_file_get_direct(const struct kmod_file *file) in kmod_file_get_direct() argument
506 return file->direct; in kmod_file_get_direct()
509 int kmod_file_get_fd(const struct kmod_file *file) in kmod_file_get_fd() argument
511 return file->fd; in kmod_file_get_fd()
514 void kmod_file_unref(struct kmod_file *file) in kmod_file_unref() argument
516 if (file->elf) in kmod_file_unref()
517 kmod_elf_unref(file->elf); in kmod_file_unref()
519 file->ops->unload(file); in kmod_file_unref()
520 if (file->fd >= 0) in kmod_file_unref()
521 close(file->fd); in kmod_file_unref()
522 free(file); in kmod_file_unref()