/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * This source file is part of SableVM. * * * * See the file "LICENSE" for the copyright information and for * * the terms and conditions for copying, distribution and * * modification of this source file. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef SVM_ZIP_FILE_READER_H #define SVM_ZIP_FILE_READER_H /* Zip file reader return values. */ #define ZIP_FILE_FOUND 1 #define ZIP_FILE_NOT_FOUND 0 #define ZIP_FILE_ERROR (-1) /* * All these magic values are derived directly from specification * of ZIP file format available at * http://www.pkware.com/company/standards/appnote/ */ #define ZIP_COMPRESSION_STORED 0 #define ZIP_COMPRESSION_DEFLATED 8 #define ZIP_LOCAL_FILE_HEADER_SIZE 30 #define ZIP_LOCAL_FILE_MAGIC 0x50, 0x4b, 0x03, 0x04 #define ZIP_LOCAL_FILE_MIN_VER_OFFSET 4 #define ZIP_LOCAL_FILE_BIT_FLAG_OFFSET 6 #define ZIP_LOCAL_FILE_COMPRESSION_OFFSET 8 #define ZIP_LOCAL_FILE_MODIFICATION_TIME_OFFSET 10 #define ZIP_LOCAL_FILE_MODIFICATION_DATE_OFFSET 12 #define ZIP_LOCAL_FILE_CRC32_OFFSET 14 #define ZIP_LOCAL_FILE_COMP_SIZE_OFFSET 18 #define ZIP_LOCAL_FILE_UNCOMP_SIZE_OFFSET 22 #define ZIP_LOCAL_FILE_NAME_LEN_OFFSET 26 #define ZIP_LOCAL_FILE_EXTRA_FLD_LEN_OFFSET 28 #define ZIP_CENTRAL_DIR_ENTRY_SIZE 46 #define ZIP_CENTRAL_DIR_MAGIC 0x50, 0x4b, 0x01, 0x02 #define ZIP_CENTRAL_DIR_VERSION_MADE_BY_OFFSET 4 #define ZIP_CENTRAL_DIR_VERSION_NEEDED_OFFSET 6 #define ZIP_CENTRAL_DIR_FLAGS_OFFSET 8 #define ZIP_CENTRAL_DIR_COMPRESSION_OFFSET 10 #define ZIP_CENTRAL_DIR_MODIFICATION_TIME_OFFSET 12 #define ZIP_CENTRAL_DIR_MODIFICATION_DATE_OFFSET 14 #define ZIP_CENTRAL_DIR_CRC32_OFFSET 16 #define ZIP_CENTRAL_DIR_COMP_SIZE_OFFSET 20 #define ZIP_CENTRAL_DIR_UNCOMP_SIZE_OFFSET 24 #define ZIP_CENTRAL_DIR_FNAME_LEN_OFFSET 28 #define ZIP_CENTRAL_DIR_EXTRA_FLD_LEN_OFFSET 30 #define ZIP_CENTRAL_DIR_FILE_COMMENT_LEN_OFFSET 32 #define ZIP_CENTRAL_DIR_DISK_NUMBER_START_OFFSET 34 #define ZIP_CENTRAL_DIR_INTERNAL_FILE_ATTRIBUTES_OFFSET 36 #define ZIP_CENTRAL_DIR_EXTERNAL_FILE_ATTRIBUTES_OFFSET 38 #define ZIP_CENTRAL_DIR_LOCAL_HEADER_OFFSET_OFFSET 42 #define ZIP_END_CENTRAL_DIR_SIZE 22 #define ZIP_END_CENTRAL_DIR_MAGIC 0x50, 0x4b, 0x05, 0x06 #define ZIP_END_CENTRAL_DIR_DISK_NUMBER_OFFSET 4 #define ZIP_END_CENTRAL_DIR_DISK_NUMBER_START_OFFSET 6 #define ZIP_END_CENTRAL_DIR_NUMBER_OF_ENTRIES_ON_THIS_DISK_OFFSET 8 #define ZIP_END_CENTRAL_DIR_CENTRAL_ENTRIES_NO_OFFSET 10 #define ZIP_END_CENTRAL_DIR_SIZE_CENTRAL_DIR_OFFSET 12 #define ZIP_END_CENTRAL_DIR_CENTRAL_OFFSET 16 #define ZIP_END_CENTRAL_DIR_COMMENT_LENGTH_OFFSET 20 /* Types */ typedef struct _svmt_zip_file_struct _svmt_zip_file; typedef struct _svmt_zip_file_entry_struct _svmt_zip_file_entry; /* ---------------------------------------------------------------------- _svmt_zip_file_struct ---------------------------------------------------------------------- */ struct _svmt_zip_file_struct { char *name; _svmt_u32 file_len; _svmt_u8 *content; /* mmaped */ _svmt_u16 entries_no; _svmt_zip_file_entry *entries; }; /* ---------------------------------------------------------------------- _svmt_zip_file_entry_struct ---------------------------------------------------------------------- */ struct _svmt_zip_file_entry_struct { char *name; _svmt_u32 local_header_offset; _svmt_u32 size_compressed; _svmt_u32 size_uncompressed; _svmt_u32 compression_method; }; /* Prorotypes */ _svmt_zip_file* _svmf_zip_file_open (const char *); void _svmf_zip_file_destroy (_svmt_zip_file *); jint _svmf_zip_file_exists (_svmt_zip_file *, const char *); jint _svmf_zip_get_file_content (_svmt_u8 **, jint *, _svmt_zip_file *, const char *, jboolean *); #endif /* #define SVM_ZIP_FILE_READER_H */