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

Commit ef72ff22 authored by Logan Chien's avatar Logan Chien
Browse files

Use resource entry name instead of mangled name.

Change-Id: I833fa1b529fe505ce20ede12b7f4b5952a6ac1f0
parent e723caee
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -95,7 +95,7 @@ public class ScriptC extends Script {
        // E.g, /system/apps/Fountain.apk
        //String packageName = rs.getApplicationContext().getPackageResourcePath();
        // For res/raw/fountain.bc, it wil be /com.android.fountain:raw/fountain
        String resName = resources.getResourceName(resourceID);
        String resName = resources.getResourceEntryName(resourceID);
        String cacheDir = rs.getApplicationContext().getCacheDir().toString();

        Log.v(TAG, "Create script for resource = " + resName);
+1 −63
Original line number Diff line number Diff line
@@ -66,65 +66,6 @@ static Script * setTLS(Script *sc) {
}


// Input: cacheDir
// Input: resName
// Input: extName
//
// Note: cacheFile = resName + extName
//
// Output: Returns cachePath == cacheDir + cacheFile
static char *genCacheFileName(const char *cacheDir,
                              const char *resName,
                              const char *extName) {
    char cachePath[512];
    char cacheFile[sizeof(cachePath)];
    const size_t kBufLen = sizeof(cachePath) - 1;

    cacheFile[0] = '\0';
    // Note: resName today is usually something like
    //       "/com.android.fountain:raw/fountain"
    if (resName[0] != '/') {
        // Get the absolute path of the raw/***.bc file.

        // Generate the absolute path.  This doesn't do everything it
        // should, e.g. if resName is "./out/whatever" it doesn't crunch
        // the leading "./" out because this if-block is not triggered,
        // but it'll make do.
        //
        if (getcwd(cacheFile, kBufLen) == NULL) {
            LOGE("Can't get CWD while opening raw/***.bc file\n");
            return NULL;
        }
        // Append "/" at the end of cacheFile so far.
        strncat(cacheFile, "/", kBufLen);
    }

    // cacheFile = resName + extName
    //
    strncat(cacheFile, resName, kBufLen);
    if (extName != NULL) {
        // TODO(srhines): strncat() is a bit dangerous
        strncat(cacheFile, extName, kBufLen);
    }

    // Turn the path into a flat filename by replacing
    // any slashes after the first one with '@' characters.
    char *cp = cacheFile + 1;
    while (*cp != '\0') {
        if (*cp == '/') {
            *cp = '@';
        }
        cp++;
    }

    // Tack on the file name for the actual cache file path.
    strncpy(cachePath, cacheDir, kBufLen);
    strncat(cachePath, cacheFile, kBufLen);

    LOGV("Cache file for '%s' '%s' is '%s'\n", resName, extName, cachePath);
    return strdup(cachePath);
}

bool rsdScriptInit(const Context *rsc,
                     ScriptC *script,
                     char const *resName,
@@ -164,15 +105,12 @@ bool rsdScriptInit(const Context *rsc,
        goto error;
    }

#if 1
    if (bccLinkFile(drv->mBccScript, "/system/lib/libclcore.bc", 0) != 0) {
        LOGE("bcc: FAILS to link bitcode");
        goto error;
    }
#endif
    cachePath = genCacheFileName(cacheDir, resName, ".oBCC");

    if (bccPrepareExecutable(drv->mBccScript, cachePath, 0) != 0) {
    if (bccPrepareExecutableEx(drv->mBccScript, cacheDir, resName, 0) != 0) {
        LOGE("bcc: FAILS to prepare executable");
        goto error;
    }