blob: 13686250e1a4902d69f2e424a5a79b7530b54c63 [file] [log] [blame]
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef LIBBCC_ZIP_H
#define LIBBCC_ZIP_H
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
// Represents an opened zip archive.
// Only basic ZIP files are supported, in particular the following are not
// supported:
// - encryption
// - streaming
// - multi-part ZIP files
// - ZIP64
struct bcc_zip_archive;
// Carries information on name, compression method and data corresponding to
// a file in a zip archive.
struct bcc_zip_entry {
// Compression method as defined in pkzip spec. 0 means data is uncompressed.
uint16_t compression;
// Non-null terminated name of the file.
const char* name;
// Length of the file name.
uint16_t name_length;
// Pointer to the file data.
const void* data;
// Length of the file data.
uint32_t data_length;
// Offset of the file data within the archive.
uint32_t data_offset;
};
// Opens a zip archive. Returns NULL in case of an error.
struct bcc_zip_archive* bcc_zip_archive_open(const char* path);
// Closes a zip archive and releases resources.
void bcc_zip_archive_close(struct bcc_zip_archive* archive);
// Looks up data corresponding to a file in given zip archive.
int bcc_zip_archive_find_entry(struct bcc_zip_archive* archive,
const char* name, struct bcc_zip_entry* out);
int bcc_zip_archive_find_entry_at_offset(struct bcc_zip_archive* archive,
uint32_t offset,
struct bcc_zip_entry* out);
// Opens a zip archives and looks up entry within the archive.
// Provided path is interpreted as archive path followed by "!/"
// characters and name of the zip entry. This convention is used
// by Android tools.
struct bcc_zip_archive* bcc_zip_archive_open_and_find(
const char* path, struct bcc_zip_entry* out);
#ifdef __cplusplus
}
#endif
#endif