mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-29 14:05:19 +08:00
1eebcb6063
This change implements support for reading zip archives, including opening an archive, finding an entry based on its path and name in it, and closing it. The code was copied from https://github.com/iovisor/bcc/pull/4440, which implements similar functionality for bcc. The author confirmed that he is fine with this usage and the corresponding relicensing. I adjusted it to adhere to libbpf coding standards. Signed-off-by: Daniel Müller <deso@posteo.net> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Acked-by: Michał Gregorczyk <michalgr@meta.com> Link: https://lore.kernel.org/bpf/20230301212308.1839139-2-deso@posteo.net
48 lines
1.2 KiB
C
48 lines
1.2 KiB
C
/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */
|
|
|
|
#ifndef __LIBBPF_ZIP_H
|
|
#define __LIBBPF_ZIP_H
|
|
|
|
#include <linux/types.h>
|
|
|
|
/* Represents an open zip archive.
|
|
* Only basic ZIP files are supported, in particular the following are not
|
|
* supported:
|
|
* - encryption
|
|
* - streaming
|
|
* - multi-part ZIP files
|
|
* - ZIP64
|
|
*/
|
|
struct zip_archive;
|
|
|
|
/* Carries information on name, compression method, and data corresponding to a
|
|
* file in a zip archive.
|
|
*/
|
|
struct zip_entry {
|
|
/* Compression method as defined in pkzip spec. 0 means data is uncompressed. */
|
|
__u16 compression;
|
|
|
|
/* Non-null terminated name of the file. */
|
|
const char *name;
|
|
/* Length of the file name. */
|
|
__u16 name_length;
|
|
|
|
/* Pointer to the file data. */
|
|
const void *data;
|
|
/* Length of the file data. */
|
|
__u32 data_length;
|
|
/* Offset of the file data within the archive. */
|
|
__u32 data_offset;
|
|
};
|
|
|
|
/* Open a zip archive. Returns NULL in case of an error. */
|
|
struct zip_archive *zip_archive_open(const char *path);
|
|
|
|
/* Close a zip archive and release resources. */
|
|
void zip_archive_close(struct zip_archive *archive);
|
|
|
|
/* Look up an entry corresponding to a file in given zip archive. */
|
|
int zip_archive_find_entry(struct zip_archive *archive, const char *name, struct zip_entry *out);
|
|
|
|
#endif
|