blob: b81c2769a92f6540d5d22496cffa0bd8e96ed5db [file]
/*
* 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 "hyport.h"
#include "vmizip.h"
#if defined(HY_LOCAL_ZLIB)
#define HY_ZIP_DLL_NAME "z"
#else
#define HY_ZIP_DLL_NAME "hyzlib"
#endif
typedef struct HyZipCachePool HyZipCachePool;
#define ZIP_CentralEnd 0x6054B50
#define ZIP_CentralHeader 0x2014B50
#define ZIP_LocalHeader 0x4034B50
#define ZIP_DataDescriptor 0x8074B50
#define ZIP_INTERNAL_MAX 80
#define ZIP_Unknown 0
#define ZIP_PKZIP 1
typedef struct HyZipCache
{
U_8 *zipFileName;
IDATA zipFileSize;
I_64 zipTimeStamp;
IDATA startCentralDir;
struct 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;
/* HySourceZipSupport*/
extern HY_CFUNC I_32 zip_getZipEntryData
PROTOTYPE ((HyPortLibrary * portLib, VMIZipFile * zipFile,
VMIZipEntry * entry, U_8 * buffer, U_32 bufferSize));
extern HY_CFUNC I_32 zip_getZipEntryFromOffset
PROTOTYPE ((HyPortLibrary * portLib, VMIZipFile * zipFile,
VMIZipEntry * entry, IDATA offset));
extern HY_CFUNC I_32 zip_establishCache
PROTOTYPE ((HyPortLibrary * portLib, VMIZipFile * zipFile));
extern HY_CFUNC void zip_resetZipFile
PROTOTYPE ((HyPortLibrary * portLib, VMIZipFile * zipFile,
IDATA * nextEntryPointer));
extern HY_CFUNC I_32 zip_getNextZipEntry
PROTOTYPE ((HyPortLibrary * portLib, VMIZipFile * zipFile,
VMIZipEntry * zipEntry, IDATA * nextEntryPointer));
extern HY_CFUNC I_32 zip_getZipEntry
PROTOTYPE ((HyPortLibrary * portLib, VMIZipFile * zipFile,
VMIZipEntry * entry, const char *filename,
BOOLEAN findDirectory));
extern HY_CFUNC I_32 zip_getZipEntryExtraField
PROTOTYPE ((HyPortLibrary * portLib, VMIZipFile * zipFile,
VMIZipEntry * entry, U_8 * buffer, U_32 bufferSize));
extern HY_CFUNC I_32 zip_getZipEntryRawData
PROTOTYPE((HyPortLibrary * portLib, VMIZipFile * zipFile, VMIZipEntry * entry,
U_8 * buffer, U_32 bufferSize, U_32 offset));
extern HY_CFUNC void zip_initZipEntry
PROTOTYPE ((HyPortLibrary * portLib, VMIZipEntry * entry));
extern HY_CFUNC I_32 zip_openZipFile
PROTOTYPE ((HyPortLibrary * portLib, char *filename, VMIZipFile * zipFile,
HyZipCachePool * cachePool));
extern HY_CFUNC void zip_freeZipEntry
PROTOTYPE ((HyPortLibrary * portLib, VMIZipEntry * entry));
struct VMIZipFile;
extern HY_CFUNC I_32 VMCALL zip_closeZipFile
PROTOTYPE ((HyPortLibrary * portLib, struct VMIZipFile * zipFile));
extern HY_CFUNC I_32 zip_getZipEntryComment
PROTOTYPE ((HyPortLibrary * portLib, VMIZipFile * zipFile,
VMIZipEntry * 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, IDATA zipFileSize, I_64 zipTimeStamp, IDATA startCentralDir));
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));
extern HY_CFUNC IDATA zipCache_getStartCentralDir
PROTOTYPE ((HyZipCache *zipCache));
extern HY_CFUNC void zipCache_invalidateCache
PROTOTYPE ((HyZipCache *zipCache));
/* 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 */