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;
     }