Fix bug with bad conversion of java strings to C strings for object names.  Update test app to test object defines.
diff --git a/java/Fountain/res/raw/fountain.c b/java/Fountain/res/raw/fountain.c
index afb2fb3..e7920fd 100644
--- a/java/Fountain/res/raw/fountain.c
+++ b/java/Fountain/res/raw/fountain.c
@@ -37,7 +37,7 @@
 
     //contextBindProgramFragment(con, loadI32(con, 0, 7));
     drawRect(con, 0, 256, 0, 512);
-    contextBindProgramFragment(con, loadI32(con, 0, 6));
+    contextBindProgramFragment(con, NAMED_PgmFragParts);
 
     if (touch) {
         newPart = loadI32(con, 2, 0);
@@ -106,6 +106,6 @@
         }
     }
 
-    drawTriangleArray(con, loadI32(con, 0, 5), drawCount);
+    drawTriangleArray(con, NAMED_PartBuffer, drawCount);
     return 1;
 }
diff --git a/java/Fountain/src/com/android/fountain/FountainView.java b/java/Fountain/src/com/android/fountain/FountainView.java
index f8b488a..46f6fca 100644
--- a/java/Fountain/src/com/android/fountain/FountainView.java
+++ b/java/Fountain/src/com/android/fountain/FountainView.java
@@ -68,6 +68,7 @@
 
         mIntAlloc = mRS.allocationCreatePredefSized(RenderScript.ElementPredefined.USER_I32, 10);
         mPartAlloc = mRS.allocationCreatePredefSized(RenderScript.ElementPredefined.USER_I32, partCount * 3 * 3);
+        mPartAlloc.setName("PartBuffer");
         mVertAlloc = mRS.allocationCreatePredefSized(RenderScript.ElementPredefined.USER_I32, partCount * 5 + 1);
 
         {
@@ -97,7 +98,6 @@
         mRS.programFragmentBegin(null, null);
         mPF = mRS.programFragmentCreate();
         mPF.setName("PgmFragParts");
-        //mRS.contextBindProgramFragment(mPF);
 
         mRS.programFragmentBegin(null, null);
         mRS.programFragmentSetTexEnable(0, true);
@@ -113,8 +113,6 @@
         mParams[3] = 0;
         mParams[4] = 0;
         mParams[5] = mPartAlloc.getID();
-        mParams[6] = mPF.getID();
-        mParams[7] = mPF2.getID();
         mIntAlloc.data(mParams);
 
         int t2[] = new int[partCount * 4*3];
diff --git a/jni/RenderScript_jni.cpp b/jni/RenderScript_jni.cpp
index dcd6e2f..fd19d88 100644
--- a/jni/RenderScript_jni.cpp
+++ b/jni/RenderScript_jni.cpp
@@ -70,7 +70,7 @@
 
     jint len = _env->GetArrayLength(str);
     jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
-    rsAssignName((void *)obj, (const char *)cptr);
+    rsAssignName((void *)obj, (const char *)cptr, len);
     _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
 }
 
diff --git a/rs.spec b/rs.spec
index b7eaed1..74445d3 100644
--- a/rs.spec
+++ b/rs.spec
@@ -19,6 +19,7 @@
 AssignName {
 	param void *obj
 	param const char *name
+	param size_t len
 	}
 
 ElementBegin {
diff --git a/rsContext.cpp b/rsContext.cpp
index ffd03d5..266c455 100644
--- a/rsContext.cpp
+++ b/rsContext.cpp
@@ -17,7 +17,7 @@
 #include "rsDevice.h"
 #include "rsContext.h"
 #include "rsThreadIO.h"
-
+#include "utils/String8.h"
 
 using namespace android;
 using namespace android::renderscript;
@@ -246,10 +246,10 @@
     pv->setupGL();
 }
 
-void Context::assignName(ObjectBase *obj, const char *name)
+void Context::assignName(ObjectBase *obj, const char *name, uint32_t len)
 {
     rsAssert(!obj->getName());
-    obj->setName(name);
+    obj->setName(name, len);
     mNames.add(obj);
 }
 
@@ -273,6 +273,19 @@
     return NULL;
 }
 
+void Context::appendNameDefines(String8 *str) const
+{
+    char buf[256];
+    for (size_t ct=0; ct < mNames.size(); ct++) {
+        str->append("#define NAMED_");
+        str->append(mNames[ct]->getName());
+        str->append(" ");
+        sprintf(buf, "%i\n", (int)mNames[ct]);
+        str->append(buf);
+    }
+}
+
+
 ///////////////////////////////////////////////////////////////////////////////////////////
 //
 
@@ -316,10 +329,10 @@
     rsc->setVertex(pv);
 }
 
-void rsi_AssignName(Context *rsc, void * obj, const char *name)
+void rsi_AssignName(Context *rsc, void * obj, const char *name, uint32_t len)
 {
     ObjectBase *ob = static_cast<ObjectBase *>(obj);
-    rsc->assignName(ob, name);
+    rsc->assignName(ob, name, len);
 }
 
 
diff --git a/rsContext.h b/rsContext.h
index 184740f..21ae8c5 100644
--- a/rsContext.h
+++ b/rsContext.h
@@ -76,9 +76,10 @@
 
     void setupCheck();
 
-    void assignName(ObjectBase *obj, const char *name);
+    void assignName(ObjectBase *obj, const char *name, uint32_t len);
     void removeName(ObjectBase *obj);
     ObjectBase * lookupName(const char *name) const;
+    void appendNameDefines(String8 *str) const;
 
 protected:
     Device *mDev;
diff --git a/rsObjectBase.cpp b/rsObjectBase.cpp
index 8660818..8f5232a 100644
--- a/rsObjectBase.cpp
+++ b/rsObjectBase.cpp
@@ -56,3 +56,15 @@
         strcpy(mName, name);
     }
 }
+
+void ObjectBase::setName(const char *name, uint32_t len)
+{
+    delete mName;
+    mName = NULL;
+    if (name) {
+        mName = new char[len + 1];
+        memcpy(mName, name, len);
+        mName[len] = 0;
+    }
+}
+
diff --git a/rsObjectBase.h b/rsObjectBase.h
index 4c52e9c..b2c3338 100644
--- a/rsObjectBase.h
+++ b/rsObjectBase.h
@@ -37,6 +37,7 @@
         return mName;
     }
     void setName(const char *);
+    void setName(const char *, uint32_t len);
 
 private:
     char * mName;
diff --git a/rsScriptC.cpp b/rsScriptC.cpp
index ae58e5f..d29eb9f 100644
--- a/rsScriptC.cpp
+++ b/rsScriptC.cpp
@@ -19,6 +19,7 @@
 #include "rsMatrix.h"
 
 #include "acc/acc.h"
+#include "utils/String8.h"
 
 using namespace android;
 using namespace android::renderscript;
@@ -433,17 +434,22 @@
 
 }
 
+
 void ScriptCState::runCompiler(Context *rsc)
 {
     mAccScript = accCreateScript();
+    String8 tmp;
 
-    const char* scriptSource[] = {mProgram.mScriptText};
-    int scriptLength[] = {mProgram.mScriptTextLength} ;
-    accScriptSource(mAccScript, 1, scriptSource, scriptLength);
+    rsc->appendNameDefines(&tmp);
+
+    const char* scriptSource[] = {tmp.string(), mProgram.mScriptText};
+    int scriptLength[] = {tmp.length(), mProgram.mScriptTextLength} ;
+    accScriptSource(mAccScript, sizeof(scriptLength) / sizeof(int), scriptSource, scriptLength);
     accCompileScript(mAccScript);
     accGetScriptLabel(mAccScript, "main", (ACCvoid**) &mProgram.mScript);
     rsAssert(mProgram.mScript);
 
+
     if (mProgram.mScript) {
         const static int pragmaMax = 16;
         ACCsizei pragmaCount;