blob: 67a2eda2c62eb9740a2d388169c514b6136efd3a [file] [log] [blame]
/*
* 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 */