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

Commit 0f61c7dc authored by Yusuke Sato's avatar Yusuke Sato Committed by Android (Google) Code Review
Browse files

Merge "Let findSupportedAbi and hasRenderscriptBitcode scan only relevant files" into mnc-dev

parents 1979dd63 34fe3df8
Loading
Loading
Loading
Loading
+4 −12
Original line number Diff line number Diff line
@@ -48,7 +48,6 @@
#define LIB_SUFFIX_LEN (sizeof(LIB_SUFFIX) - 1)

#define RS_BITCODE_SUFFIX ".bc"
#define RS_BITCODE_SUFFIX_LEN (sizeof(RS_BITCODE_SUFFIX) -1)

#define GDBSERVER "gdbserver"
#define GDBSERVER_LEN (sizeof(GDBSERVER) - 1)
@@ -322,7 +321,8 @@ private:
public:
    static NativeLibrariesIterator* create(ZipFileRO* zipFile) {
        void* cookie = NULL;
        if (!zipFile->startIteration(&cookie)) {
        // Do not specify a suffix to find both .so files and gdbserver.
        if (!zipFile->startIteration(&cookie, APK_LIB, NULL /* suffix */)) {
            return NULL;
        }

@@ -337,11 +337,6 @@ public:
                continue;
            }

            // Make sure we're in the lib directory of the ZIP.
            if (strncmp(fileName, APK_LIB, APK_LIB_LEN)) {
                continue;
            }

            // Make sure the filename is at least to the minimum library name size.
            const size_t fileNameLen = strlen(fileName);
            static const size_t minLength = APK_LIB_LEN + 2 + LIB_PREFIX_LEN + 1 + LIB_SUFFIX_LEN;
@@ -529,7 +524,7 @@ com_android_internal_content_NativeLibraryHelper_hasRenderscriptBitcode(JNIEnv *
        jlong apkHandle) {
    ZipFileRO* zipFile = reinterpret_cast<ZipFileRO*>(apkHandle);
    void* cookie = NULL;
    if (!zipFile->startIteration(&cookie)) {
    if (!zipFile->startIteration(&cookie, NULL /* prefix */, RS_BITCODE_SUFFIX)) {
        return APK_SCAN_ERROR;
    }

@@ -539,12 +534,9 @@ com_android_internal_content_NativeLibraryHelper_hasRenderscriptBitcode(JNIEnv *
        if (zipFile->getEntryFileName(next, fileName, sizeof(fileName))) {
            continue;
        }

        const size_t fileNameLen = strlen(fileName);
        const char* lastSlash = strrchr(fileName, '/');
        const char* baseName = (lastSlash == NULL) ? fileName : fileName + 1;
        if (!strncmp(fileName + fileNameLen - RS_BITCODE_SUFFIX_LEN, RS_BITCODE_SUFFIX,
                     RS_BITCODE_SUFFIX_LEN) && isFilenameSafe(baseName)) {
        if (isFilenameSafe(baseName)) {
            zipFile->endIteration(cookie);
            return BITCODE_PRESENT;
        }
+1 −0
Original line number Diff line number Diff line
@@ -91,6 +91,7 @@ public:
     * a matching call to endIteration with the same cookie.
     */
    bool startIteration(void** cookie);
    bool startIteration(void** cookie, const char* prefix, const char* suffix);

    /**
     * Return the next entry in iteration order, or NULL if there are no more
+10 −2
Original line number Diff line number Diff line
@@ -126,10 +126,18 @@ bool ZipFileRO::getEntryInfo(ZipEntryRO entry, uint16_t* pMethod,
    return true;
}

bool ZipFileRO::startIteration(void** cookie)
bool ZipFileRO::startIteration(void** cookie) {
  return startIteration(cookie, NULL, NULL);
}

bool ZipFileRO::startIteration(void** cookie, const char* prefix, const char* suffix)
{
    _ZipEntryRO* ze = new _ZipEntryRO;
    int32_t error = StartIteration(mHandle, &(ze->cookie), NULL /* prefix */);
    ZipEntryName pe(prefix ? prefix : "");
    ZipEntryName se(suffix ? suffix : "");
    int32_t error = StartIteration(mHandle, &(ze->cookie),
                                   prefix ? &pe : NULL,
                                   suffix ? &se : NULL);
    if (error) {
        ALOGW("Could not start iteration over %s: %s", mFileName, ErrorCodeString(error));
        delete ze;