Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e8621534 authored by Kenny Root's avatar Kenny Root Committed by Android (Google) Code Review
Browse files

Merge "ZipUtilsRO rewrite based on Dalvik Zip rewrite" into kraken

parents 2a2174a7 68246dce
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -47,8 +47,8 @@ extern ZipEntryCRO ZipFileCRO_findEntryByName(ZipFileCRO zip,
        const char* fileName);

extern bool ZipFileCRO_getEntryInfo(ZipFileCRO zip, ZipEntryCRO entry,
        int* pMethod, long* pUncompLen,
        long* pCompLen, off_t* pOffset, long* pModWhen, long* pCrc32);
        int* pMethod, size_t* pUncompLen,
        size_t* pCompLen, off_t* pOffset, long* pModWhen, long* pCrc32);

extern bool ZipFileCRO_uncompressEntry(ZipFileCRO zip, ZipEntryCRO entry, int fd);

+25 −8
Original line number Diff line number Diff line
@@ -58,14 +58,19 @@ typedef void* ZipEntryRO;
class ZipFileRO {
public:
    ZipFileRO()
        : mFd(-1), mFileMap(NULL), mHashTableSize(-1), mHashTable(NULL)
        : mFd(-1), mFileName(NULL), mFileLength(-1),
          mDirectoryMap(NULL),
          mNumEntries(-1), mDirectoryOffset(-1),
          mHashTableSize(-1), mHashTable(NULL)
        {}
    ~ZipFileRO() {
        free(mHashTable);
        if (mFileMap)
            mFileMap->release();
        if (mDirectoryMap)
            mDirectoryMap->release();
        if (mFd >= 0)
            close(mFd);
        if (mFileName)
            free(mFileName);
    }

    /*
@@ -118,8 +123,8 @@ public:
     * Returns "false" if "entry" is bogus or if the data in the Zip file
     * appears to be bad.
     */
    bool getEntryInfo(ZipEntryRO entry, int* pMethod, long* pUncompLen,
        long* pCompLen, off_t* pOffset, long* pModWhen, long* pCrc32) const;
    bool getEntryInfo(ZipEntryRO entry, int* pMethod, size_t* pUncompLen,
        size_t* pCompLen, off_t* pOffset, long* pModWhen, long* pCrc32) const;

    /*
     * Create a new FileMap object that maps a subset of the archive.  For
@@ -155,13 +160,13 @@ public:
     * Utility function: uncompress deflated data, buffer to buffer.
     */
    static bool inflateBuffer(void* outBuf, const void* inBuf,
        long uncompLen, long compLen);
        size_t uncompLen, size_t compLen);

    /*
     * Utility function: uncompress deflated data, buffer to fd.
     */
    static bool inflateBuffer(int fd, const void* inBuf,
        long uncompLen, long compLen);
        size_t uncompLen, size_t compLen);

    /*
     * Some basic functions for raw data manipulation.  "LE" means
@@ -179,6 +184,9 @@ private:
    ZipFileRO(const ZipFileRO& src);
    ZipFileRO& operator=(const ZipFileRO& src);

    /* locate and parse the central directory */
    bool mapCentralDirectory(void);

    /* parse the archive, prepping internal structures */
    bool parseZipArchive(void);

@@ -203,12 +211,21 @@ private:
    /* open Zip archive */
    int         mFd;

    /* zip file name */
    char*       mFileName;

    /* length of file */
    size_t      mFileLength;

    /* mapped file */
    FileMap*    mFileMap;
    FileMap*    mDirectoryMap;

    /* number of entries in the Zip archive */
    int         mNumEntries;

    /* CD directory offset in the Zip archive */
    off_t       mDirectoryOffset;

    /*
     * We know how many entries are in the Zip archive, so we have a
     * fixed-size hash table.  We probe for an empty slot.
+1 −1
Original line number Diff line number Diff line
@@ -824,7 +824,7 @@ Asset* AssetManager::openAssetFromZipLocked(const ZipFileRO* pZipFile,

    // TODO: look for previously-created shared memory slice?
    int method;
    long uncompressedLen;
    size_t uncompressedLen;

    //printf("USING Zip '%s'\n", pEntry->getFileName());

+2 −2
Original line number Diff line number Diff line
@@ -39,8 +39,8 @@ ZipEntryCRO ZipFileCRO_findEntryByName(ZipFileCRO zipToken,
}

bool ZipFileCRO_getEntryInfo(ZipFileCRO zipToken, ZipEntryRO entryToken,
        int* pMethod, long* pUncompLen,
        long* pCompLen, off_t* pOffset, long* pModWhen, long* pCrc32) {
        int* pMethod, size_t* pUncompLen,
        size_t* pCompLen, off_t* pOffset, long* pModWhen, long* pCrc32) {
    ZipFileRO* zip = (ZipFileRO*)zipToken;
    ZipEntryRO entry = (ZipEntryRO)entryToken;
    return zip->getEntryInfo(entry, pMethod, pUncompLen, pCompLen, pOffset,
+296 −166

File changed.

Preview size limit exceeded, changes collapsed.