Switch over to SSTR_WRAP_C

Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/0cf2343c
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/0cf2343c
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/0cf2343c

Branch: refs/heads/master
Commit: 0cf2343c3b940b774bc77a6ec20f6c1865fc3b4e
Parents: 6de52a6
Author: Nick Wellnhofer <wellnho...@aevum.de>
Authored: Sat Oct 24 16:36:36 2015 +0200
Committer: Nick Wellnhofer <wellnho...@aevum.de>
Committed: Sat Oct 24 16:36:36 2015 +0200

----------------------------------------------------------------------
 core/Lucy/Index/FilePurger.c                    |  2 +-
 core/Lucy/Index/IndexManager.c                  | 12 ++--
 core/Lucy/Index/PolyReader.c                    |  2 +-
 core/Lucy/Plan/Schema.c                         |  2 +-
 core/Lucy/Store/CompoundFileReader.c            |  8 +--
 core/Lucy/Store/CompoundFileWriter.c            | 12 ++--
 core/Lucy/Store/FSFolder.c                      |  2 +-
 core/Lucy/Store/Lock.c                          |  2 +-
 core/Lucy/Store/SharedLock.c                    |  4 +-
 core/Lucy/Test/Analysis/TestNormalizer.c        |  4 +-
 core/Lucy/Test/Analysis/TestPolyAnalyzer.c      |  6 +-
 core/Lucy/Test/Analysis/TestRegexTokenizer.c    |  4 +-
 core/Lucy/Test/Analysis/TestSnowballStemmer.c   |  4 +-
 core/Lucy/Test/Analysis/TestStandardTokenizer.c |  5 +-
 core/Lucy/Test/Highlight/TestHighlighter.c      | 63 ++++++++++----------
 core/Lucy/Test/Index/TestSegment.c              | 10 ++--
 core/Lucy/Test/Index/TestSnapshot.c             | 12 ++--
 core/Lucy/Test/Index/TestSortWriter.c           |  4 +-
 core/Lucy/Test/Plan/TestFieldType.c             |  6 +-
 core/Lucy/Test/Plan/TestFullTextType.c          |  4 +-
 core/Lucy/Test/Search/TestQueryParserLogic.c    |  4 +-
 core/Lucy/Test/Store/TestFSDirHandle.c          |  8 +--
 core/Lucy/Test/Store/TestFSFileHandle.c         |  8 +--
 core/Lucy/Test/Store/TestFSFolder.c             | 18 +++---
 core/Lucy/Test/Store/TestFileHandle.c           |  4 +-
 core/Lucy/Test/Store/TestInStream.c             |  4 +-
 core/Lucy/Test/Store/TestRAMDirHandle.c         |  6 +-
 core/Lucy/Test/TestSchema.c                     |  4 +-
 core/Lucy/Test/TestSimple.c                     | 22 +++----
 core/Lucy/Test/TestUtils.c                      | 16 ++---
 core/Lucy/Test/Util/TestIndexFileNames.c        |  4 +-
 core/Lucy/Test/Util/TestJson.c                  |  8 +--
 perl/buildlib/Lucy/Build/Binding/Misc.pm        |  3 +-
 33 files changed, 137 insertions(+), 140 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Index/FilePurger.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Index/FilePurger.c b/core/Lucy/Index/FilePurger.c
index 225113e..c02dee8 100644
--- a/core/Lucy/Index/FilePurger.c
+++ b/core/Lucy/Index/FilePurger.c
@@ -157,7 +157,7 @@ S_zap_dead_merge(FilePurger *self, Hash *candidates) {
         if (cutoff) {
             String *cutoff_seg = Seg_num_to_name(Json_obj_to_i64(cutoff));
             if (Folder_Exists(ivars->folder, cutoff_seg)) {
-                String *merge_json = SSTR_WRAP_UTF8("merge.json", 10);
+                String *merge_json = SSTR_WRAP_C("merge.json");
                 DirHandle *dh = Folder_Open_Dir(ivars->folder, cutoff_seg);
 
                 if (!dh) {

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Index/IndexManager.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Index/IndexManager.c b/core/Lucy/Index/IndexManager.c
index 06ff53b..9d59e77 100644
--- a/core/Lucy/Index/IndexManager.c
+++ b/core/Lucy/Index/IndexManager.c
@@ -234,7 +234,7 @@ S_obtain_lock_factory(IndexManager *self) {
 Lock*
 IxManager_Make_Write_Lock_IMP(IndexManager *self) {
     IndexManagerIVARS *const ivars = IxManager_IVARS(self);
-    String *write_lock_name = SSTR_WRAP_UTF8("write", 5);
+    String *write_lock_name = SSTR_WRAP_C("write");
     LockFactory *lock_factory = S_obtain_lock_factory(self);
     return LockFact_Make_Lock(lock_factory, write_lock_name,
                               ivars->write_lock_timeout,
@@ -244,7 +244,7 @@ IxManager_Make_Write_Lock_IMP(IndexManager *self) {
 Lock*
 IxManager_Make_Deletion_Lock_IMP(IndexManager *self) {
     IndexManagerIVARS *const ivars = IxManager_IVARS(self);
-    String *lock_name = SSTR_WRAP_UTF8("deletion", 8);
+    String *lock_name = SSTR_WRAP_C("deletion");
     LockFactory *lock_factory = S_obtain_lock_factory(self);
     return LockFact_Make_Lock(lock_factory, lock_name,
                               ivars->deletion_lock_timeout,
@@ -254,7 +254,7 @@ IxManager_Make_Deletion_Lock_IMP(IndexManager *self) {
 Lock*
 IxManager_Make_Merge_Lock_IMP(IndexManager *self) {
     IndexManagerIVARS *const ivars = IxManager_IVARS(self);
-    String *merge_lock_name = SSTR_WRAP_UTF8("merge", 5);
+    String *merge_lock_name = SSTR_WRAP_C("merge");
     LockFactory *lock_factory = S_obtain_lock_factory(self);
     return LockFact_Make_Lock(lock_factory, merge_lock_name,
                               ivars->merge_lock_timeout,
@@ -264,7 +264,7 @@ IxManager_Make_Merge_Lock_IMP(IndexManager *self) {
 void
 IxManager_Write_Merge_Data_IMP(IndexManager *self, int64_t cutoff) {
     IndexManagerIVARS *const ivars = IxManager_IVARS(self);
-    String *merge_json = SSTR_WRAP_UTF8("merge.json", 10);
+    String *merge_json = SSTR_WRAP_C("merge.json");
     Hash *data = Hash_new(1);
     bool success;
     Hash_Store_Utf8(data, "cutoff", 6, (Obj*)Str_newf("%i64", cutoff));
@@ -278,7 +278,7 @@ IxManager_Write_Merge_Data_IMP(IndexManager *self, int64_t 
cutoff) {
 Hash*
 IxManager_Read_Merge_Data_IMP(IndexManager *self) {
     IndexManagerIVARS *const ivars = IxManager_IVARS(self);
-    String *merge_json = SSTR_WRAP_UTF8("merge.json", 10);
+    String *merge_json = SSTR_WRAP_C("merge.json");
     if (Folder_Exists(ivars->folder, merge_json)) {
         Hash *stuff = (Hash*)Json_slurp_json(ivars->folder, merge_json);
         if (stuff) {
@@ -297,7 +297,7 @@ IxManager_Read_Merge_Data_IMP(IndexManager *self) {
 bool
 IxManager_Remove_Merge_Data_IMP(IndexManager *self) {
     IndexManagerIVARS *const ivars = IxManager_IVARS(self);
-    String *merge_json = SSTR_WRAP_UTF8("merge.json", 10);
+    String *merge_json = SSTR_WRAP_C("merge.json");
     return Folder_Delete(ivars->folder, merge_json) != 0;
 }
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Index/PolyReader.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Index/PolyReader.c b/core/Lucy/Index/PolyReader.c
index 02d3ff8..b20409a 100644
--- a/core/Lucy/Index/PolyReader.c
+++ b/core/Lucy/Index/PolyReader.c
@@ -384,7 +384,7 @@ PolyReader_do_open(PolyReader *self, Obj *index, Snapshot 
*snapshot,
 
         // Testing only.
         if (PolyReader_race_condition_debug1) {
-            String *temp = SSTR_WRAP_UTF8("temp", 4);
+            String *temp = SSTR_WRAP_C("temp");
             if (Folder_Exists(folder, temp)) {
                 bool success = Folder_Rename(folder, temp,
                                              PolyReader_race_condition_debug1);

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Plan/Schema.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Plan/Schema.c b/core/Lucy/Plan/Schema.c
index 1682c50..5f6c538 100644
--- a/core/Lucy/Plan/Schema.c
+++ b/core/Lucy/Plan/Schema.c
@@ -422,7 +422,7 @@ Schema_Eat_IMP(Schema *self, Schema *other) {
 void
 Schema_Write_IMP(Schema *self, Folder *folder, String *filename) {
     Hash *dump = Schema_Dump(self);
-    String *schema_temp = SSTR_WRAP_UTF8("schema.temp", 11);
+    String *schema_temp = SSTR_WRAP_C("schema.temp");
     bool success;
     Folder_Delete(folder, schema_temp); // Just in case.
     Json_spew_json((Obj*)dump, folder, schema_temp);

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Store/CompoundFileReader.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Store/CompoundFileReader.c 
b/core/Lucy/Store/CompoundFileReader.c
index 7a530b9..1c59f4f 100644
--- a/core/Lucy/Store/CompoundFileReader.c
+++ b/core/Lucy/Store/CompoundFileReader.c
@@ -38,7 +38,7 @@ CFReader_open(Folder *folder) {
 CompoundFileReader*
 CFReader_do_open(CompoundFileReader *self, Folder *folder) {
     CompoundFileReaderIVARS *const ivars = CFReader_IVARS(self);
-    String *cfmeta_file = (String*)SSTR_WRAP_UTF8("cfmeta.json", 11);
+    String *cfmeta_file = (String*)SSTR_WRAP_C("cfmeta.json");
     Hash *metadata = (Hash*)Json_slurp_json((Folder*)folder, cfmeta_file);
     Err *error = NULL;
 
@@ -75,7 +75,7 @@ CFReader_do_open(CompoundFileReader *self, Folder *folder) {
     }
 
     // Open an instream which we'll clone over and over.
-    String *cf_file = (String*)SSTR_WRAP_UTF8("cf.dat", 6);
+    String *cf_file = (String*)SSTR_WRAP_C("cf.dat");
     ivars->instream = Folder_Open_In(folder, cf_file);
     if (!ivars->instream) {
         ERR_ADD_FRAME(Err_get_error());
@@ -169,11 +169,11 @@ CFReader_Local_Delete_IMP(CompoundFileReader *self, 
String *name) {
         // Once the number of virtual files falls to 0, remove the compound
         // files.
         if (Hash_Get_Size(ivars->records) == 0) {
-            String *cf_file = (String*)SSTR_WRAP_UTF8("cf.dat", 6);
+            String *cf_file = (String*)SSTR_WRAP_C("cf.dat");
             if (!Folder_Delete(ivars->real_folder, cf_file)) {
                 return false;
             }
-            String *cfmeta_file = (String*)SSTR_WRAP_UTF8("cfmeta.json", 11);
+            String *cfmeta_file = (String*)SSTR_WRAP_C("cfmeta.json");
             if (!Folder_Delete(ivars->real_folder, cfmeta_file)) {
                 return false;
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Store/CompoundFileWriter.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Store/CompoundFileWriter.c 
b/core/Lucy/Store/CompoundFileWriter.c
index e4d97e1..9389ba3 100644
--- a/core/Lucy/Store/CompoundFileWriter.c
+++ b/core/Lucy/Store/CompoundFileWriter.c
@@ -59,7 +59,7 @@ CFWriter_Destroy_IMP(CompoundFileWriter *self) {
 void
 CFWriter_Consolidate_IMP(CompoundFileWriter *self) {
     CompoundFileWriterIVARS *const ivars = CFWriter_IVARS(self);
-    String *cfmeta_file = (String*)SSTR_WRAP_UTF8("cfmeta.json", 11);
+    String *cfmeta_file = (String*)SSTR_WRAP_C("cfmeta.json");
     if (Folder_Exists(ivars->folder, cfmeta_file)) {
         THROW(ERR, "Merge already performed for %o",
               Folder_Get_Path(ivars->folder));
@@ -75,8 +75,8 @@ S_clean_up_old_temp_files(CompoundFileWriter *self,
                           CompoundFileWriterIVARS *ivars) {
     UNUSED_VAR(self);
     Folder *folder      = ivars->folder;
-    String *cfmeta_temp = (String*)SSTR_WRAP_UTF8("cfmeta.json.temp", 16);
-    String *cf_file     = (String*)SSTR_WRAP_UTF8("cf.dat", 6);
+    String *cfmeta_temp = (String*)SSTR_WRAP_C("cfmeta.json.temp");
+    String *cf_file     = (String*)SSTR_WRAP_C("cf.dat");
 
     if (Folder_Exists(folder, cf_file)) {
         if (!Folder_Delete(folder, cf_file)) {
@@ -98,7 +98,7 @@ S_do_consolidate(CompoundFileWriter *self, 
CompoundFileWriterIVARS *ivars) {
     Hash      *sub_files    = Hash_new(0);
     Vector    *files        = Folder_List(folder, NULL);
     Vector    *merged       = Vec_new(Vec_Get_Size(files));
-    String    *cf_file      = (String*)SSTR_WRAP_UTF8("cf.dat", 6);
+    String    *cf_file      = (String*)SSTR_WRAP_C("cf.dat");
     OutStream *outstream    = Folder_Open_Out(folder, (String*)cf_file);
     bool       rename_success;
 
@@ -143,8 +143,8 @@ S_do_consolidate(CompoundFileWriter *self, 
CompoundFileWriterIVARS *ivars) {
     }
 
     // Write metadata to cfmeta file.
-    String *cfmeta_temp = (String*)SSTR_WRAP_UTF8("cfmeta.json.temp", 16);
-    String *cfmeta_file = (String*)SSTR_WRAP_UTF8("cfmeta.json", 11);
+    String *cfmeta_temp = (String*)SSTR_WRAP_C("cfmeta.json.temp");
+    String *cfmeta_file = (String*)SSTR_WRAP_C("cfmeta.json");
     Json_spew_json((Obj*)metadata, (Folder*)ivars->folder, cfmeta_temp);
     rename_success = Folder_Rename(ivars->folder, cfmeta_temp, cfmeta_file);
     if (!rename_success) { RETHROW(INCREF(Err_get_error())); }

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Store/FSFolder.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Store/FSFolder.c b/core/Lucy/Store/FSFolder.c
index 18a114f..2ab1f35 100644
--- a/core/Lucy/Store/FSFolder.c
+++ b/core/Lucy/Store/FSFolder.c
@@ -256,7 +256,7 @@ FSFolder_Local_Find_Folder_IMP(FSFolder *self, String 
*name) {
         }
         // Try to open a CompoundFileReader. On failure, just use the
         // existing folder.
-        String *cfmeta_file = (String*)SSTR_WRAP_UTF8("cfmeta.json", 11);
+        String *cfmeta_file = (String*)SSTR_WRAP_C("cfmeta.json");
         if (Folder_Local_Exists(subfolder, cfmeta_file)) {
             CompoundFileReader *cf_reader = CFReader_open(subfolder);
             if (cf_reader) {

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Store/Lock.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Store/Lock.c b/core/Lucy/Store/Lock.c
index 8ea0aee..9fe100e 100644
--- a/core/Lucy/Store/Lock.c
+++ b/core/Lucy/Store/Lock.c
@@ -158,7 +158,7 @@ LFLock_Request_IMP(LockFileLock *self) {
     }
 
     // Create the "locks" subdirectory if necessary.
-    String *lock_dir_name = (String*)SSTR_WRAP_UTF8("locks", 5);
+    String *lock_dir_name = (String*)SSTR_WRAP_C("locks");
     if (!Folder_Exists(ivars->folder, lock_dir_name)) {
         if (!Folder_MkDir(ivars->folder, lock_dir_name)) {
             Err *mkdir_err = (Err*)CERTIFY(Err_get_error(), ERR);

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Store/SharedLock.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Store/SharedLock.c b/core/Lucy/Store/SharedLock.c
index 18bcef5..12c49c7 100644
--- a/core/Lucy/Store/SharedLock.c
+++ b/core/Lucy/Store/SharedLock.c
@@ -99,7 +99,7 @@ void
 ShLock_Clear_Stale_IMP(SharedLock *self) {
     SharedLockIVARS *const ivars = ShLock_IVARS(self);
 
-    String *lock_dir_name = (String*)SSTR_WRAP_UTF8("locks", 5);
+    String *lock_dir_name = (String*)SSTR_WRAP_C("locks");
     if (!Folder_Find_Folder(ivars->folder, lock_dir_name)) {
         return;
     }
@@ -127,7 +127,7 @@ bool
 ShLock_Is_Locked_IMP(SharedLock *self) {
     SharedLockIVARS *const ivars = ShLock_IVARS(self);
 
-    String *lock_dir_name = (String*)SSTR_WRAP_UTF8("locks", 5);
+    String *lock_dir_name = (String*)SSTR_WRAP_C("locks");
     if (!Folder_Find_Folder(ivars->folder, lock_dir_name)) {
         return false;
     }

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Test/Analysis/TestNormalizer.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestNormalizer.c 
b/core/Lucy/Test/Analysis/TestNormalizer.c
index ab68930..92adbf4 100644
--- a/core/Lucy/Test/Analysis/TestNormalizer.c
+++ b/core/Lucy/Test/Analysis/TestNormalizer.c
@@ -39,8 +39,8 @@ static void
 test_Dump_Load_and_Equals(TestBatchRunner *runner) {
     Normalizer *normalizer[4];
 
-    String *NFC  = (String*)SSTR_WRAP_UTF8("NFC",  3);
-    String *NFKC = (String*)SSTR_WRAP_UTF8("NFKC", 4);
+    String *NFC  = (String*)SSTR_WRAP_C("NFC");
+    String *NFKC = (String*)SSTR_WRAP_C("NFKC");
 
     normalizer[0] = Normalizer_new(NFKC, true,  false);
     normalizer[1] = Normalizer_new(NFC,  true,  false);

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Test/Analysis/TestPolyAnalyzer.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestPolyAnalyzer.c 
b/core/Lucy/Test/Analysis/TestPolyAnalyzer.c
index 638c72e..31bd76f 100644
--- a/core/Lucy/Test/Analysis/TestPolyAnalyzer.c
+++ b/core/Lucy/Test/Analysis/TestPolyAnalyzer.c
@@ -41,8 +41,8 @@ test_Dump_Load_and_Equals(TestBatchRunner *runner) {
         return;
     }
 
-    String       *EN          = (String*)SSTR_WRAP_UTF8("en", 2);
-    String       *ES          = (String*)SSTR_WRAP_UTF8("es", 2);
+    String       *EN          = (String*)SSTR_WRAP_C("en");
+    String       *ES          = (String*)SSTR_WRAP_C("es");
     PolyAnalyzer *analyzer    = PolyAnalyzer_new(EN, NULL);
     PolyAnalyzer *other       = PolyAnalyzer_new(ES, NULL);
     Obj          *dump        = (Obj*)PolyAnalyzer_Dump(analyzer);
@@ -68,7 +68,7 @@ test_Dump_Load_and_Equals(TestBatchRunner *runner) {
 
 static void
 test_analysis(TestBatchRunner *runner) {
-    String             *EN          = (String*)SSTR_WRAP_UTF8("en", 2);
+    String             *EN          = (String*)SSTR_WRAP_C("en");
     String             *source_text = Str_newf("Eats, shoots and leaves.");
     Normalizer         *normalizer  = Normalizer_new(NULL, true, false);
     StandardTokenizer  *tokenizer   = StandardTokenizer_new();

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Test/Analysis/TestRegexTokenizer.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestRegexTokenizer.c 
b/core/Lucy/Test/Analysis/TestRegexTokenizer.c
index d1873b1..d24ea1d 100644
--- a/core/Lucy/Test/Analysis/TestRegexTokenizer.c
+++ b/core/Lucy/Test/Analysis/TestRegexTokenizer.c
@@ -37,9 +37,9 @@ test_Dump_Load_and_Equals(TestBatchRunner *runner) {
     }
 
     RegexTokenizer *word_char_tokenizer
-        = RegexTokenizer_new(SSTR_WRAP_UTF8("\\w+", 3));
+        = RegexTokenizer_new(SSTR_WRAP_C("\\w+"));
     RegexTokenizer *whitespace_tokenizer
-        = RegexTokenizer_new(SSTR_WRAP_UTF8("\\S+", 3));
+        = RegexTokenizer_new(SSTR_WRAP_C("\\S+"));
     Obj *word_char_dump  = RegexTokenizer_Dump(word_char_tokenizer);
     Obj *whitespace_dump = RegexTokenizer_Dump(whitespace_tokenizer);
     RegexTokenizer *word_char_clone

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Test/Analysis/TestSnowballStemmer.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestSnowballStemmer.c 
b/core/Lucy/Test/Analysis/TestSnowballStemmer.c
index 1a066ab..64bec15 100644
--- a/core/Lucy/Test/Analysis/TestSnowballStemmer.c
+++ b/core/Lucy/Test/Analysis/TestSnowballStemmer.c
@@ -34,8 +34,8 @@ TestSnowStemmer_new() {
 
 static void
 test_Dump_Load_and_Equals(TestBatchRunner *runner) {
-    String *EN = (String*)SSTR_WRAP_UTF8("en", 2);
-    String *ES = (String*)SSTR_WRAP_UTF8("es", 2);
+    String *EN = (String*)SSTR_WRAP_C("en");
+    String *ES = (String*)SSTR_WRAP_C("es");
     SnowballStemmer *stemmer = SnowStemmer_new(EN);
     SnowballStemmer *other   = SnowStemmer_new(ES);
     Obj *dump       = (Obj*)SnowStemmer_Dump(stemmer);

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Test/Analysis/TestStandardTokenizer.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestStandardTokenizer.c 
b/core/Lucy/Test/Analysis/TestStandardTokenizer.c
index 5ada7ec..2e6904d 100644
--- a/core/Lucy/Test/Analysis/TestStandardTokenizer.c
+++ b/core/Lucy/Test/Analysis/TestStandardTokenizer.c
@@ -51,7 +51,7 @@ static void
 test_tokenizer(TestBatchRunner *runner) {
     StandardTokenizer *tokenizer = StandardTokenizer_new();
 
-    String *word = SSTR_WRAP_UTF8(
+    String *word = SSTR_WRAP_C(
                               " ."
                               "tha\xCC\x82t's"
                               ":"
@@ -59,8 +59,7 @@ test_tokenizer(TestBatchRunner *runner) {
                               "\xE0\xB8\x81\xC2\xAD\xC2\xAD"
                               "\xF0\xA0\x80\x80"
                               "a"
-                              "/",
-                              35);
+                              "/");
     Vector *got = StandardTokenizer_Split(tokenizer, word);
     String *token = (String*)Vec_Fetch(got, 0);
     TEST_TRUE(runner,

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Test/Highlight/TestHighlighter.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Highlight/TestHighlighter.c 
b/core/Lucy/Test/Highlight/TestHighlighter.c
index 0bdfec1..3ae0687 100644
--- a/core/Lucy/Test/Highlight/TestHighlighter.c
+++ b/core/Lucy/Test/Highlight/TestHighlighter.c
@@ -59,12 +59,12 @@ TestHighlighter_new() {
 
 static void
 test_Raw_Excerpt(TestBatchRunner *runner, Searcher *searcher, Obj *query) {
-    String *content = (String*)SSTR_WRAP_UTF8("content", 7);
+    String *content = (String*)SSTR_WRAP_C("content");
     Highlighter *highlighter = Highlighter_new(searcher, query, content, 6);
     int32_t top;
     String *raw_excerpt;
 
-    String *field_val = (String *)SSTR_WRAP_UTF8("Ook.  Urk.  Ick.  ", 18);
+    String *field_val = (String *)SSTR_WRAP_C("Ook.  Urk.  Ick.  ");
     Vector *spans = Vec_new(1);
     Vec_Push(spans, (Obj*)Span_new(0, 18, 1.0f));
     HeatMap *heat_map = HeatMap_new(spans, 133);
@@ -95,7 +95,7 @@ test_Raw_Excerpt(TestBatchRunner *runner, Searcher *searcher, 
Obj *query) {
     DECREF(raw_excerpt);
     DECREF(heat_map);
 
-    field_val = (String *)SSTR_WRAP_UTF8("Ook urk ick i.", 14);
+    field_val = (String *)SSTR_WRAP_C("Ook urk ick i.");
     spans     = Vec_new(1);
     Vec_Push(spans, (Obj*)Span_new(12, 1, 1.0f));
     heat_map = HeatMap_new(spans, 133);
@@ -111,7 +111,7 @@ test_Raw_Excerpt(TestBatchRunner *runner, Searcher 
*searcher, Obj *query) {
     DECREF(heat_map);
     DECREF(raw_excerpt);
 
-    field_val = (String *)SSTR_WRAP_UTF8("Urk.  Iz no good.", 17);
+    field_val = (String *)SSTR_WRAP_C("Urk.  Iz no good.");
     spans     = Vec_new(1);
     Vec_Push(spans, (Obj*)Span_new(6, 2, 1.0f));
     heat_map = HeatMap_new(spans, 133);
@@ -129,7 +129,7 @@ test_Raw_Excerpt(TestBatchRunner *runner, Searcher 
*searcher, Obj *query) {
 
     // Words longer than excerpt len
 
-    field_val = (String *)SSTR_WRAP_UTF8("abc/def/ghi/jkl/mno", 19);
+    field_val = (String *)SSTR_WRAP_C("abc/def/ghi/jkl/mno");
 
     spans = Vec_new(1);
     Vec_Push(spans, (Obj*)Span_new(0, 3, 1.0f));
@@ -160,13 +160,13 @@ test_Raw_Excerpt(TestBatchRunner *runner, Searcher 
*searcher, Obj *query) {
 
 static void
 test_Highlight_Excerpt(TestBatchRunner *runner, Searcher *searcher, Obj 
*query) {
-    String *content = (String*)SSTR_WRAP_UTF8("content", 7);
+    String *content = (String*)SSTR_WRAP_C("content");
     Highlighter *highlighter = Highlighter_new(searcher, query, content, 3);
     String *highlighted;
 
     Vector *spans = Vec_new(1);
     Vec_Push(spans, (Obj*)Span_new(2, 1, 0.0f));
-    String *raw_excerpt = (String *)SSTR_WRAP_UTF8("a b c", 5);
+    String *raw_excerpt = (String *)SSTR_WRAP_C("a b c");
     highlighted = Highlighter_Highlight_Excerpt(highlighter, spans,
                                                 raw_excerpt, 0);
     TEST_TRUE(runner,
@@ -178,7 +178,7 @@ test_Highlight_Excerpt(TestBatchRunner *runner, Searcher 
*searcher, Obj *query)
     spans = Vec_new(2);
     Vec_Push(spans, (Obj*)Span_new(0, 1, 1.0f));
     Vec_Push(spans, (Obj*)Span_new(10, 10, 1.0f));
-    raw_excerpt = (String *)SSTR_WRAP_UTF8(PHI, 2);
+    raw_excerpt = (String *)SSTR_WRAP_C(PHI);
     highlighted = Highlighter_Highlight_Excerpt(highlighter, spans,
                                                 raw_excerpt, 0);
     TEST_TRUE(runner,
@@ -189,7 +189,7 @@ test_Highlight_Excerpt(TestBatchRunner *runner, Searcher 
*searcher, Obj *query)
 
     spans = Vec_new(1);
     Vec_Push(spans, (Obj*)Span_new(3, 1, 1.0f));
-    raw_excerpt = (String *)SSTR_WRAP_UTF8(PHI " " PHI " " PHI, 8);
+    raw_excerpt = (String *)SSTR_WRAP_C(PHI " " PHI " " PHI);
     highlighted = Highlighter_Highlight_Excerpt(highlighter, spans,
                                                 raw_excerpt, 1);
     TEST_TRUE(runner,
@@ -204,7 +204,7 @@ test_Highlight_Excerpt(TestBatchRunner *runner, Searcher 
*searcher, Obj *query)
     Vec_Push(spans, (Obj*)Span_new(2,  4, 1.0f));
     Vec_Push(spans, (Obj*)Span_new(8,  9, 1.0f));
     Vec_Push(spans, (Obj*)Span_new(8,  4, 1.0f));
-    raw_excerpt = (String *)SSTR_WRAP_UTF8(PHI " Oook. Urk. Ick. " PHI, 21);
+    raw_excerpt = (String *)SSTR_WRAP_C(PHI " Oook. Urk. Ick. " PHI);
     highlighted = Highlighter_Highlight_Excerpt(highlighter, spans,
                                                 raw_excerpt, 0);
     TEST_TRUE(runner,
@@ -221,7 +221,7 @@ test_Highlight_Excerpt(TestBatchRunner *runner, Searcher 
*searcher, Obj *query)
 static void
 test_Create_Excerpt(TestBatchRunner *runner, Searcher *searcher, Obj *query,
                     Hits *hits) {
-    String *content = (String*)SSTR_WRAP_UTF8("content", 7);
+    String *content = (String*)SSTR_WRAP_C("content");
     Highlighter *highlighter = Highlighter_new(searcher, query, content, 200);
 
     HitDoc *hit = Hits_Next(hits);
@@ -233,9 +233,9 @@ test_Create_Excerpt(TestBatchRunner *runner, Searcher 
*searcher, Obj *query,
               "highlighter tagged phrase and single term");
     DECREF(excerpt);
 
-    String *pre_tag = (String*)SSTR_WRAP_UTF8("\x1B[1m", 4);
+    String *pre_tag = (String*)SSTR_WRAP_C("\x1B[1m");
     Highlighter_Set_Pre_Tag(highlighter, pre_tag);
-    String *post_tag = (String*)SSTR_WRAP_UTF8("\x1B[0m", 4);
+    String *post_tag = (String*)SSTR_WRAP_C("\x1B[0m");
     Highlighter_Set_Post_Tag(highlighter, post_tag);
     excerpt = Highlighter_Create_Excerpt(highlighter, hit);
     TEST_TRUE(runner,
@@ -255,7 +255,7 @@ test_Create_Excerpt(TestBatchRunner *runner, Searcher 
*searcher, Obj *query,
     DECREF(hit);
     DECREF(highlighter);
 
-    query = (Obj*)SSTR_WRAP_UTF8("x \"x y z\" AND b", 15);
+    query = (Obj*)SSTR_WRAP_C("x \"x y z\" AND b");
     hits = Searcher_Hits(searcher, query, 0, 10, NULL);
     highlighter = Highlighter_new(searcher, query, content, 200);
     hit = Hits_Next(hits);
@@ -270,7 +270,7 @@ test_Create_Excerpt(TestBatchRunner *runner, Searcher 
*searcher, Obj *query,
     DECREF(highlighter);
     DECREF(hits);
 
-    query = (Obj*)SSTR_WRAP_UTF8("blind", 5);
+    query = (Obj*)SSTR_WRAP_C("blind");
     hits = Searcher_Hits(searcher, query, 0, 10, NULL);
     highlighter = Highlighter_new(searcher, query, content, 200);
     hit = Hits_Next(hits);
@@ -283,7 +283,7 @@ test_Create_Excerpt(TestBatchRunner *runner, Searcher 
*searcher, Obj *query,
     DECREF(highlighter);
     DECREF(hits);
 
-    query = (Obj*)SSTR_WRAP_UTF8("why", 3);
+    query = (Obj*)SSTR_WRAP_C("why");
     hits = Searcher_Hits(searcher, query, 0, 10, NULL);
     highlighter = Highlighter_new(searcher, query, content, 200);
     hit = Hits_Next(hits);
@@ -296,7 +296,7 @@ test_Create_Excerpt(TestBatchRunner *runner, Searcher 
*searcher, Obj *query,
     DECREF(highlighter);
     DECREF(hits);
 
-    Obj *term = (Obj*)SSTR_WRAP_UTF8("x", 1);
+    Obj *term = (Obj*)SSTR_WRAP_C("x");
     query = (Obj*)TermQuery_new(content, term);
     hits = Searcher_Hits(searcher, query, 0, 10, NULL);
     hit = Hits_Next(hits);
@@ -307,7 +307,7 @@ test_Create_Excerpt(TestBatchRunner *runner, Searcher 
*searcher, Obj *query,
               "specify field highlights correct field...");
     DECREF(excerpt);
     DECREF(highlighter);
-    String *alt = (String*)SSTR_WRAP_UTF8("alt", 3);
+    String *alt = (String*)SSTR_WRAP_C("alt");
     highlighter = Highlighter_new(searcher, query, alt, 200);
     excerpt = Highlighter_Create_Excerpt(highlighter, hit);
     TEST_FALSE(runner,
@@ -329,9 +329,9 @@ test_highlighting(TestBatchRunner *runner) {
     FullTextType *dunked_type = FullTextType_new((Analyzer*)tokenizer);
     FullTextType_Set_Highlightable(dunked_type, true);
     FullTextType_Set_Boost(dunked_type, 0.1f);
-    String *content = (String*)SSTR_WRAP_UTF8("content", 7);
+    String *content = (String*)SSTR_WRAP_C("content");
     Schema_Spec_Field(schema, content, (FieldType*)plain_type);
-    String *alt = (String*)SSTR_WRAP_UTF8("alt", 3);
+    String *alt = (String*)SSTR_WRAP_C("alt");
     Schema_Spec_Field(schema, alt, (FieldType*)dunked_type);
     DECREF(plain_type);
     DECREF(dunked_type);
@@ -341,23 +341,22 @@ test_highlighting(TestBatchRunner *runner) {
     Indexer *indexer = Indexer_new(schema, (Obj*)folder, NULL, 0);
 
     Doc *doc = Doc_new(NULL, 0);
-    String *string = (String *)SSTR_WRAP_UTF8(TEST_STRING, TEST_STRING_LEN);
+    String *string = (String *)SSTR_WRAP_C(TEST_STRING);
     Doc_Store(doc, content, (Obj*)string);
     Indexer_Add_Doc(indexer, doc, 1.0f);
     DECREF(doc);
 
     doc = Doc_new(NULL, 0);
-    string = (String *)SSTR_WRAP_UTF8("\"I see,\" said the blind man.", 28);
+    string = (String *)SSTR_WRAP_C("\"I see,\" said the blind man.");
     Doc_Store(doc, content, (Obj*)string);
     Indexer_Add_Doc(indexer, doc, 1.0f);
     DECREF(doc);
 
     doc = Doc_new(NULL, 0);
-    string = (String *)SSTR_WRAP_UTF8("x but not why or 2ee", 20);
+    string = (String *)SSTR_WRAP_C("x but not why or 2ee");
     Doc_Store(doc, content, (Obj*)string);
-    string = (String *)SSTR_WRAP_UTF8(TEST_STRING
-                                     " and extra stuff so it scores lower",
-                                     TEST_STRING_LEN + 35);
+    string = (String *)SSTR_WRAP_C(TEST_STRING
+                                   " and extra stuff so it scores lower");
     Doc_Store(doc, alt, (Obj*)string);
     Indexer_Add_Doc(indexer, doc, 1.0f);
     DECREF(doc);
@@ -366,7 +365,7 @@ test_highlighting(TestBatchRunner *runner) {
     DECREF(indexer);
 
     Searcher *searcher = (Searcher*)IxSearcher_new((Obj*)folder);
-    Obj *query = (Obj*)SSTR_WRAP_UTF8("\"x y z\" AND " PHI, 14);
+    Obj *query = (Obj*)SSTR_WRAP_C("\"x y z\" AND " PHI);
     Hits *hits = Searcher_Hits(searcher, query, 0, 10, NULL);
 
     test_Raw_Excerpt(runner, searcher, query);
@@ -385,7 +384,7 @@ test_hl_selection(TestBatchRunner *runner) {
     StandardTokenizer *tokenizer = StandardTokenizer_new();
     FullTextType *plain_type = FullTextType_new((Analyzer*)tokenizer);
     FullTextType_Set_Highlightable(plain_type, true);
-    String *content = (String*)SSTR_WRAP_UTF8("content", 7);
+    String *content = (String*)SSTR_WRAP_C("content");
     Schema_Spec_Field(schema, content, (FieldType*)plain_type);
     DECREF(plain_type);
     DECREF(tokenizer);
@@ -408,7 +407,7 @@ test_hl_selection(TestBatchRunner *runner) {
         "bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla. "
         "bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla. ";
     Doc *doc = Doc_new(NULL, 0);
-    String *string = (String *)SSTR_WRAP_UTF8(test_string, 
strlen(test_string));
+    String *string = (String *)SSTR_WRAP_C(test_string);
     Doc_Store(doc, content, (Obj*)string);
     Indexer_Add_Doc(indexer, doc, 1.0f);
     DECREF(doc);
@@ -417,13 +416,13 @@ test_hl_selection(TestBatchRunner *runner) {
     DECREF(indexer);
 
     Searcher *searcher = (Searcher*)IxSearcher_new((Obj*)folder);
-    Obj *query = (Obj*)SSTR_WRAP_UTF8("NNN MMM", 7);
+    Obj *query = (Obj*)SSTR_WRAP_C("NNN MMM");
     Highlighter *highlighter = Highlighter_new(searcher, query, content, 200);
     Hits *hits = Searcher_Hits(searcher, query, 0, 10, NULL);
     HitDoc *hit = Hits_Next(hits);
     String *excerpt = Highlighter_Create_Excerpt(highlighter, hit);
-    String *mmm = (String*)SSTR_WRAP_UTF8("MMM", 3);
-    String *nnn = (String*)SSTR_WRAP_UTF8("NNN", 3);
+    String *mmm = (String*)SSTR_WRAP_C("MMM");
+    String *nnn = (String*)SSTR_WRAP_C("NNN");
     TEST_TRUE(runner, Str_Contains(excerpt, mmm) || Str_Contains(excerpt, nnn),
               "Sentence boundary algo doesn't chop terms");
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Test/Index/TestSegment.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Index/TestSegment.c 
b/core/Lucy/Test/Index/TestSegment.c
index 1d8bbb2..87a07af 100644
--- a/core/Lucy/Test/Index/TestSegment.c
+++ b/core/Lucy/Test/Index/TestSegment.c
@@ -32,9 +32,9 @@ TestSeg_new() {
 static void
 test_fields(TestBatchRunner *runner) {
     Segment *segment = Seg_new(1);
-    String *foo = SSTR_WRAP_UTF8("foo", 3);
-    String *bar = SSTR_WRAP_UTF8("bar", 3);
-    String *baz = SSTR_WRAP_UTF8("baz", 3);
+    String *foo = SSTR_WRAP_C("foo");
+    String *bar = SSTR_WRAP_C("bar");
+    String *baz = SSTR_WRAP_C("baz");
     int32_t field_num;
 
     field_num = Seg_Add_Field(segment, foo);
@@ -126,8 +126,8 @@ test_Write_File_and_Read_File(TestBatchRunner *runner) {
     Segment   *segment = Seg_new(100);
     Segment   *got     = Seg_new(100);
     String    *meta;
-    String    *flotsam = SSTR_WRAP_UTF8("flotsam", 7);
-    String    *jetsam  = SSTR_WRAP_UTF8("jetsam", 6);
+    String    *flotsam = SSTR_WRAP_C("flotsam");
+    String    *jetsam  = SSTR_WRAP_C("jetsam");
 
     Seg_Set_Count(segment, 111);
     Seg_Store_Metadata_Utf8(segment, "foo", 3, (Obj*)Str_newf("bar"));

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Test/Index/TestSnapshot.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Index/TestSnapshot.c 
b/core/Lucy/Test/Index/TestSnapshot.c
index da47630..e790206 100644
--- a/core/Lucy/Test/Index/TestSnapshot.c
+++ b/core/Lucy/Test/Index/TestSnapshot.c
@@ -31,8 +31,8 @@ TestSnapshot_new() {
 static void
 test_Add_and_Delete(TestBatchRunner *runner) {
     Snapshot *snapshot = Snapshot_new();
-    String *foo = (String*)SSTR_WRAP_UTF8("foo", 3);
-    String *bar = (String*)SSTR_WRAP_UTF8("bar", 3);
+    String *foo = (String*)SSTR_WRAP_C("foo");
+    String *bar = (String*)SSTR_WRAP_C("bar");
 
     Snapshot_Add_Entry(snapshot, foo);
     Snapshot_Add_Entry(snapshot, foo); // redundant
@@ -55,8 +55,8 @@ static void
 test_path_handling(TestBatchRunner *runner) {
     Snapshot *snapshot = Snapshot_new();
     Folder   *folder   = (Folder*)RAMFolder_new(NULL);
-    String   *snap     = (String*)SSTR_WRAP_UTF8("snap", 4);
-    String   *crackle  = (String*)SSTR_WRAP_UTF8("crackle", 7);
+    String   *snap     = (String*)SSTR_WRAP_C("snap");
+    String   *crackle  = (String*)SSTR_WRAP_C("crackle");
 
     Snapshot_Write_File(snapshot, folder, snap);
     TEST_TRUE(runner, Str_Equals(snap, (Obj*)Snapshot_Get_Path(snapshot)),
@@ -79,8 +79,8 @@ static void
 test_Read_File_and_Write_File(TestBatchRunner *runner) {
     Snapshot *snapshot = Snapshot_new();
     Folder   *folder   = (Folder*)RAMFolder_new(NULL);
-    String   *snap     = (String*)SSTR_WRAP_UTF8("snap", 4);
-    String   *foo      = (String*)SSTR_WRAP_UTF8("foo", 3);
+    String   *snap     = (String*)SSTR_WRAP_C("snap");
+    String   *foo      = (String*)SSTR_WRAP_C("foo");
 
     Snapshot_Add_Entry(snapshot, foo);
     Snapshot_Write_File(snapshot, folder, snap);

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Test/Index/TestSortWriter.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Index/TestSortWriter.c 
b/core/Lucy/Test/Index/TestSortWriter.c
index 1ac1c80..3c5f62b 100644
--- a/core/Lucy/Test/Index/TestSortWriter.c
+++ b/core/Lucy/Test/Index/TestSortWriter.c
@@ -108,7 +108,7 @@ S_create_schema() {
 static void
 S_store_field(Doc *doc, String *field, const char *value) {
     if (value) {
-        String *string = SSTR_WRAP_UTF8(value, strlen(value));
+        String *string = SSTR_WRAP_C(value);
         Doc_Store(doc, field, (Obj*)string);
     }
 }
@@ -231,7 +231,7 @@ test_sort_writer(TestBatchRunner *runner) {
     {
         // Consolidate everything, to test merging.
         Indexer *indexer = Indexer_new(schema, (Obj*)folder, NULL, 0);
-        String *bike_str = SSTR_WRAP_UTF8("bike", 4);
+        String *bike_str = SSTR_WRAP_C("bike");
         Indexer_Delete_By_Term(indexer, name_str, (Obj*)bike_str);
         // no "wheels" field -- test NULL/undef
         S_add_doc(indexer, "elephant", "0020", "6000", "land", NULL, NULL);

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Test/Plan/TestFieldType.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Plan/TestFieldType.c 
b/core/Lucy/Test/Plan/TestFieldType.c
index f4c658d..b81fce5 100644
--- a/core/Lucy/Test/Plan/TestFieldType.c
+++ b/core/Lucy/Test/Plan/TestFieldType.c
@@ -37,7 +37,7 @@ DummyFieldType_new() {
 
 static FieldType*
 S_alt_field_type() {
-    String *name = SSTR_WRAP_UTF8("DummyFieldType2", 15);
+    String *name = SSTR_WRAP_C("DummyFieldType2");
     Class *klass = Class_singleton(name, DUMMYFIELDTYPE);
     FieldType *self = (FieldType*)Class_Make_Obj(klass);
     return FType_init(self);
@@ -84,8 +84,8 @@ test_Dump_Load_and_Equals(TestBatchRunner *runner) {
 static void
 test_Compare_Values(TestBatchRunner *runner) {
     FieldType *type = (FieldType*)DummyFieldType_new();
-    Obj       *a    = (Obj*)SSTR_WRAP_UTF8("a", 1);
-    Obj       *b    = (Obj*)SSTR_WRAP_UTF8("b", 1);
+    Obj       *a    = (Obj*)SSTR_WRAP_C("a");
+    Obj       *b    = (Obj*)SSTR_WRAP_C("b");
 
     TEST_TRUE(runner, FType_Compare_Values(type, a, b) < 0,
               "a less than b");

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Test/Plan/TestFullTextType.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Plan/TestFullTextType.c 
b/core/Lucy/Test/Plan/TestFullTextType.c
index f27c718..709b1c2 100644
--- a/core/Lucy/Test/Plan/TestFullTextType.c
+++ b/core/Lucy/Test/Plan/TestFullTextType.c
@@ -88,8 +88,8 @@ static void
 test_Compare_Values(TestBatchRunner *runner) {
     StandardTokenizer *tokenizer = StandardTokenizer_new();
     FullTextType      *type      = FullTextType_new((Analyzer*)tokenizer);
-    Obj *a = (Obj*)SSTR_WRAP_UTF8("a", 1);
-    Obj *b = (Obj*)SSTR_WRAP_UTF8("b", 1);
+    Obj *a = (Obj*)SSTR_WRAP_C("a");
+    Obj *b = (Obj*)SSTR_WRAP_C("b");
 
     TEST_TRUE(runner, FullTextType_Compare_Values(type, a, b) < 0,
               "a less than b");

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Test/Search/TestQueryParserLogic.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Search/TestQueryParserLogic.c 
b/core/Lucy/Test/Search/TestQueryParserLogic.c
index ace8aa8..d8a647b 100644
--- a/core/Lucy/Test/Search/TestQueryParserLogic.c
+++ b/core/Lucy/Test/Search/TestQueryParserLogic.c
@@ -864,7 +864,7 @@ S_create_index() {
     Indexer    *indexer = Indexer_new(schema, (Obj*)folder, NULL, 0);
     uint32_t i, max;
 
-    String *field = (String*)SSTR_WRAP_UTF8("content", 7);
+    String *field = (String*)SSTR_WRAP_C("content");
     for (i = 0, max = Vec_Get_Size(doc_set); i < max; i++) {
         Doc *doc = Doc_new(NULL, 0);
         Doc_Store(doc, field, Vec_Fetch(doc_set, i));
@@ -890,7 +890,7 @@ TestQPLogic_Run_IMP(TestQueryParserLogic *self, 
TestBatchRunner *runner) {
     IndexSearcher *searcher   = IxSearcher_new((Obj*)folder);
     QueryParser   *or_parser  = QParser_new(IxSearcher_Get_Schema(searcher),
                                             NULL, NULL, NULL);
-    String        *AND        = SSTR_WRAP_UTF8("AND", 3);
+    String        *AND        = SSTR_WRAP_C("AND");
     QueryParser   *and_parser = QParser_new(IxSearcher_Get_Schema(searcher),
                                             NULL, AND, NULL);
     QParser_Set_Heed_Colons(or_parser, true);

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Test/Store/TestFSDirHandle.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Store/TestFSDirHandle.c 
b/core/Lucy/Test/Store/TestFSDirHandle.c
index 5568255..ae478e6 100644
--- a/core/Lucy/Test/Store/TestFSDirHandle.c
+++ b/core/Lucy/Test/Store/TestFSDirHandle.c
@@ -43,10 +43,10 @@ TestFSDH_new() {
 
 static void
 test_all(TestBatchRunner *runner) {
-    String   *foo           = (String*)SSTR_WRAP_UTF8("foo", 3);
-    String   *boffo         = (String*)SSTR_WRAP_UTF8("boffo", 5);
-    String   *foo_boffo     = (String*)SSTR_WRAP_UTF8("foo/boffo", 9);
-    String   *test_dir      = (String*)SSTR_WRAP_UTF8("_fsdir_test", 11);
+    String   *foo           = (String*)SSTR_WRAP_C("foo");
+    String   *boffo         = (String*)SSTR_WRAP_C("boffo");
+    String   *foo_boffo     = (String*)SSTR_WRAP_C("foo/boffo");
+    String   *test_dir      = (String*)SSTR_WRAP_C("_fsdir_test");
     FSFolder *folder        = FSFolder_new(test_dir);
     bool      saw_foo       = false;
     bool      saw_boffo     = false;

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Test/Store/TestFSFileHandle.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Store/TestFSFileHandle.c 
b/core/Lucy/Test/Store/TestFSFileHandle.c
index f1b4d30..d156dc4 100644
--- a/core/Lucy/Test/Store/TestFSFileHandle.c
+++ b/core/Lucy/Test/Store/TestFSFileHandle.c
@@ -42,7 +42,7 @@ static void
 test_open(TestBatchRunner *runner) {
 
     FSFileHandle *fh;
-    String *test_filename = (String*)SSTR_WRAP_UTF8("_fstest", 7);
+    String *test_filename = (String*)SSTR_WRAP_C("_fstest");
 
     remove(Str_Get_Ptr8(test_filename));
 
@@ -108,7 +108,7 @@ test_Read_Write(TestBatchRunner *runner) {
     const char *bar = "bar";
     char buffer[12];
     char *buf = buffer;
-    String *test_filename = (String*)SSTR_WRAP_UTF8("_fstest", 7);
+    String *test_filename = (String*)SSTR_WRAP_C("_fstest");
 
     remove(Str_Get_Ptr8(test_filename));
     fh = FSFH_open(test_filename,
@@ -162,7 +162,7 @@ test_Read_Write(TestBatchRunner *runner) {
 
 static void
 test_Close(TestBatchRunner *runner) {
-    String *test_filename = (String*)SSTR_WRAP_UTF8("_fstest", 7);
+    String *test_filename = (String*)SSTR_WRAP_C("_fstest");
     FSFileHandle *fh;
 
     remove(Str_Get_Ptr8(test_filename));
@@ -199,7 +199,7 @@ test_Close(TestBatchRunner *runner) {
 
 static void
 test_Window(TestBatchRunner *runner) {
-    String *test_filename = (String*)SSTR_WRAP_UTF8("_fstest", 7);
+    String *test_filename = (String*)SSTR_WRAP_C("_fstest");
     FSFileHandle *fh;
     FileWindow *window = FileWindow_new();
     FileWindowIVARS *const window_ivars = FileWindow_IVARS(window);

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Test/Store/TestFSFolder.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Store/TestFSFolder.c 
b/core/Lucy/Test/Store/TestFSFolder.c
index d2fbbef..f4b1c5f 100644
--- a/core/Lucy/Test/Store/TestFSFolder.c
+++ b/core/Lucy/Test/Store/TestFSFolder.c
@@ -63,7 +63,7 @@ TestFSFolder_new() {
 static Folder*
 S_set_up() {
     rmdir("_fstest");
-    String   *test_dir = (String*)SSTR_WRAP_UTF8("_fstest", 7);
+    String   *test_dir = (String*)SSTR_WRAP_C("_fstest");
     FSFolder *folder = FSFolder_new(test_dir);
     FSFolder_Initialize(folder);
     if (!FSFolder_Check(folder)) {
@@ -89,7 +89,7 @@ S_tear_down() {
 static void
 test_Initialize_and_Check(TestBatchRunner *runner) {
     rmdir("_fstest");
-    String   *test_dir = (String*)SSTR_WRAP_UTF8("_fstest", 7);
+    String   *test_dir = (String*)SSTR_WRAP_C("_fstest");
     FSFolder *folder   = FSFolder_new(test_dir);
     TEST_FALSE(runner, FSFolder_Check(folder),
                "Check() returns false when folder dir doesn't exist");
@@ -105,9 +105,9 @@ static void
 test_protect_symlinks(TestBatchRunner *runner) {
 #ifdef ENABLE_SYMLINK_TESTS
     FSFolder *folder    = (FSFolder*)S_set_up();
-    String   *foo       = (String*)SSTR_WRAP_UTF8("foo", 3);
-    String   *bar       = (String*)SSTR_WRAP_UTF8("bar", 3);
-    String   *foo_boffo = (String*)SSTR_WRAP_UTF8("foo/boffo", 9);
+    String   *foo       = (String*)SSTR_WRAP_C("foo");
+    String   *bar       = (String*)SSTR_WRAP_C("bar");
+    String   *foo_boffo = (String*)SSTR_WRAP_C("foo/boffo");
 
     FSFolder_MkDir(folder, foo);
     FSFolder_MkDir(folder, bar);
@@ -158,14 +158,14 @@ void
 test_disallow_updir(TestBatchRunner *runner) {
     FSFolder *outer_folder = (FSFolder*)S_set_up();
 
-    String *foo = (String*)SSTR_WRAP_UTF8("foo", 3);
-    String *bar = (String*)SSTR_WRAP_UTF8("bar", 3);
+    String *foo = (String*)SSTR_WRAP_C("foo");
+    String *bar = (String*)SSTR_WRAP_C("bar");
     FSFolder_MkDir(outer_folder, foo);
     FSFolder_MkDir(outer_folder, bar);
 
-    String *inner_path = (String*)SSTR_WRAP_UTF8("_fstest/foo", 11);
+    String *inner_path = (String*)SSTR_WRAP_C("_fstest/foo");
     FSFolder *foo_folder = FSFolder_new(inner_path);
-    String *up_bar = (String*)SSTR_WRAP_UTF8("../bar", 6);
+    String *up_bar = (String*)SSTR_WRAP_C("../bar");
     TEST_FALSE(runner, FSFolder_Exists(foo_folder, up_bar),
                "up-dirs are inaccessible.");
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Test/Store/TestFileHandle.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Store/TestFileHandle.c 
b/core/Lucy/Test/Store/TestFileHandle.c
index c09e4fa..2e9850f 100644
--- a/core/Lucy/Test/Store/TestFileHandle.c
+++ b/core/Lucy/Test/Store/TestFileHandle.c
@@ -38,7 +38,7 @@ S_no_op_method(const void *vself) {
 
 static FileHandle*
 S_new_filehandle() {
-    String *class_name = SSTR_WRAP_UTF8("TestFileHandle", 14);
+    String *class_name = SSTR_WRAP_C("TestFileHandle");
     FileHandle *fh;
     Class *klass = Class_fetch_class(class_name);
     if (!klass) {
@@ -54,7 +54,7 @@ TestFH_Run_IMP(TestFileHandle *self, TestBatchRunner *runner) 
{
     TestBatchRunner_Plan(runner, (TestBatch*)self, 2);
 
     FileHandle *fh  = S_new_filehandle();
-    String     *foo = SSTR_WRAP_UTF8("foo", 3);
+    String     *foo = SSTR_WRAP_C("foo");
 
     TEST_TRUE(runner, Str_Equals_Utf8(FH_Get_Path(fh), "", 0), "Get_Path");
     FH_Set_Path(fh, foo);

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Test/Store/TestInStream.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Store/TestInStream.c 
b/core/Lucy/Test/Store/TestInStream.c
index 764fa83..3aaf42d 100644
--- a/core/Lucy/Test/Store/TestInStream.c
+++ b/core/Lucy/Test/Store/TestInStream.c
@@ -95,8 +95,8 @@ test_refill(TestBatchRunner *runner) {
 
 static void
 test_Clone_and_Reopen(TestBatchRunner *runner) {
-    String        *foo       = SSTR_WRAP_UTF8("foo", 3);
-    String        *bar       = SSTR_WRAP_UTF8("bar", 3);
+    String        *foo       = SSTR_WRAP_C("foo");
+    String        *bar       = SSTR_WRAP_C("bar");
     RAMFile       *file      = RAMFile_new(NULL, false);
     OutStream     *outstream = OutStream_open((Obj*)file);
     RAMFileHandle *fh;

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Test/Store/TestRAMDirHandle.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Store/TestRAMDirHandle.c 
b/core/Lucy/Test/Store/TestRAMDirHandle.c
index 22b1dff..15ebae7 100644
--- a/core/Lucy/Test/Store/TestRAMDirHandle.c
+++ b/core/Lucy/Test/Store/TestRAMDirHandle.c
@@ -33,9 +33,9 @@ TestRAMDH_new() {
 static void
 test_all(TestBatchRunner *runner) {
     RAMFolder *folder        = RAMFolder_new(NULL);
-    String    *foo           = (String*)SSTR_WRAP_UTF8("foo", 3);
-    String    *boffo         = (String*)SSTR_WRAP_UTF8("boffo", 5);
-    String    *foo_boffo     = (String*)SSTR_WRAP_UTF8("foo/boffo", 9);
+    String    *foo           = (String*)SSTR_WRAP_C("foo");
+    String    *boffo         = (String*)SSTR_WRAP_C("boffo");
+    String    *foo_boffo     = (String*)SSTR_WRAP_C("foo/boffo");
     bool       saw_foo       = false;
     bool       saw_boffo     = false;
     bool       foo_was_dir   = false;

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Test/TestSchema.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/TestSchema.c b/core/Lucy/Test/TestSchema.c
index b7b65b6..ae24751 100644
--- a/core/Lucy/Test/TestSchema.c
+++ b/core/Lucy/Test/TestSchema.c
@@ -42,7 +42,7 @@ TestSchema_init(TestSchema *self, bool use_alt_arch) {
 
     Schema_init((Schema*)self);
     FullTextType_Set_Highlightable(type, true);
-    String *content = (String*)SSTR_WRAP_UTF8("content", 7);
+    String *content = (String*)SSTR_WRAP_C("content");
     TestSchema_Spec_Field(self, content, (FieldType*)type);
     DECREF(type);
     DECREF(tokenizer);
@@ -70,7 +70,7 @@ test_Equals(TestBatchRunner *runner) {
     TestSchema *schema = TestSchema_new(false);
     TestSchema *arch_differs = TestSchema_new(true);
     TestSchema *spec_differs = TestSchema_new(false);
-    String     *content      = (String*)SSTR_WRAP_UTF8("content", 7);
+    String     *content      = (String*)SSTR_WRAP_C("content");
     FullTextType *type = (FullTextType*)TestSchema_Fetch_Type(spec_differs,
                                                               content);
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Test/TestSimple.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/TestSimple.c b/core/Lucy/Test/TestSimple.c
index 6e8adfd..93fd747 100644
--- a/core/Lucy/Test/TestSimple.c
+++ b/core/Lucy/Test/TestSimple.c
@@ -34,38 +34,38 @@ TestSimple_new() {
 static void
 test_simple(TestBatchRunner *runner) {
     RAMFolder *folder   = RAMFolder_new(NULL);
-    String    *language = SSTR_WRAP_UTF8("en", 2);
+    String    *language = SSTR_WRAP_C("en");
     Simple    *lucy     = Simple_new((Obj*)folder, language);
 
-    String *food_field = SSTR_WRAP_UTF8("food", 4);
+    String *food_field = SSTR_WRAP_C("food");
 
     {
         Doc *doc = Doc_new(NULL, 0);
-        String *value = SSTR_WRAP_UTF8("creamed corn", 12);
+        String *value = SSTR_WRAP_C("creamed corn");
         Doc_Store(doc, food_field, (Obj*)value);
         Simple_Add_Doc(lucy, doc);
         DECREF(doc);
 
-        String *query = SSTR_WRAP_UTF8("creamed", 7);
+        String *query = SSTR_WRAP_C("creamed");
         uint32_t num_results = Simple_Search(lucy, query, 0, 10);
         TEST_INT_EQ(runner, num_results, 1, "Search works right after add");
     }
 
     {
         Doc *doc = Doc_new(NULL, 0);
-        String *value = SSTR_WRAP_UTF8("creamed spinach", 15);
+        String *value = SSTR_WRAP_C("creamed spinach");
         Doc_Store(doc, food_field, (Obj*)value);
         Simple_Add_Doc(lucy, doc);
         DECREF(doc);
 
-        String *query = SSTR_WRAP_UTF8("creamed", 7);
+        String *query = SSTR_WRAP_C("creamed");
         uint32_t num_results = Simple_Search(lucy, query, 0, 10);
         TEST_INT_EQ(runner, num_results, 2, "Search returns total hits");
     }
 
     {
         Doc *doc = Doc_new(NULL, 0);
-        String *value = SSTR_WRAP_UTF8("creamed broccoli", 16);
+        String *value = SSTR_WRAP_C("creamed broccoli");
         Doc_Store(doc, food_field, (Obj*)value);
         Simple_Add_Doc(lucy, doc);
         DECREF(doc);
@@ -73,7 +73,7 @@ test_simple(TestBatchRunner *runner) {
         DECREF(lucy);
         lucy = Simple_new((Obj*)folder, language);
 
-        String *query = SSTR_WRAP_UTF8("cream", 5);
+        String *query = SSTR_WRAP_C("cream");
         uint32_t num_results = Simple_Search(lucy, query, 0, 10);
         TEST_INT_EQ(runner, num_results, 3, "commit upon destroy");
 
@@ -88,13 +88,13 @@ test_simple(TestBatchRunner *runner) {
 
     {
         Doc *doc = Doc_new(NULL, 0);
-        String *band_field = SSTR_WRAP_UTF8("band", 4);
-        String *value = SSTR_WRAP_UTF8("Cream", 5);
+        String *band_field = SSTR_WRAP_C("band");
+        String *value = SSTR_WRAP_C("Cream");
         Doc_Store(doc, band_field, (Obj*)value);
         Simple_Add_Doc(lucy, doc);
         DECREF(doc);
 
-        String *query = SSTR_WRAP_UTF8("cream", 5);
+        String *query = SSTR_WRAP_C("cream");
         uint32_t num_results = Simple_Search(lucy, query, 0, 10);
         TEST_INT_EQ(runner, num_results, 4,
                     "Search uses correct EasyAnalyzer");

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Test/TestUtils.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/TestUtils.c b/core/Lucy/Test/TestUtils.c
index 68171dc..6659d19 100644
--- a/core/Lucy/Test/TestUtils.c
+++ b/core/Lucy/Test/TestUtils.c
@@ -76,14 +76,14 @@ TestUtils_make_poly_query(uint32_t boolop, ...) {
 
 TermQuery*
 TestUtils_make_term_query(const char *field, const char *term) {
-    String *field_str = (String*)SSTR_WRAP_UTF8(field, strlen(field));
-    String *term_str  = (String*)SSTR_WRAP_UTF8(term, strlen(term));
+    String *field_str = (String*)SSTR_WRAP_C(field);
+    String *term_str  = (String*)SSTR_WRAP_C(term);
     return TermQuery_new((String*)field_str, (Obj*)term_str);
 }
 
 PhraseQuery*
 TestUtils_make_phrase_query(const char *field, ...) {
-    String *field_str = (String*)SSTR_WRAP_UTF8(field, strlen(field));
+    String *field_str = (String*)SSTR_WRAP_C(field);
     va_list args;
     Vector *terms = Vec_new(0);
     PhraseQuery *query;
@@ -102,9 +102,9 @@ TestUtils_make_phrase_query(const char *field, ...) {
 
 LeafQuery*
 TestUtils_make_leaf_query(const char *field, const char *term) {
-    String *term_str  = (String*)SSTR_WRAP_UTF8(term, strlen(term));
+    String *term_str  = (String*)SSTR_WRAP_C(term);
     String *field_str = field
-                       ? (String*)SSTR_WRAP_UTF8(field, strlen(field))
+                       ? (String*)SSTR_WRAP_C(field)
                        : NULL;
     return LeafQuery_new(field_str, term_str);
 }
@@ -120,9 +120,9 @@ RangeQuery*
 TestUtils_make_range_query(const char *field, const char *lower_term,
                            const char *upper_term, bool include_lower,
                            bool include_upper) {
-    String *f     = (String*)SSTR_WRAP_UTF8(field, strlen(field));
-    String *lterm = (String*)SSTR_WRAP_UTF8(lower_term, strlen(lower_term));
-    String *uterm = (String*)SSTR_WRAP_UTF8(upper_term, strlen(upper_term));
+    String *f     = (String*)SSTR_WRAP_C(field);
+    String *lterm = (String*)SSTR_WRAP_C(lower_term);
+    String *uterm = (String*)SSTR_WRAP_C(upper_term);
     return RangeQuery_new(f, (Obj*)lterm, (Obj*)uterm, include_lower,
                           include_upper);
 }

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Test/Util/TestIndexFileNames.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Util/TestIndexFileNames.c 
b/core/Lucy/Test/Util/TestIndexFileNames.c
index 98f6cfb..a9d5708 100644
--- a/core/Lucy/Test/Util/TestIndexFileNames.c
+++ b/core/Lucy/Test/Util/TestIndexFileNames.c
@@ -30,7 +30,7 @@ TestIxFileNames_new() {
 static void
 S_test_local_part(TestBatchRunner *runner, const char *source,
                   const char *wanted, const char *test_name) {
-    String *source_str = SSTR_WRAP_UTF8(source, strlen(source));
+    String *source_str = SSTR_WRAP_C(source);
     String *got = IxFileNames_local_part(source_str);
     TEST_TRUE(runner, Str_Equals_Utf8(got, wanted, strlen(wanted)), test_name);
     DECREF(got);
@@ -51,7 +51,7 @@ test_local_part(TestBatchRunner *runner) {
 static void
 S_test_extract_gen(TestBatchRunner *runner, const char *name, uint64_t gen,
                    const char *test_name) {
-    String *source = SSTR_WRAP_UTF8(name, strlen(name));
+    String *source = SSTR_WRAP_C(name);
     TEST_TRUE(runner, IxFileNames_extract_gen(source) == gen, test_name);
 }
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/core/Lucy/Test/Util/TestJson.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Util/TestJson.c b/core/Lucy/Test/Util/TestJson.c
index 1286d6b..5310cee 100644
--- a/core/Lucy/Test/Util/TestJson.c
+++ b/core/Lucy/Test/Util/TestJson.c
@@ -202,7 +202,7 @@ test_spew_and_slurp(TestBatchRunner *runner) {
     Obj *dump = S_make_dump();
     Folder *folder = (Folder*)RAMFolder_new(NULL);
 
-    String *foo = (String*)SSTR_WRAP_UTF8("foo", 3);
+    String *foo = (String*)SSTR_WRAP_C("foo");
     bool result = Json_spew_json(dump, folder, foo);
     TEST_TRUE(runner, result, "spew_json returns true on success");
     TEST_TRUE(runner, Folder_Exists(folder, foo),
@@ -220,14 +220,14 @@ test_spew_and_slurp(TestBatchRunner *runner) {
               "Failed spew_json sets global error");
 
     Err_set_error(NULL);
-    String *bar = (String*)SSTR_WRAP_UTF8("bar", 3);
+    String *bar = (String*)SSTR_WRAP_C("bar");
     got = Json_slurp_json(folder, bar);
     TEST_TRUE(runner, got == NULL,
               "slurp_json returns NULL when file doesn't exist");
     TEST_TRUE(runner, Err_get_error() != NULL,
               "Failed slurp_json sets global error");
 
-    String *boffo = (String*)SSTR_WRAP_UTF8("boffo", 5);
+    String *boffo = (String*)SSTR_WRAP_C("boffo");
 
     FileHandle *fh
         = Folder_Open_FileHandle(folder, boffo, FH_CREATE | FH_WRITE_ONLY);
@@ -248,7 +248,7 @@ test_spew_and_slurp(TestBatchRunner *runner) {
 
 static void
 S_verify_bad_syntax(TestBatchRunner *runner, const char *bad, const char 
*mess) {
-    String *has_errors = SSTR_WRAP_UTF8(bad, strlen(bad));
+    String *has_errors = SSTR_WRAP_C(bad);
     Err_set_error(NULL);
     Obj *not_json = Json_from_json(has_errors);
     TEST_TRUE(runner, not_json == NULL, "from_json returns NULL: %s", mess);

http://git-wip-us.apache.org/repos/asf/lucy/blob/0cf2343c/perl/buildlib/Lucy/Build/Binding/Misc.pm
----------------------------------------------------------------------
diff --git a/perl/buildlib/Lucy/Build/Binding/Misc.pm 
b/perl/buildlib/Lucy/Build/Binding/Misc.pm
index 77fd9af..0846021 100644
--- a/perl/buildlib/Lucy/Build/Binding/Misc.pm
+++ b/perl/buildlib/Lucy/Build/Binding/Misc.pm
@@ -88,8 +88,7 @@ STORABLE_thaw(blank_obj, cloning, serialized_sv)
 PPCODE:
 {
     char *class_name = HvNAME(SvSTASH(SvRV(blank_obj)));
-    cfish_String *class_name_str
-        = CFISH_SSTR_WRAP_UTF8(class_name, strlen(class_name));
+    cfish_String *class_name_str = CFISH_SSTR_WRAP_C(class_name);
     cfish_Class *klass = cfish_Class_singleton(class_name_str, NULL);
     STRLEN len;
     char *ptr = SvPV(serialized_sv, len);

Reply via email to