/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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. */ /** * Zip Support Header */ #if !defined(ZIPSUP_H) #define ZIPSUP_H #if defined(__cplusplus) extern "C" { #endif #include "hy2sie.h" #include <stdlib.h> #include <unistd.h> #include <memory.h> #include "zlib.h" typedef struct HyZipCachePool HyZipCachePool; HyZipCachePool * zipsup_GetZipCachePool(HyPortLibrary * portLib); #if defined(HY_LOCAL_ZLIB) #define HY_ZIP_DLL_NAME "z" #else #define HY_ZIP_DLL_NAME "hyzlib" #endif #define ZIP_INTERNAL_MAX 80 #define ZIP_CM_Reduced1 2 #define ZIP_Unknown 0 #define ZIP_GZIP 2 #define ZIP_ERR_OUT_OF_MEMORY -3 #define ZIP_ERR_FILE_CORRUPT -6 #define ZIP_ERR_INTERNAL_ERROR -11 #define ZIP_CM_Imploded 6 #define ZIP_CM_Reduced4 5 #define ZIP_CM_Shrunk 1 #define ZIP_CM_Reduced2 3 #define ZIP_ERR_FILE_READ_ERROR -1 #define ZIP_CentralHeader 0x2014B50 #define ZIP_ERR_FILE_CLOSE_ERROR -10 #define ZIP_ERR_BUFFER_TOO_SMALL -7 #define ZIP_CM_Reduced3 4 #define ZIP_CM_Deflated 8 #define ZIP_LocalHeader 0x4034B50 #define ZIP_CM_Tokenized 7 #define ZIP_PKZIP 1 #define ZIP_CM_Stored 0 #define ZIP_ERR_UNSUPPORTED_FILE_TYPE -5 #define ZIP_ERR_NO_MORE_ENTRIES -2 #define ZIP_CentralEnd 0x6054B50 #define ZIP_ERR_FILE_OPEN_ERROR -9 #define ZIP_ERR_UNKNOWN_FILE_TYPE -4 #define ZIP_ERR_ENTRY_NOT_FOUND -8 #define ZIP_DataDescriptor 0x8074B50 typedef struct HyZipCache { U_8 *zipFileName; IDATA zipFileSize; I_64 zipTimeStamp; IDATA startCentralDir; HyPortLibrary *portLib; void *cachePool; void *cachePoolEntry; } HyZipCache; typedef struct HyZipCentralEnd { U_16 diskNumber; U_16 dirStartDisk; U_16 thisDiskEntries; U_16 totalEntries; U_32 dirSize; U_32 dirOffset; U_16 commentLength; char _hypadding0012[2]; /* 2 bytes of automatic padding */ U_8 *comment; } HyZipCentralEnd; typedef struct HyZipDataDescriptor { U_32 crc32; U_32 compressedSize; U_32 uncompressedSize; } HyZipDataDescriptor; typedef struct HyZipEntry { U_8 *data; U_8 *filename; U_8 *extraField; U_8 *fileComment; I_32 dataPointer; I_32 filenamePointer; I_32 extraFieldPointer; I_32 fileCommentPointer; U_32 compressedSize; U_32 uncompressedSize; U_32 crc32; U_16 filenameLength; U_16 extraFieldLength; U_16 fileCommentLength; U_16 internalAttributes; U_16 versionCreated; U_16 versionNeeded; U_16 flags; U_16 compressionMethod; U_16 lastModTime; U_16 lastModDate; U_8 internalFilename[80]; } HyZipEntry; typedef struct HyZipFile { U_8 *filename; struct HyZipCache *cache; void *cachePool; I_32 fd; I_32 pointer; U_8 internalFilename[80]; U_8 type; char _hypadding0065[3]; /* 3 bytes of automatic padding */ } HyZipFile; #include "hymutex.h" extern MUTEX zip_GlobalMutex; #define jclmem_allocate_memory(env, byteCount) sieb_malloc(env, byteCount) #define jclmem_free_memory(env, pointer) sieb_free(env, pointer) /* HySourceZipSupport*/ extern HY_CFUNC I_32 zip_getZipEntryData PROTOTYPE ((HyPortLibrary * portLib, HyZipFile * zipFile, HyZipEntry * entry, U_8 * buffer, U_32 bufferSize)); extern HY_CFUNC I_32 zip_getZipEntryFromOffset PROTOTYPE ((HyPortLibrary * portLib, HyZipFile * zipFile, HyZipEntry * entry, IDATA offset)); extern HY_CFUNC I_32 zip_establishCache PROTOTYPE ((HyPortLibrary * portLib, HyZipFile * zipFile)); extern HY_CFUNC void zip_resetZipFile PROTOTYPE ((HyPortLibrary * portLib, HyZipFile * zipFile, IDATA * nextEntryPointer)); extern HY_CFUNC I_32 zip_getNextZipEntry PROTOTYPE ((HyPortLibrary * portLib, HyZipFile * zipFile, HyZipEntry * zipEntry, IDATA * nextEntryPointer)); extern HY_CFUNC I_32 zip_getZipEntry PROTOTYPE ((HyPortLibrary * portLib, HyZipFile * zipFile, HyZipEntry * entry, const char *filename, BOOLEAN findDirectory)); extern HY_CFUNC I_32 zip_getZipEntryExtraField PROTOTYPE ((HyPortLibrary * portLib, HyZipFile * zipFile, HyZipEntry * entry, U_8 * buffer, U_32 bufferSize)); extern HY_CFUNC void zip_initZipEntry PROTOTYPE ((HyPortLibrary * portLib, HyZipEntry * entry)); extern HY_CFUNC I_32 zip_openZipFile PROTOTYPE ((HyPortLibrary * portLib, char *filename, HyZipFile * zipFile, HyZipCachePool * cachePool)); extern HY_CFUNC void zip_freeZipEntry PROTOTYPE ((HyPortLibrary * portLib, HyZipEntry * entry)); struct HyZipFile; extern HY_CFUNC I_32 VMCALL zip_closeZipFile PROTOTYPE ((HyPortLibrary * portLib, struct HyZipFile * zipFile)); extern HY_CFUNC I_32 zip_getZipEntryComment PROTOTYPE ((HyPortLibrary * portLib, HyZipFile * zipFile, HyZipEntry * entry, U_8 * buffer, U_32 bufferSize)); /* HySourceZipCache*/ extern HY_CFUNC UDATA zipCache_findElement PROTOTYPE ((HyZipCache * zipCache, const char *elementName, BOOLEAN searchDirList)); extern HY_CFUNC void zipCache_kill PROTOTYPE ((HyZipCache * zipCache)); extern HY_CFUNC IDATA zipCache_enumGetDirName PROTOTYPE ((void *handle, char *nameBuf, UDATA nameBufSize)); extern HY_CFUNC HyZipCache *zipCache_new PROTOTYPE ((HyPortLibrary * portLib, char *zipName, IDATA zipNameLength)); extern HY_CFUNC IDATA zipCache_enumNew PROTOTYPE ((HyZipCache * zipCache, char *directoryName, void **handle)); extern HY_CFUNC IDATA zipCache_enumElement PROTOTYPE ((void *handle, char *nameBuf, UDATA nameBufSize, UDATA * offset)); extern HY_CFUNC void zipCache_enumKill PROTOTYPE ((void *handle)); extern HY_CFUNC BOOLEAN zipCache_addElement PROTOTYPE ((HyZipCache * zipCache, char *elementName, UDATA elementOffset)); /* HySourceZipCachePool*/ extern HY_CFUNC BOOLEAN zipCachePool_release PROTOTYPE ((HyZipCachePool * zcp, HyZipCache * zipCache)); extern HY_CFUNC void zipCachePool_kill PROTOTYPE ((HyZipCachePool * zcp)); extern HY_CFUNC HyZipCache *zipCachePool_findCache PROTOTYPE ((HyZipCachePool * zcp, char const *zipFileName, IDATA zipFileNameLength, IDATA zipFileSize, I_64 zipTimeStamp)); extern HY_CFUNC HyZipCachePool *zipCachePool_new PROTOTYPE ((HyPortLibrary * portLib)); extern HY_CFUNC BOOLEAN zipCachePool_addCache PROTOTYPE ((HyZipCachePool * zcp, HyZipCache * zipCache)); extern HY_CFUNC BOOLEAN zipCachePool_addRef PROTOTYPE ((HyZipCachePool * zcp, HyZipCache * zipCache)); #if defined(__cplusplus) } #endif #endif /* ZIPSUP_H */