Remove mResName and remove the hardwire pathname "/data/data".
Make the code robust.
Change-Id: Ia49eda1885ace0f9603cc181ba95d4d63ab586fc
diff --git a/lib/ExecutionEngine/Compiler.cpp b/lib/ExecutionEngine/Compiler.cpp
index 461f488..17890d1 100644
--- a/lib/ExecutionEngine/Compiler.cpp
+++ b/lib/ExecutionEngine/Compiler.cpp
@@ -244,24 +244,27 @@
}
-#define TOKEN_RAW ":raw"
-#define TOKEN_RAW_LEN 4
-
-// input objPath: For example, com.example.android.rs.fountain:raw/fountain
-// output objPath: /data/data/com.example.android.rs.fountain/cache/fountain.o
+// input objPath: For example,
+// /data/user/0/com.example.android.rs.fountain/cache/
+// @com.example.android.rs.fountain:raw@fountain.oBCC
+// output objPath: /data/user/0/com.example.android.rs.fountain/cache/
+// fountain.o
//
bool Compiler::getObjPath(std::string &objPath) {
- size_t found = objPath.find(TOKEN_RAW);
- if (found == string::npos) {
- LOGE("Ill formatted resource name '%s'. The name should contain :raw/",
+ size_t found0 = objPath.find("@");
+ size_t found1 = objPath.rfind("@");
+
+ if (found0 == found1 ||
+ found0 == string::npos ||
+ found1 == string::npos) {
+ LOGE("Ill formatted resource name '%s'. The name should contain 2 @s",
objPath.c_str());
return false;
}
- objPath.replace(found, TOKEN_RAW_LEN, "/cache");
+ objPath.replace(found0, found1 - found0 + 1, "", 0);
+ objPath.resize(objPath.length() - 3);
- objPath.append(".o");
- objPath.insert(0, "/data/data/");
LOGV("objPath = %s", objPath.c_str());
return true;
}
@@ -305,7 +308,7 @@
bool RelaxAll = true;
llvm::PassManager MCCodeGenPasses;
- std::string objPath(mResName);
+ std::string objPath(mCachePath);
if (!getObjPath(objPath)) {
LOGE("Fail to create objPath");
diff --git a/lib/ExecutionEngine/Compiler.h b/lib/ExecutionEngine/Compiler.h
index 597618f..472b85f 100644
--- a/lib/ExecutionEngine/Compiler.h
+++ b/lib/ExecutionEngine/Compiler.h
@@ -79,7 +79,7 @@
private:
- const char *mResName;
+ const char *mCachePath;
ScriptCompiled *mpResult;
@@ -104,8 +104,8 @@
static void GlobalInitialization();
- void setResName(const char *resName) {
- mResName = resName;
+ void setCachePath(const char *cachePath) {
+ mCachePath = cachePath;
return;
}
diff --git a/lib/ExecutionEngine/Script.cpp b/lib/ExecutionEngine/Script.cpp
index d43d9cf..1019568 100644
--- a/lib/ExecutionEngine/Script.cpp
+++ b/lib/ExecutionEngine/Script.cpp
@@ -83,8 +83,6 @@
return 1;
}
- mResName = resName;
-
if (mStatus != ScriptStatus::Unknown) {
mErrorCode = BCC_INVALID_OPERATION;
LOGE("Bad operation: Adding source after bccPrepareExecutable\n");
@@ -298,7 +296,7 @@
}
}
- mCompiled->setResName(mResName);
+ mCompiled->setCachePath(mCachePath);
// Compile and JIT the code
if (mCompiled->compile() != 0) {
diff --git a/lib/ExecutionEngine/Script.h b/lib/ExecutionEngine/Script.h
index a5e2bad..dc115da 100644
--- a/lib/ExecutionEngine/Script.h
+++ b/lib/ExecutionEngine/Script.h
@@ -58,8 +58,6 @@
char const *mCachePath;
- char const *mResName;
-
bool mIsContextSlotNotAvail;
// Source List
diff --git a/lib/ExecutionEngine/ScriptCompiled.h b/lib/ExecutionEngine/ScriptCompiled.h
index aa8e4cc..35c9b83 100644
--- a/lib/ExecutionEngine/ScriptCompiled.h
+++ b/lib/ExecutionEngine/ScriptCompiled.h
@@ -66,8 +66,8 @@
~ScriptCompiled();
- void setResName(char const *resName) {
- mCompiler.setResName(resName);
+ void setCachePath(char const *cachePath) {
+ mCompiler.setCachePath(cachePath);
return;
}