/* * 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 #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