lucy-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From nwelln...@apache.org
Subject [lucy-commits] [07/24] Rename CharBuf to String (cnick Str)
Date Sun, 01 Sep 2013 20:16:55 GMT
http://git-wip-us.apache.org/repos/asf/lucy/blob/2c3dbf15/core/Lucy/Store/FSFolder.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Store/FSFolder.c b/core/Lucy/Store/FSFolder.c
index 6dd0ee3..082783d 100644
--- a/core/Lucy/Store/FSFolder.c
+++ b/core/Lucy/Store/FSFolder.c
@@ -46,43 +46,43 @@
 #include "Lucy/Store/OutStream.h"
 #include "Lucy/Util/IndexFileNames.h"
 
-// Return a CharBuf containing a platform-specific absolute filepath.
-static CharBuf*
-S_fullpath(FSFolder *self, const CharBuf *path);
+// Return a String containing a platform-specific absolute filepath.
+static String*
+S_fullpath(FSFolder *self, const String *path);
 
 // Return true if the supplied path is a directory.
 static bool
-S_dir_ok(const CharBuf *path);
+S_dir_ok(const String *path);
 
 // Create a directory, or set Err_error and return false.
 static bool
-S_create_dir(const CharBuf *path);
+S_create_dir(const String *path);
 
 // Return true unless the supplied path contains a slash.
 static bool
-S_is_local_entry(const CharBuf *path);
+S_is_local_entry(const String *path);
 
 // Return true if the supplied path is absolute.
 static bool
-S_is_absolute(const CharBuf *path);
+S_is_absolute(const String *path);
 
 // Transform a possibly relative path into an absolute path.
-static CharBuf*
-S_absolutify(const CharBuf *path);
+static String*
+S_absolutify(const String *path);
 
 // Create a hard link.
 static bool
-S_hard_link(CharBuf *from_path, CharBuf *to_path);
+S_hard_link(String *from_path, String *to_path);
 
 FSFolder*
-FSFolder_new(const CharBuf *path) {
+FSFolder_new(const String *path) {
     FSFolder *self = (FSFolder*)VTable_Make_Obj(FSFOLDER);
     return FSFolder_init(self, path);
 }
 
 FSFolder*
-FSFolder_init(FSFolder *self, const CharBuf *path) {
-    CharBuf *abs_path = S_absolutify(path);
+FSFolder_init(FSFolder *self, const String *path) {
+    String *abs_path = S_absolutify(path);
     Folder_init((Folder*)self, abs_path);
     DECREF(abs_path);
     return self;
@@ -105,9 +105,9 @@ FSFolder_Check_IMP(FSFolder *self) {
 }
 
 FileHandle*
-FSFolder_Local_Open_FileHandle_IMP(FSFolder *self, const CharBuf *name,
+FSFolder_Local_Open_FileHandle_IMP(FSFolder *self, const String *name,
                                    uint32_t flags) {
-    CharBuf      *fullpath = S_fullpath(self, name);
+    String       *fullpath = S_fullpath(self, name);
     FSFileHandle *fh = FSFH_open(fullpath, flags);
     if (!fh) { ERR_ADD_FRAME(Err_get_error()); }
     DECREF(fullpath);
@@ -115,8 +115,8 @@ FSFolder_Local_Open_FileHandle_IMP(FSFolder *self, const CharBuf *name,
 }
 
 bool
-FSFolder_Local_MkDir_IMP(FSFolder *self, const CharBuf *name) {
-    CharBuf *dir = S_fullpath(self, name);
+FSFolder_Local_MkDir_IMP(FSFolder *self, const String *name) {
+    String *dir = S_fullpath(self, name);
     bool result = S_create_dir(dir);
     if (!result) { ERR_ADD_FRAME(Err_get_error()); }
     DECREF(dir);
@@ -132,7 +132,7 @@ FSFolder_Local_Open_Dir_IMP(FSFolder *self) {
 }
 
 bool
-FSFolder_Local_Exists_IMP(FSFolder *self, const CharBuf *name) {
+FSFolder_Local_Exists_IMP(FSFolder *self, const String *name) {
     FSFolderIVARS *const ivars = FSFolder_IVARS(self);
     if (Hash_Fetch(ivars->entries, (Obj*)name)) {
         return true;
@@ -142,9 +142,9 @@ FSFolder_Local_Exists_IMP(FSFolder *self, const CharBuf *name) {
     }
     else {
         struct stat stat_buf;
-        CharBuf *fullpath = S_fullpath(self, name);
+        String *fullpath = S_fullpath(self, name);
         bool retval = false;
-        if (stat((char*)CB_Get_Ptr8(fullpath), &stat_buf) != -1) {
+        if (stat((char*)Str_Get_Ptr8(fullpath), &stat_buf) != -1) {
             retval = true;
         }
         DECREF(fullpath);
@@ -153,7 +153,7 @@ FSFolder_Local_Exists_IMP(FSFolder *self, const CharBuf *name) {
 }
 
 bool
-FSFolder_Local_Is_Directory_IMP(FSFolder *self, const CharBuf *name) {
+FSFolder_Local_Is_Directory_IMP(FSFolder *self, const String *name) {
     FSFolderIVARS *const ivars = FSFolder_IVARS(self);
 
     // Check for a cached object, then fall back to a system call.
@@ -162,7 +162,7 @@ FSFolder_Local_Is_Directory_IMP(FSFolder *self, const CharBuf *name) {
         return true;
     }
     else {
-        CharBuf *fullpath = S_fullpath(self, name);
+        String *fullpath = S_fullpath(self, name);
         bool result = S_dir_ok(fullpath);
         DECREF(fullpath);
         return result;
@@ -170,13 +170,13 @@ FSFolder_Local_Is_Directory_IMP(FSFolder *self, const CharBuf *name) {
 }
 
 bool
-FSFolder_Rename_IMP(FSFolder *self, const CharBuf* from, const CharBuf *to) {
-    CharBuf *from_path = S_fullpath(self, from);
-    CharBuf *to_path   = S_fullpath(self, to);
-    bool     retval    = !rename((char*)CB_Get_Ptr8(from_path),
-                                 (char*)CB_Get_Ptr8(to_path));
+FSFolder_Rename_IMP(FSFolder *self, const String* from, const String *to) {
+    String *from_path = S_fullpath(self, from);
+    String *to_path   = S_fullpath(self, to);
+    bool     retval    = !rename((char*)Str_Get_Ptr8(from_path),
+                                 (char*)Str_Get_Ptr8(to_path));
     if (!retval) {
-        Err_set_error(Err_new(CB_newf("rename from '%o' to '%o' failed: %s",
+        Err_set_error(Err_new(Str_newf("rename from '%o' to '%o' failed: %s",
                                       from_path, to_path, strerror(errno))));
     }
     DECREF(from_path);
@@ -185,10 +185,10 @@ FSFolder_Rename_IMP(FSFolder *self, const CharBuf* from, const CharBuf *to) {
 }
 
 bool
-FSFolder_Hard_Link_IMP(FSFolder *self, const CharBuf *from,
-                       const CharBuf *to) {
-    CharBuf *from_path = S_fullpath(self, from);
-    CharBuf *to_path   = S_fullpath(self, to);
+FSFolder_Hard_Link_IMP(FSFolder *self, const String *from,
+                       const String *to) {
+    String *from_path = S_fullpath(self, from);
+    String *to_path   = S_fullpath(self, to);
     bool     retval    = S_hard_link(from_path, to_path);
     DECREF(from_path);
     DECREF(to_path);
@@ -196,11 +196,11 @@ FSFolder_Hard_Link_IMP(FSFolder *self, const CharBuf *from,
 }
 
 bool
-FSFolder_Local_Delete_IMP(FSFolder *self, const CharBuf *name) {
+FSFolder_Local_Delete_IMP(FSFolder *self, const String *name) {
     FSFolderIVARS *const ivars = FSFolder_IVARS(self);
 
-    CharBuf *fullpath = S_fullpath(self, name);
-    char    *path_ptr = (char*)CB_Get_Ptr8(fullpath);
+    String *fullpath = S_fullpath(self, name);
+    char    *path_ptr = (char*)Str_Get_Ptr8(fullpath);
 #ifdef CHY_REMOVE_ZAPS_DIRS
     bool result = !remove(path_ptr);
 #else
@@ -218,18 +218,18 @@ FSFolder_Close_IMP(FSFolder *self) {
 }
 
 Folder*
-FSFolder_Local_Find_Folder_IMP(FSFolder *self, const CharBuf *name) {
+FSFolder_Local_Find_Folder_IMP(FSFolder *self, const String *name) {
     FSFolderIVARS *const ivars = FSFolder_IVARS(self);
 
     Folder *subfolder = NULL;
-    if (!name || !CB_Get_Size(name)) {
+    if (!name || !Str_Get_Size(name)) {
         // No entity can be identified by NULL or empty string.
         return NULL;
     }
     else if (!S_is_local_entry(name)) {
         return NULL;
     }
-    else if (CB_Starts_With_Str(name, ".", 1)) {
+    else if (Str_Starts_With_Str(name, ".", 1)) {
         // Don't allow access outside of the main dir.
         return NULL;
     }
@@ -242,7 +242,7 @@ FSFolder_Local_Find_Folder_IMP(FSFolder *self, const CharBuf *name) {
         }
     }
 
-    CharBuf *fullpath = S_fullpath(self, name);
+    String *fullpath = S_fullpath(self, name);
     if (S_dir_ok(fullpath)) {
         subfolder = (Folder*)FSFolder_new(fullpath);
         if (!subfolder) {
@@ -251,7 +251,7 @@ FSFolder_Local_Find_Folder_IMP(FSFolder *self, const CharBuf *name) {
         }
         // Try to open a CompoundFileReader. On failure, just use the
         // existing folder.
-        CharBuf *cfmeta_file = (CharBuf*)SSTR_WRAP_STR("cfmeta.json", 11);
+        String *cfmeta_file = (String*)SSTR_WRAP_STR("cfmeta.json", 11);
         if (Folder_Local_Exists(subfolder, cfmeta_file)) {
             CompoundFileReader *cf_reader = CFReader_open(subfolder);
             if (cf_reader) {
@@ -266,29 +266,29 @@ FSFolder_Local_Find_Folder_IMP(FSFolder *self, const CharBuf *name) {
     return subfolder;
 }
 
-static CharBuf*
-S_fullpath(FSFolder *self, const CharBuf *path) {
+static String*
+S_fullpath(FSFolder *self, const String *path) {
     FSFolderIVARS *const ivars = FSFolder_IVARS(self);
-    CharBuf *fullpath = CB_newf("%o%s%o", ivars->path, DIR_SEP, path);
+    String *fullpath = Str_newf("%o%s%o", ivars->path, DIR_SEP, path);
     if (DIR_SEP[0] != '/') {
-        CB_Swap_Chars(fullpath, '/', DIR_SEP[0]);
+        Str_Swap_Chars(fullpath, '/', DIR_SEP[0]);
     }
     return fullpath;
 }
 
 static bool
-S_dir_ok(const CharBuf *path) {
+S_dir_ok(const String *path) {
     struct stat stat_buf;
-    if (stat((char*)CB_Get_Ptr8(path), &stat_buf) != -1) {
+    if (stat((char*)Str_Get_Ptr8(path), &stat_buf) != -1) {
         if (stat_buf.st_mode & S_IFDIR) { return true; }
     }
     return false;
 }
 
 static bool
-S_create_dir(const CharBuf *path) {
-    if (-1 == chy_makedir((char*)CB_Get_Ptr8(path), 0777)) {
-        Err_set_error(Err_new(CB_newf("Couldn't create directory '%o': %s",
+S_create_dir(const String *path) {
+    if (-1 == chy_makedir((char*)Str_Get_Ptr8(path), 0777)) {
+        Err_set_error(Err_new(Str_newf("Couldn't create directory '%o': %s",
                                       path, strerror(errno))));
         return false;
     }
@@ -296,7 +296,7 @@ S_create_dir(const CharBuf *path) {
 }
 
 static bool
-S_is_local_entry(const CharBuf *path) {
+S_is_local_entry(const String *path) {
     StackString *scratch = SSTR_WRAP(path);
     uint32_t code_point;
     while (0 != (code_point = SStr_Nibble(scratch))) {
@@ -317,21 +317,21 @@ S_is_local_entry(const CharBuf *path) {
 #include <windows.h>
 
 static bool
-S_is_absolute(const CharBuf *path) {
-    uint32_t code_point = CB_Code_Point_At(path, 0);
+S_is_absolute(const String *path) {
+    uint32_t code_point = Str_Code_Point_At(path, 0);
 
     if (isalpha(code_point)) {
-        code_point = CB_Code_Point_At(path, 1);
+        code_point = Str_Code_Point_At(path, 1);
         if (code_point != ':') { return false; }
-        code_point = CB_Code_Point_At(path, 2);
+        code_point = Str_Code_Point_At(path, 2);
     }
 
     return code_point == '\\' || code_point == '/';
 }
 
-static CharBuf*
-S_absolutify(const CharBuf *path) {
-    if (S_is_absolute(path)) { return CB_Clone(path); }
+static String*
+S_absolutify(const String *path) {
+    if (S_is_absolute(path)) { return Str_Clone(path); }
 
     DWORD  cwd_len = GetCurrentDirectory(0, NULL);
     char  *cwd     = (char*)MALLOCATE(cwd_len);
@@ -339,23 +339,23 @@ S_absolutify(const CharBuf *path) {
     if (res == 0 || res > cwd_len) {
         THROW(ERR, "GetCurrentDirectory failed");
     }
-    CharBuf *abs_path = CB_newf("%s\\%o", cwd, path);
+    String *abs_path = Str_newf("%s\\%o", cwd, path);
     FREEMEM(cwd);
 
     return abs_path;
 }
 
 static bool
-S_hard_link(CharBuf *from_path, CharBuf *to_path) {
-    char *from8 = (char*)CB_Get_Ptr8(from_path);
-    char *to8   = (char*)CB_Get_Ptr8(to_path);
+S_hard_link(String *from_path, String *to_path) {
+    char *from8 = (char*)Str_Get_Ptr8(from_path);
+    char *to8   = (char*)Str_Get_Ptr8(to_path);
 
     if (CreateHardLink(to8, from8, NULL)) {
         return true;
     }
     else {
         char *win_error = Err_win_error();
-        Err_set_error(Err_new(CB_newf("CreateHardLink for new file '%o' from '%o' failed: %s",
+        Err_set_error(Err_new(Str_newf("CreateHardLink for new file '%o' from '%o' failed: %s",
                                       to_path, from_path, win_error)));
         FREEMEM(win_error);
         return false;
@@ -365,29 +365,29 @@ S_hard_link(CharBuf *from_path, CharBuf *to_path) {
 #elif (defined(CHY_HAS_UNISTD_H))
 
 static bool
-S_is_absolute(const CharBuf *path) {
-    return CB_Starts_With_Str(path, DIR_SEP, 1);
+S_is_absolute(const String *path) {
+    return Str_Starts_With_Str(path, DIR_SEP, 1);
 }
 
-static CharBuf*
-S_absolutify(const CharBuf *path) {
-    if (S_is_absolute(path)) { return CB_Clone(path); }
+static String*
+S_absolutify(const String *path) {
+    if (S_is_absolute(path)) { return Str_Clone(path); }
 
     char *cwd = getcwd(NULL, 0);
     if (!cwd) { THROW(ERR, "getcwd failed"); }
-    CharBuf *abs_path = CB_newf("%s" DIR_SEP "%o", cwd, path);
+    String *abs_path = Str_newf("%s" DIR_SEP "%o", cwd, path);
     free(cwd);
 
     return abs_path;
 }
 
 static bool
-S_hard_link(CharBuf *from_path, CharBuf *to_path) {
-    char *from8 = (char*)CB_Get_Ptr8(from_path);
-    char *to8   = (char*)CB_Get_Ptr8(to_path);
+S_hard_link(String *from_path, String *to_path) {
+    char *from8 = (char*)Str_Get_Ptr8(from_path);
+    char *to8   = (char*)Str_Get_Ptr8(to_path);
 
     if (-1 == link(from8, to8)) {
-        Err_set_error(Err_new(CB_newf("hard link for new file '%o' from '%o' failed: %s",
+        Err_set_error(Err_new(Str_newf("hard link for new file '%o' from '%o' failed: %s",
                                       to_path, from_path, strerror(errno))));
         return false;
     }

http://git-wip-us.apache.org/repos/asf/lucy/blob/2c3dbf15/core/Lucy/Store/FSFolder.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Store/FSFolder.cfh b/core/Lucy/Store/FSFolder.cfh
index 193db23..c806aac 100644
--- a/core/Lucy/Store/FSFolder.cfh
+++ b/core/Lucy/Store/FSFolder.cfh
@@ -25,7 +25,7 @@ parcel Lucy;
 public class Lucy::Store::FSFolder inherits Lucy::Store::Folder {
 
     inert incremented FSFolder*
-    new(const CharBuf *path);
+    new(const String *path);
 
     /**
      * @param path Location of the index. If the specified directory does
@@ -34,7 +34,7 @@ public class Lucy::Store::FSFolder inherits Lucy::Store::Folder {
      * be necessary to create the directory yourself.
      */
     public inert FSFolder*
-    init(FSFolder *self, const CharBuf *path);
+    init(FSFolder *self, const String *path);
 
     /** Attempt to create the directory specified by <code>path</code>.
      */
@@ -51,32 +51,32 @@ public class Lucy::Store::FSFolder inherits Lucy::Store::Folder {
     Close(FSFolder *self);
 
     incremented nullable FileHandle*
-    Local_Open_FileHandle(FSFolder *self, const CharBuf *name,
+    Local_Open_FileHandle(FSFolder *self, const String *name,
                           uint32_t flags);
 
     incremented nullable DirHandle*
     Local_Open_Dir(FSFolder *self);
 
     bool
-    Local_MkDir(FSFolder *self, const CharBuf *name);
+    Local_MkDir(FSFolder *self, const String *name);
 
     bool
-    Local_Exists(FSFolder *self, const CharBuf *name);
+    Local_Exists(FSFolder *self, const String *name);
 
     bool
-    Local_Is_Directory(FSFolder *self, const CharBuf *name);
+    Local_Is_Directory(FSFolder *self, const String *name);
 
     nullable Folder*
-    Local_Find_Folder(FSFolder *self, const CharBuf *name);
+    Local_Find_Folder(FSFolder *self, const String *name);
 
     bool
-    Local_Delete(FSFolder *self, const CharBuf *name);
+    Local_Delete(FSFolder *self, const String *name);
 
     public bool
-    Rename(FSFolder *self, const CharBuf* from, const CharBuf *to);
+    Rename(FSFolder *self, const String* from, const String *to);
 
     public bool
-    Hard_Link(FSFolder *self, const CharBuf *from, const CharBuf *to);
+    Hard_Link(FSFolder *self, const String *from, const String *to);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/2c3dbf15/core/Lucy/Store/FileHandle.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Store/FileHandle.c b/core/Lucy/Store/FileHandle.c
index 143df0c..27e2bb6 100644
--- a/core/Lucy/Store/FileHandle.c
+++ b/core/Lucy/Store/FileHandle.c
@@ -22,9 +22,9 @@
 int32_t FH_object_count = 0;
 
 FileHandle*
-FH_do_open(FileHandle *self, const CharBuf *path, uint32_t flags) {
+FH_do_open(FileHandle *self, const String *path, uint32_t flags) {
     FileHandleIVARS *const ivars = FH_IVARS(self);
-    ivars->path    = path ? CB_Clone(path) : CB_new(0);
+    ivars->path    = path ? Str_Clone(path) : Str_new(0);
     ivars->flags   = flags;
 
     // Track number of live FileHandles released into the wild.
@@ -53,13 +53,13 @@ FH_Grow_IMP(FileHandle *self, int64_t length) {
 }
 
 void
-FH_Set_Path_IMP(FileHandle *self, const CharBuf *path) {
+FH_Set_Path_IMP(FileHandle *self, const String *path) {
     FileHandleIVARS *const ivars = FH_IVARS(self);
     DECREF(ivars->path);
-    ivars->path = CB_Clone(path);
+    ivars->path = Str_Clone(path);
 }
 
-CharBuf*
+String*
 FH_Get_Path_IMP(FileHandle *self) {
     return FH_IVARS(self)->path;
 }

http://git-wip-us.apache.org/repos/asf/lucy/blob/2c3dbf15/core/Lucy/Store/FileHandle.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Store/FileHandle.cfh b/core/Lucy/Store/FileHandle.cfh
index 4efe0a4..75f849a 100644
--- a/core/Lucy/Store/FileHandle.cfh
+++ b/core/Lucy/Store/FileHandle.cfh
@@ -35,7 +35,7 @@ parcel Lucy;
 abstract class Lucy::Store::FileHandle cnick FH
     inherits Clownfish::Obj {
 
-    CharBuf *path;
+    String *path;
     uint32_t flags;
 
     /* Integer which is incremented each time a FileHandle is created and
@@ -52,7 +52,7 @@ abstract class Lucy::Store::FileHandle cnick FH
      * behaviors.
      */
     inert nullable FileHandle*
-    do_open(FileHandle *self, const CharBuf *path = NULL, uint32_t flags);
+    do_open(FileHandle *self, const String *path = NULL, uint32_t flags);
 
     /** Ensure that the FileWindow's buffer provides access to file data for
      * <code>len</code> bytes starting at <code>offset</code>.
@@ -118,11 +118,11 @@ abstract class Lucy::Store::FileHandle cnick FH
     /** Set the object's <code>path</code> attribute.
      */
     void
-    Set_Path(FileHandle *self, const CharBuf *path);
+    Set_Path(FileHandle *self, const String *path);
 
     /** Return the object's <code>path</code> attribute.
      */
-    nullable CharBuf*
+    nullable String*
     Get_Path(FileHandle *self);
 
     /** Invokes Close(), but ignores whether it succeeds or fails.

http://git-wip-us.apache.org/repos/asf/lucy/blob/2c3dbf15/core/Lucy/Store/Folder.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Store/Folder.c b/core/Lucy/Store/Folder.c
index b3c29d7..5a3c815 100644
--- a/core/Lucy/Store/Folder.c
+++ b/core/Lucy/Store/Folder.c
@@ -29,7 +29,7 @@
 #include "Lucy/Util/IndexFileNames.h"
 
 Folder*
-Folder_init(Folder *self, const CharBuf *path) {
+Folder_init(Folder *self, const String *path) {
     FolderIVARS *const ivars = Folder_IVARS(self);
 
     // Init.
@@ -37,15 +37,15 @@ Folder_init(Folder *self, const CharBuf *path) {
 
     // Copy.
     if (path == NULL) {
-        ivars->path = CB_new_from_trusted_utf8("", 0);
+        ivars->path = Str_new_from_trusted_utf8("", 0);
     }
     else {
         // Copy path, strip trailing slash or equivalent.
-        if (CB_Ends_With_Str(path, DIR_SEP, strlen(DIR_SEP))) {
-            ivars->path = CB_SubString(path, 0, CB_Length(path) - 1);
+        if (Str_Ends_With_Str(path, DIR_SEP, strlen(DIR_SEP))) {
+            ivars->path = Str_SubString(path, 0, Str_Length(path) - 1);
         }
         else {
-            ivars->path = CB_Clone(path);
+            ivars->path = Str_Clone(path);
         }
     }
 
@@ -62,19 +62,19 @@ Folder_Destroy_IMP(Folder *self) {
 }
 
 InStream*
-Folder_Open_In_IMP(Folder *self, const CharBuf *path) {
+Folder_Open_In_IMP(Folder *self, const String *path) {
     Folder *enclosing_folder = Folder_Enclosing_Folder(self, path);
     InStream *instream = NULL;
 
     if (enclosing_folder) {
         StackString *name = IxFileNames_local_part(path, SStr_BLANK());
-        instream = Folder_Local_Open_In(enclosing_folder, (CharBuf*)name);
+        instream = Folder_Local_Open_In(enclosing_folder, (String*)name);
         if (!instream) {
             ERR_ADD_FRAME(Err_get_error());
         }
     }
     else {
-        Err_set_error(Err_new(CB_newf("Invalid path: '%o'", path)));
+        Err_set_error(Err_new(Str_newf("Invalid path: '%o'", path)));
     }
 
     return instream;
@@ -84,7 +84,7 @@ Folder_Open_In_IMP(Folder *self, const CharBuf *path) {
  * necessary because calling CFReader_Local_Open_FileHandle() won't find
  * virtual files.  No other class should need to override it. */
 InStream*
-Folder_Local_Open_In_IMP(Folder *self, const CharBuf *name) {
+Folder_Local_Open_In_IMP(Folder *self, const String *name) {
     FileHandle *fh = Folder_Local_Open_FileHandle(self, name, FH_READ_ONLY);
     InStream *instream = NULL;
     if (fh) {
@@ -101,7 +101,7 @@ Folder_Local_Open_In_IMP(Folder *self, const CharBuf *name) {
 }
 
 OutStream*
-Folder_Open_Out_IMP(Folder *self, const CharBuf *path) {
+Folder_Open_Out_IMP(Folder *self, const String *path) {
     const uint32_t flags = FH_WRITE_ONLY | FH_CREATE | FH_EXCLUSIVE;
     FileHandle *fh = Folder_Open_FileHandle(self, path, flags);
     OutStream *outstream = NULL;
@@ -119,7 +119,7 @@ Folder_Open_Out_IMP(Folder *self, const CharBuf *path) {
 }
 
 FileHandle*
-Folder_Open_FileHandle_IMP(Folder *self, const CharBuf *path,
+Folder_Open_FileHandle_IMP(Folder *self, const String *path,
                            uint32_t flags) {
     Folder *enclosing_folder = Folder_Enclosing_Folder(self, path);
     FileHandle *fh = NULL;
@@ -127,24 +127,24 @@ Folder_Open_FileHandle_IMP(Folder *self, const CharBuf *path,
     if (enclosing_folder) {
         StackString *name = IxFileNames_local_part(path, SStr_BLANK());
         fh = Folder_Local_Open_FileHandle(enclosing_folder,
-                                          (CharBuf*)name, flags);
+                                          (String*)name, flags);
         if (!fh) {
             ERR_ADD_FRAME(Err_get_error());
         }
     }
     else {
-        Err_set_error(Err_new(CB_newf("Invalid path: '%o'", path)));
+        Err_set_error(Err_new(Str_newf("Invalid path: '%o'", path)));
     }
 
     return fh;
 }
 
 bool
-Folder_Delete_IMP(Folder *self, const CharBuf *path) {
+Folder_Delete_IMP(Folder *self, const String *path) {
     Folder *enclosing_folder = Folder_Enclosing_Folder(self, path);
     if (enclosing_folder) {
         StackString *name = IxFileNames_local_part(path, SStr_BLANK());
-        bool result = Folder_Local_Delete(enclosing_folder, (CharBuf*)name);
+        bool result = Folder_Local_Delete(enclosing_folder, (String*)name);
         return result;
     }
     else {
@@ -153,38 +153,38 @@ Folder_Delete_IMP(Folder *self, const CharBuf *path) {
 }
 
 bool
-Folder_Delete_Tree_IMP(Folder *self, const CharBuf *path) {
+Folder_Delete_Tree_IMP(Folder *self, const String *path) {
     Folder *enclosing_folder = Folder_Enclosing_Folder(self, path);
 
     // Don't allow Folder to delete itself.
-    if (!path || !CB_Get_Size(path)) { return false; }
+    if (!path || !Str_Get_Size(path)) { return false; }
 
     if (enclosing_folder) {
         StackString *local = IxFileNames_local_part(path, SStr_BLANK());
-        if (Folder_Local_Is_Directory(enclosing_folder, (CharBuf*)local)) {
+        if (Folder_Local_Is_Directory(enclosing_folder, (String*)local)) {
             Folder *inner_folder
-                = Folder_Local_Find_Folder(enclosing_folder, (CharBuf*)local);
+                = Folder_Local_Find_Folder(enclosing_folder, (String*)local);
             DirHandle *dh = Folder_Local_Open_Dir(inner_folder);
             if (dh) {
                 VArray *files = VA_new(20);
                 VArray *dirs  = VA_new(20);
                 while (DH_Next(dh)) {
-                    CharBuf *entry = DH_Get_Entry(dh);
-                    VA_Push(files, (Obj*)CB_Clone(entry));
+                    String *entry = DH_Get_Entry(dh);
+                    VA_Push(files, (Obj*)Str_Clone(entry));
                     if (DH_Entry_Is_Dir(dh) && !DH_Entry_Is_Symlink(dh)) {
-                        VA_Push(dirs, (Obj*)CB_Clone(entry));
+                        VA_Push(dirs, (Obj*)Str_Clone(entry));
                     }
                     DECREF(entry);
                 }
                 for (uint32_t i = 0, max = VA_Get_Size(dirs); i < max; i++) {
-                    CharBuf *name = (CharBuf*)VA_Fetch(files, i);
+                    String *name = (String*)VA_Fetch(files, i);
                     bool success = Folder_Delete_Tree(inner_folder, name);
                     if (!success && Folder_Local_Exists(inner_folder, name)) {
                         break;
                     }
                 }
                 for (uint32_t i = 0, max = VA_Get_Size(files); i < max; i++) {
-                    CharBuf *name = (CharBuf*)VA_Fetch(files, i);
+                    String *name = (String*)VA_Fetch(files, i);
                     bool success = Folder_Local_Delete(inner_folder, name);
                     if (!success && Folder_Local_Exists(inner_folder, name)) {
                         break;
@@ -195,7 +195,7 @@ Folder_Delete_Tree_IMP(Folder *self, const CharBuf *path) {
                 DECREF(dh);
             }
         }
-        return Folder_Local_Delete(enclosing_folder, (CharBuf*)local);
+        return Folder_Local_Delete(enclosing_folder, (String*)local);
     }
     else {
         // Return failure if the entry wasn't there in the first place.
@@ -204,8 +204,8 @@ Folder_Delete_Tree_IMP(Folder *self, const CharBuf *path) {
 }
 
 static bool
-S_is_updir(CharBuf *path) {
-    if (CB_Equals_Str(path, ".", 1) || CB_Equals_Str(path, "..", 2)) {
+S_is_updir(String *path) {
+    if (Str_Equals_Str(path, ".", 1) || Str_Equals_Str(path, "..", 2)) {
         return true;
     }
     else {
@@ -214,8 +214,8 @@ S_is_updir(CharBuf *path) {
 }
 
 static void
-S_add_to_file_list(Folder *self, VArray *list, CharBuf *dir,
-                   const CharBuf *path) {
+S_add_to_file_list(Folder *self, VArray *list, String *dir,
+                   const String *path) {
     DirHandle *dh = Folder_Open_Dir(self, dir);
 
     if (!dh) {
@@ -223,20 +223,20 @@ S_add_to_file_list(Folder *self, VArray *list, CharBuf *dir,
     }
 
     while (DH_Next(dh)) { // Updates entry
-        CharBuf *entry = DH_Get_Entry(dh);
+        String *entry = DH_Get_Entry(dh);
         if (!S_is_updir(entry)) {
-            CharBuf *relpath = path && CB_Get_Size(path)
-                               ? CB_newf("%o/%o", path, entry)
-                               : CB_Clone(entry);
+            String *relpath = path && Str_Get_Size(path)
+                               ? Str_newf("%o/%o", path, entry)
+                               : Str_Clone(entry);
             if (VA_Get_Size(list) == VA_Get_Capacity(list)) {
                 VA_Grow(list, VA_Get_Size(list) * 2);
             }
             VA_Push(list, (Obj*)relpath);
 
             if (DH_Entry_Is_Dir(dh) && !DH_Entry_Is_Symlink(dh)) {
-                CharBuf *subdir = CB_Get_Size(dir)
-                                  ? CB_newf("%o/%o", dir, entry)
-                                  : CB_Clone(entry);
+                String *subdir = Str_Get_Size(dir)
+                                  ? Str_newf("%o/%o", dir, entry)
+                                  : Str_Clone(entry);
                 S_add_to_file_list(self, list, subdir, relpath); // recurse
                 DECREF(subdir);
             }
@@ -251,7 +251,7 @@ S_add_to_file_list(Folder *self, VArray *list, CharBuf *dir,
 }
 
 DirHandle*
-Folder_Open_Dir_IMP(Folder *self, const CharBuf *path) {
+Folder_Open_Dir_IMP(Folder *self, const String *path) {
     DirHandle *dh = NULL;
     Folder *folder;
     if (path) {
@@ -259,10 +259,10 @@ Folder_Open_Dir_IMP(Folder *self, const CharBuf *path) {
     }
     else {
         StackString *empty = SStr_BLANK();
-        folder = Folder_Find_Folder(self, (CharBuf*)empty);
+        folder = Folder_Find_Folder(self, (String*)empty);
     }
     if (!folder) {
-        Err_set_error(Err_new(CB_newf("Invalid path: '%o'", path)));
+        Err_set_error(Err_new(Str_newf("Invalid path: '%o'", path)));
     }
     else {
         dh = Folder_Local_Open_Dir(folder);
@@ -274,20 +274,20 @@ Folder_Open_Dir_IMP(Folder *self, const CharBuf *path) {
 }
 
 bool
-Folder_MkDir_IMP(Folder *self, const CharBuf *path) {
+Folder_MkDir_IMP(Folder *self, const String *path) {
     Folder *enclosing_folder = Folder_Enclosing_Folder(self, path);
     bool result = false;
 
-    if (!CB_Get_Size(path)) {
-        Err_set_error(Err_new(CB_newf("Invalid path: '%o'", path)));
+    if (!Str_Get_Size(path)) {
+        Err_set_error(Err_new(Str_newf("Invalid path: '%o'", path)));
     }
     else if (!enclosing_folder) {
-        Err_set_error(Err_new(CB_newf("Can't recursively create dir %o",
+        Err_set_error(Err_new(Str_newf("Can't recursively create dir %o",
                                       path)));
     }
     else {
         StackString *name = IxFileNames_local_part(path, SStr_BLANK());
-        result = Folder_Local_MkDir(enclosing_folder, (CharBuf*)name);
+        result = Folder_Local_MkDir(enclosing_folder, (String*)name);
         if (!result) {
             ERR_ADD_FRAME(Err_get_error());
         }
@@ -297,12 +297,12 @@ Folder_MkDir_IMP(Folder *self, const CharBuf *path) {
 }
 
 bool
-Folder_Exists_IMP(Folder *self, const CharBuf *path) {
+Folder_Exists_IMP(Folder *self, const String *path) {
     Folder *enclosing_folder = Folder_Enclosing_Folder(self, path);
     bool retval = false;
     if (enclosing_folder) {
         StackString *name = IxFileNames_local_part(path, SStr_BLANK());
-        if (Folder_Local_Exists(enclosing_folder, (CharBuf*)name)) {
+        if (Folder_Local_Exists(enclosing_folder, (String*)name)) {
             retval = true;
         }
     }
@@ -310,12 +310,12 @@ Folder_Exists_IMP(Folder *self, const CharBuf *path) {
 }
 
 bool
-Folder_Is_Directory_IMP(Folder *self, const CharBuf *path) {
+Folder_Is_Directory_IMP(Folder *self, const String *path) {
     Folder *enclosing_folder = Folder_Enclosing_Folder(self, path);
     bool retval = false;
     if (enclosing_folder) {
         StackString *name = IxFileNames_local_part(path, SStr_BLANK());
-        if (Folder_Local_Is_Directory(enclosing_folder, (CharBuf*)name)) {
+        if (Folder_Local_Is_Directory(enclosing_folder, (String*)name)) {
             retval = true;
         }
     }
@@ -323,15 +323,15 @@ Folder_Is_Directory_IMP(Folder *self, const CharBuf *path) {
 }
 
 VArray*
-Folder_List_IMP(Folder *self, const CharBuf *path) {
+Folder_List_IMP(Folder *self, const String *path) {
     Folder *local_folder = Folder_Find_Folder(self, path);
     VArray *list = NULL;
     DirHandle *dh = Folder_Local_Open_Dir(local_folder);
     if (dh) {
         list = VA_new(32);
         while (DH_Next(dh)) {
-            CharBuf *entry = DH_Get_Entry(dh);
-            VA_Push(list, (Obj*)CB_Clone(entry));
+            String *entry = DH_Get_Entry(dh);
+            VA_Push(list, (Obj*)Str_Clone(entry));
             DECREF(entry);
         }
         DECREF(dh);
@@ -343,11 +343,11 @@ Folder_List_IMP(Folder *self, const CharBuf *path) {
 }
 
 VArray*
-Folder_List_R_IMP(Folder *self, const CharBuf *path) {
+Folder_List_R_IMP(Folder *self, const String *path) {
     Folder *local_folder = Folder_Find_Folder(self, path);
     VArray *list =  VA_new(0);
     if (local_folder) {
-        CharBuf *dir    = CB_new(20);
+        String *dir    = Str_new(20);
         S_add_to_file_list(local_folder, list, dir, path);
         DECREF(dir);
     }
@@ -355,7 +355,7 @@ Folder_List_R_IMP(Folder *self, const CharBuf *path) {
 }
 
 ByteBuf*
-Folder_Slurp_File_IMP(Folder *self, const CharBuf *path) {
+Folder_Slurp_File_IMP(Folder *self, const String *path) {
     InStream *instream = Folder_Open_In(self, path);
     ByteBuf  *retval   = NULL;
 
@@ -385,20 +385,20 @@ Folder_Slurp_File_IMP(Folder *self, const CharBuf *path) {
     return retval;
 }
 
-CharBuf*
+String*
 Folder_Get_Path_IMP(Folder *self) {
     return Folder_IVARS(self)->path;
 }
 
 void
-Folder_Set_Path_IMP(Folder *self, const CharBuf *path) {
+Folder_Set_Path_IMP(Folder *self, const String *path) {
     FolderIVARS *const ivars = Folder_IVARS(self);
     DECREF(ivars->path);
-    ivars->path = CB_Clone(path);
+    ivars->path = Str_Clone(path);
 }
 
 void
-Folder_Consolidate_IMP(Folder *self, const CharBuf *path) {
+Folder_Consolidate_IMP(Folder *self, const String *path) {
     Folder *folder = Folder_Find_Folder(self, path);
     Folder *enclosing_folder = Folder_Enclosing_Folder(self, path);
     if (!folder) {
@@ -411,7 +411,7 @@ Folder_Consolidate_IMP(Folder *self, const CharBuf *path) {
         CompoundFileWriter *cf_writer = CFWriter_new(folder);
         CFWriter_Consolidate(cf_writer);
         DECREF(cf_writer);
-        if (CB_Get_Size(path)) {
+        if (Str_Get_Size(path)) {
             StackString *name = IxFileNames_local_part(path, SStr_BLANK());
             CompoundFileReader *cf_reader = CFReader_open(folder);
             if (!cf_reader) { RETHROW(INCREF(Err_get_error())); }
@@ -431,8 +431,8 @@ S_enclosing_folder(Folder *self, StackString *path) {
     if (SStr_Code_Point_From(path, 0) == '/') { SStr_Chop(path, 1); }
 
     // Find first component of the file path.
-    StackString *scratch        = SSTR_WRAP((CharBuf*)path);
-    StackString *path_component = SSTR_WRAP((CharBuf*)path);
+    StackString *scratch        = SSTR_WRAP((String*)path);
+    StackString *path_component = SSTR_WRAP((String*)path);
     while (0 != (code_point = SStr_Nibble(scratch))) {
         if (code_point == '/') {
             SStr_Truncate(path_component, path_component_len);
@@ -446,7 +446,7 @@ S_enclosing_folder(Folder *self, StackString *path) {
     if (SStr_Get_Size(scratch) == 0) { return self; }
 
     Folder *local_folder
-        = Folder_Local_Find_Folder(self, (CharBuf*)path_component);
+        = Folder_Local_Find_Folder(self, (String*)path_component);
     if (!local_folder) {
         /* This element of the filepath doesn't exist, or it's not a
          * directory.  However, there are filepath characters left over,
@@ -460,14 +460,14 @@ S_enclosing_folder(Folder *self, StackString *path) {
 }
 
 Folder*
-Folder_Enclosing_Folder_IMP(Folder *self, const CharBuf *path) {
+Folder_Enclosing_Folder_IMP(Folder *self, const String *path) {
     StackString *scratch = SSTR_WRAP(path);
     return S_enclosing_folder(self, scratch);
 }
 
 Folder*
-Folder_Find_Folder_IMP(Folder *self, const CharBuf *path) {
-    if (!path || !CB_Get_Size(path)) {
+Folder_Find_Folder_IMP(Folder *self, const String *path) {
+    if (!path || !Str_Get_Size(path)) {
         return self;
     }
     else {
@@ -478,7 +478,7 @@ Folder_Find_Folder_IMP(Folder *self, const CharBuf *path) {
         }
         else {
             return Folder_Local_Find_Folder(enclosing_folder,
-                                            (CharBuf*)scratch);
+                                            (String*)scratch);
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/lucy/blob/2c3dbf15/core/Lucy/Store/Folder.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Store/Folder.cfh b/core/Lucy/Store/Folder.cfh
index cf3c522..117beb5 100644
--- a/core/Lucy/Store/Folder.cfh
+++ b/core/Lucy/Store/Folder.cfh
@@ -28,24 +28,24 @@ parcel Lucy;
  */
 public abstract class Lucy::Store::Folder inherits Clownfish::Obj {
 
-    CharBuf *path;
+    String *path;
     Hash    *entries;
 
     public inert nullable Folder*
-    init(Folder *self, const CharBuf *path);
+    init(Folder *self, const String *path);
 
     public void
     Destroy(Folder *self);
 
     /** Getter for <code>path</code> member var.
      */
-    public CharBuf*
+    public String*
     Get_Path(Folder *self);
 
     /** Setter for <code>path</code> member var.
      */
     void
-    Set_Path(Folder *self, const CharBuf *path);
+    Set_Path(Folder *self, const String *path);
 
     /** Open an OutStream, or set Err_error and return NULL on failure.
      *
@@ -53,7 +53,7 @@ public abstract class Lucy::Store::Folder inherits Clownfish::Obj {
      * @return an OutStream.
      */
     public incremented nullable OutStream*
-    Open_Out(Folder *self,  const CharBuf *path);
+    Open_Out(Folder *self,  const String *path);
 
     /** Open an InStream, or set Err_error and return NULL on failure.
      *
@@ -61,7 +61,7 @@ public abstract class Lucy::Store::Folder inherits Clownfish::Obj {
      * @return an InStream.
      */
     public incremented nullable InStream*
-    Open_In(Folder *self, const CharBuf *path);
+    Open_In(Folder *self, const String *path);
 
     /** Open a FileHandle, or set Err_error and return NULL on failure.
      *
@@ -70,7 +70,7 @@ public abstract class Lucy::Store::Folder inherits Clownfish::Obj {
      * @return a FileHandle.
      */
     public incremented nullable FileHandle*
-    Open_FileHandle(Folder *self, const CharBuf *path, uint32_t flags);
+    Open_FileHandle(Folder *self, const String *path, uint32_t flags);
 
     /** Open a DirHandle or set Err_error and return NULL on failure.
      *
@@ -79,7 +79,7 @@ public abstract class Lucy::Store::Folder inherits Clownfish::Obj {
      * @return a DirHandle.
      */
     public incremented nullable DirHandle*
-    Open_Dir(Folder *self, const CharBuf *path = NULL);
+    Open_Dir(Folder *self, const String *path = NULL);
 
     /** Create a subdirectory.
      *
@@ -87,7 +87,7 @@ public abstract class Lucy::Store::Folder inherits Clownfish::Obj {
      * @return true on success, false on failure (sets Err_error).
      */
     public bool
-    MkDir(Folder *self, const CharBuf *path);
+    MkDir(Folder *self, const String *path);
 
     /** List all local entries within a directory.  Set Err_error and return
      * NULL if something goes wrong.
@@ -96,7 +96,7 @@ public abstract class Lucy::Store::Folder inherits Clownfish::Obj {
      * @return an unsorted array of filenames.
      */
     incremented VArray*
-    List(Folder *self, const CharBuf *path = NULL);
+    List(Folder *self, const String *path = NULL);
 
     /** Recursively list all files and directories in the Folder.
      *
@@ -104,7 +104,7 @@ public abstract class Lucy::Store::Folder inherits Clownfish::Obj {
      * @return an unsorted array of relative filepaths.
      */
     incremented VArray*
-    List_R(Folder *self, const CharBuf *path = NULL);
+    List_R(Folder *self, const String *path = NULL);
 
     /** Indicate whether an entity exists at <code>path</code>.
      *
@@ -112,7 +112,7 @@ public abstract class Lucy::Store::Folder inherits Clownfish::Obj {
      * @return true if <code>path</code> exists.
      */
     public bool
-    Exists(Folder *self, const CharBuf *path);
+    Exists(Folder *self, const String *path);
 
     /** Indicate whether a directory exists at <code>path</code>.
      *
@@ -120,7 +120,7 @@ public abstract class Lucy::Store::Folder inherits Clownfish::Obj {
      * @return true if <code>path</code> is a directory.
      */
     bool
-    Is_Directory(Folder *self, const CharBuf *path);
+    Is_Directory(Folder *self, const String *path);
 
     /** Delete an entry from the folder.
      *
@@ -128,7 +128,7 @@ public abstract class Lucy::Store::Folder inherits Clownfish::Obj {
      * @return true if the deletion was successful.
      */
     public bool
-    Delete(Folder *self, const CharBuf *path);
+    Delete(Folder *self, const String *path);
 
     /** Delete recursively, starting at <code>path</code>
      *
@@ -137,7 +137,7 @@ public abstract class Lucy::Store::Folder inherits Clownfish::Obj {
      * part remains.
      */
     public bool
-    Delete_Tree(Folder *self, const CharBuf *path);
+    Delete_Tree(Folder *self, const String *path);
 
     /** Rename a file or directory, or set Err_error and return false on
      * failure.  If an entry exists at <code>to</code>, the results are
@@ -148,7 +148,7 @@ public abstract class Lucy::Store::Folder inherits Clownfish::Obj {
      * @return true on success, false on failure.
      */
     public abstract bool
-    Rename(Folder *self, const CharBuf *from, const CharBuf *to);
+    Rename(Folder *self, const String *from, const String *to);
 
     /** Create a hard link at path <code>to</code> pointing at the existing
      * file <code>from</code>, or set Err_error and return false on failure.
@@ -156,7 +156,7 @@ public abstract class Lucy::Store::Folder inherits Clownfish::Obj {
      * @return true on success, false on failure.
      */
     public abstract bool
-    Hard_Link(Folder *self, const CharBuf *from, const CharBuf *to);
+    Hard_Link(Folder *self, const String *from, const String *to);
 
     /** Read a file and return its contents.
      *
@@ -164,12 +164,12 @@ public abstract class Lucy::Store::Folder inherits Clownfish::Obj {
      * @param return the file's contents.
      */
     public incremented ByteBuf*
-    Slurp_File(Folder *self, const CharBuf *path);
+    Slurp_File(Folder *self, const String *path);
 
     /** Collapse the contents of the directory into a compound file.
      */
     void
-    Consolidate(Folder *self, const CharBuf *path);
+    Consolidate(Folder *self, const String *path);
 
     /** Given a filepath, return the Folder representing everything except
      * the last component.  E.g. the 'foo/bar' Folder for '/foo/bar/baz.txt',
@@ -179,7 +179,7 @@ public abstract class Lucy::Store::Folder inherits Clownfish::Obj {
      * either doesn't exist or isn't a directory, return NULL.
      */
     nullable Folder*
-    Enclosing_Folder(Folder *self, const CharBuf *path);
+    Enclosing_Folder(Folder *self, const String *path);
 
     /** Return the Folder at the subdirectory specified by <code>path</code>.
      * If <code>path</code> is NULL or an empty string, return this Folder.
@@ -190,7 +190,7 @@ public abstract class Lucy::Store::Folder inherits Clownfish::Obj {
      * @return A Folder.
      */
     nullable Folder*
-    Find_Folder(Folder *self, const CharBuf *path);
+    Find_Folder(Folder *self, const String *path);
 
     /** Perform implementation-specific initialization.  For example: FSFolder
      * creates its own directory.
@@ -214,13 +214,13 @@ public abstract class Lucy::Store::Folder inherits Clownfish::Obj {
      * on failure.
      */
     abstract incremented nullable FileHandle*
-    Local_Open_FileHandle(Folder *self, const CharBuf *name, uint32_t flags);
+    Local_Open_FileHandle(Folder *self, const String *name, uint32_t flags);
 
     /** Open an InStream for a local file, or set Err_error and return NULL on
      * failure.
      */
     incremented nullable InStream*
-    Local_Open_In(Folder *self, const CharBuf *name);
+    Local_Open_In(Folder *self, const String *name);
 
     /** Open a DirHandle to iterate over the local entries in this Folder, or
      * set Err_error and return NULL on failure.
@@ -234,7 +234,7 @@ public abstract class Lucy::Store::Folder inherits Clownfish::Obj {
      * @return true on success, false on failure (sets Err_error)
      */
     abstract bool
-    Local_MkDir(Folder *self, const CharBuf *name);
+    Local_MkDir(Folder *self, const String *name);
 
     /** Indicate whether a local entry exists for the supplied
      * <code>name</code>.
@@ -242,7 +242,7 @@ public abstract class Lucy::Store::Folder inherits Clownfish::Obj {
      * @param name The name of the local entry.
      */
     abstract bool
-    Local_Exists(Folder *self, const CharBuf *name);
+    Local_Exists(Folder *self, const String *name);
 
     /** Indicate whether a local subdirectory exists with the supplied
      * <code>name</code>.
@@ -250,7 +250,7 @@ public abstract class Lucy::Store::Folder inherits Clownfish::Obj {
      * @param name The name of the local subdirectory.
      */
     abstract bool
-    Local_Is_Directory(Folder *self, const CharBuf *name);
+    Local_Is_Directory(Folder *self, const String *name);
 
     /** Return the Folder object representing the specified directory, if such
      * a directory exists.
@@ -259,7 +259,7 @@ public abstract class Lucy::Store::Folder inherits Clownfish::Obj {
      * @return a Folder.
      */
     abstract nullable Folder*
-    Local_Find_Folder(Folder *self, const CharBuf *name);
+    Local_Find_Folder(Folder *self, const String *name);
 
     /** Delete a local entry.
      *
@@ -267,7 +267,7 @@ public abstract class Lucy::Store::Folder inherits Clownfish::Obj {
      * @return true if the deletion was successful.
      */
     abstract bool
-    Local_Delete(Folder *self, const CharBuf *name);
+    Local_Delete(Folder *self, const String *name);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/2c3dbf15/core/Lucy/Store/InStream.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Store/InStream.c b/core/Lucy/Store/InStream.c
index 5e6bb9e..df23f73 100644
--- a/core/Lucy/Store/InStream.c
+++ b/core/Lucy/Store/InStream.c
@@ -70,12 +70,12 @@ InStream_do_open(InStream *self, Obj *file) {
         ivars->file_handle
             = (FileHandle*)RAMFH_open(NULL, FH_READ_ONLY, (RAMFile*)file);
     }
-    else if (Obj_Is_A(file, CHARBUF)) {
+    else if (Obj_Is_A(file, STRING)) {
         ivars->file_handle
-            = (FileHandle*)FSFH_open((CharBuf*)file, FH_READ_ONLY);
+            = (FileHandle*)FSFH_open((String*)file, FH_READ_ONLY);
     }
     else {
-        Err_set_error(Err_new(CB_newf("Invalid type for param 'file': '%o'",
+        Err_set_error(Err_new(Str_newf("Invalid type for param 'file': '%o'",
                                       Obj_Get_Class_Name(file))));
         DECREF(self);
         return NULL;
@@ -87,7 +87,7 @@ InStream_do_open(InStream *self, Obj *file) {
     }
 
     // Get length and filename from the FileHandle.
-    ivars->filename     = CB_Clone(FH_Get_Path(ivars->file_handle));
+    ivars->filename     = Str_Clone(FH_Get_Path(ivars->file_handle));
     ivars->len          = FH_Length(ivars->file_handle);
     if (ivars->len == -1) {
         ERR_ADD_FRAME(Err_get_error());
@@ -122,7 +122,7 @@ InStream_Destroy_IMP(InStream *self) {
 }
 
 InStream*
-InStream_Reopen_IMP(InStream *self, const CharBuf *filename, int64_t offset,
+InStream_Reopen_IMP(InStream *self, const String *filename, int64_t offset,
                     int64_t len) {
     InStreamIVARS *const ivars = InStream_IVARS(self);
     if (!ivars->file_handle) {
@@ -139,7 +139,7 @@ InStream_Reopen_IMP(InStream *self, const CharBuf *filename, int64_t offset,
     InStream_do_open(other, (Obj*)ivars->file_handle);
     if (filename != NULL) {
         DECREF(ovars->filename);
-        ovars->filename = CB_Clone(filename);
+        ovars->filename = Str_Clone(filename);
     }
     ovars->offset = offset;
     ovars->len    = len;
@@ -158,7 +158,7 @@ InStream_Clone_IMP(InStream *self) {
     return twin;
 }
 
-CharBuf*
+String*
 InStream_Get_Filename_IMP(InStream *self) {
     return InStream_IVARS(self)->filename;
 }
@@ -219,7 +219,7 @@ S_fill(InStream *self, int64_t amount) {
     }
     else {
         Err *error = Err_get_error();
-        CB_catf(Err_Get_Mess(error), " (%o)", ivars->filename);
+        Str_catf(Err_Get_Mess(error), " (%o)", ivars->filename);
         RETHROW(INCREF(error));
     }
 }

http://git-wip-us.apache.org/repos/asf/lucy/blob/2c3dbf15/core/Lucy/Store/InStream.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Store/InStream.cfh b/core/Lucy/Store/InStream.cfh
index 5e5f573..9fbb19b 100644
--- a/core/Lucy/Store/InStream.cfh
+++ b/core/Lucy/Store/InStream.cfh
@@ -37,7 +37,7 @@ class Lucy::Store::InStream inherits Clownfish::Obj {
     int64_t     len;
     char       *buf;
     char       *limit;
-    CharBuf    *filename;
+    String     *filename;
     FileHandle *file_handle;
     FileWindow *window;
 
@@ -62,7 +62,7 @@ class Lucy::Store::InStream inherits Clownfish::Obj {
      * @param len Length of the file as seen by the new InStream.
      */
     incremented InStream*
-    Reopen(InStream *self, const CharBuf *filename = NULL, int64_t offset,
+    Reopen(InStream *self, const String *filename = NULL, int64_t offset,
            int64_t len);
 
     /** Clone the InStream.  Clones share the same underlying FileHandle and
@@ -190,7 +190,7 @@ class Lucy::Store::InStream inherits Clownfish::Obj {
 
     /** Accessor for filename member.
      */
-    CharBuf*
+    String*
     Get_Filename(InStream *self);
 }
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/2c3dbf15/core/Lucy/Store/Lock.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Store/Lock.c b/core/Lucy/Store/Lock.c
index e7fb7a1..c30493e 100644
--- a/core/Lucy/Store/Lock.c
+++ b/core/Lucy/Store/Lock.c
@@ -30,8 +30,8 @@
 #include "Lucy/Util/Sleep.h"
 
 Lock*
-Lock_init(Lock *self, Folder *folder, const CharBuf *name,
-          const CharBuf *host, int32_t timeout, int32_t interval) {
+Lock_init(Lock *self, Folder *folder, const String *name,
+          const String *host, int32_t timeout, int32_t interval) {
     LockIVARS *const ivars = Lock_IVARS(self);
 
     // Validate.
@@ -56,12 +56,12 @@ Lock_init(Lock *self, Folder *folder, const CharBuf *name,
     // Assign.
     ivars->folder       = (Folder*)INCREF(folder);
     ivars->timeout      = timeout;
-    ivars->name         = CB_Clone(name);
-    ivars->host         = CB_Clone(host);
+    ivars->name         = Str_Clone(name);
+    ivars->host         = Str_Clone(host);
     ivars->interval     = interval;
 
     // Derive.
-    ivars->lock_path = CB_newf("locks/%o.lock", name);
+    ivars->lock_path = Str_newf("locks/%o.lock", name);
 
     return self;
 }
@@ -76,17 +76,17 @@ Lock_Destroy_IMP(Lock *self) {
     SUPER_DESTROY(self, LOCK);
 }
 
-CharBuf*
+String*
 Lock_Get_Name_IMP(Lock *self) {
     return Lock_IVARS(self)->name;
 }
 
-CharBuf*
+String*
 Lock_Get_Lock_Path_IMP(Lock *self) {
     return Lock_IVARS(self)->lock_path;
 }
 
-CharBuf*
+String*
 Lock_Get_Host_IMP(Lock *self) {
     return Lock_IVARS(self)->host;
 }
@@ -111,19 +111,19 @@ Lock_Obtain_IMP(Lock *self) {
 /***************************************************************************/
 
 LockFileLock*
-LFLock_new(Folder *folder, const CharBuf *name, const CharBuf *host,
+LFLock_new(Folder *folder, const String *name, const String *host,
            int32_t timeout, int32_t interval) {
     LockFileLock *self = (LockFileLock*)VTable_Make_Obj(LOCKFILELOCK);
     return LFLock_init(self, folder, name, host, timeout, interval);
 }
 
 LockFileLock*
-LFLock_init(LockFileLock *self, Folder *folder, const CharBuf *name,
-            const CharBuf *host, int32_t timeout, int32_t interval) {
+LFLock_init(LockFileLock *self, Folder *folder, const String *name,
+            const String *host, int32_t timeout, int32_t interval) {
     int pid = PID_getpid();
     Lock_init((Lock*)self, folder, name, host, timeout, interval);
     LockFileLockIVARS *const ivars = LFLock_IVARS(self);
-    ivars->link_path = CB_newf("%o.%o.%i64", ivars->lock_path, host, pid);
+    ivars->link_path = Str_newf("%o.%o.%i64", ivars->lock_path, host, pid);
     return self;
 }
 
@@ -141,17 +141,17 @@ LFLock_Request_IMP(LockFileLock *self) {
     bool deletion_failed = false;
 
     if (Folder_Exists(ivars->folder, ivars->lock_path)) {
-        Err_set_error((Err*)LockErr_new(CB_newf("Can't obtain lock: '%o' exists",
+        Err_set_error((Err*)LockErr_new(Str_newf("Can't obtain lock: '%o' exists",
                                                 ivars->lock_path)));
         return false;
     }
 
     // Create the "locks" subdirectory if necessary.
-    CharBuf *lock_dir_name = (CharBuf*)SSTR_WRAP_STR("locks", 5);
+    String *lock_dir_name = (String*)SSTR_WRAP_STR("locks", 5);
     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);
-            LockErr *err = LockErr_new(CB_newf("Can't create 'locks' directory: %o",
+            LockErr *err = LockErr_new(Str_newf("Can't create 'locks' directory: %o",
                                                Err_Get_Mess(mkdir_err)));
             // Maybe our attempt failed because another process succeeded.
             if (Folder_Find_Folder(ivars->folder, lock_dir_name)) {
@@ -168,7 +168,7 @@ LFLock_Request_IMP(LockFileLock *self) {
     // Prepare to write pid, lock name, and host to the lock file as JSON.
     file_data = Hash_new(3);
     Hash_Store_Str(file_data, "pid", 3,
-                   (Obj*)CB_newf("%i32", (int32_t)PID_getpid()));
+                   (Obj*)Str_newf("%i32", (int32_t)PID_getpid()));
     Hash_Store_Str(file_data, "host", 4, INCREF(ivars->host));
     Hash_Store_Str(file_data, "name", 4, INCREF(ivars->name));
 
@@ -181,7 +181,7 @@ LFLock_Request_IMP(LockFileLock *self) {
                                    ivars->lock_path);
         if (!success) {
             Err *hard_link_err = (Err*)CERTIFY(Err_get_error(), ERR);
-            Err_set_error((Err*)LockErr_new(CB_newf("Failed to obtain lock at '%o': %o",
+            Err_set_error((Err*)LockErr_new(Str_newf("Failed to obtain lock at '%o': %o",
                                                     ivars->lock_path,
                                                     Err_Get_Mess(hard_link_err))));
         }
@@ -189,7 +189,7 @@ LFLock_Request_IMP(LockFileLock *self) {
     }
     else {
         Err *spew_json_err = (Err*)CERTIFY(Err_get_error(), ERR);
-        Err_set_error((Err*)LockErr_new(CB_newf("Failed to obtain lock at '%o': %o",
+        Err_set_error((Err*)LockErr_new(Str_newf("Failed to obtain lock at '%o': %o",
                                                 ivars->lock_path,
                                                 Err_Get_Mess(spew_json_err))));
     }
@@ -197,7 +197,7 @@ LFLock_Request_IMP(LockFileLock *self) {
 
     // Verify that our temporary file got zapped.
     if (wrote_json && deletion_failed) {
-        CharBuf *mess = MAKE_MESS("Failed to delete '%o'", ivars->link_path);
+        String *mess = MAKE_MESS("Failed to delete '%o'", ivars->link_path);
         Err_throw_mess(ERR, mess);
     }
 
@@ -225,7 +225,7 @@ LFLock_Clear_Stale_IMP(LockFileLock *self) {
 }
 
 bool
-LFLock_Maybe_Delete_File_IMP(LockFileLock *self, const CharBuf *path,
+LFLock_Maybe_Delete_File_IMP(LockFileLock *self, const String *path,
                              bool delete_mine, bool delete_other) {
     LockFileLockIVARS *const ivars = LFLock_IVARS(self);
     Folder *folder  = ivars->folder;
@@ -233,11 +233,11 @@ LFLock_Maybe_Delete_File_IMP(LockFileLock *self, const CharBuf *path,
     StackString *scratch = SSTR_WRAP(path);
 
     // Only delete locks that start with our lock name.
-    CharBuf *lock_dir_name = (CharBuf*)SSTR_WRAP_STR("locks", 5);
+    String *lock_dir_name = (String*)SSTR_WRAP_STR("locks", 5);
     if (!SStr_Starts_With(scratch, lock_dir_name)) {
         return false;
     }
-    SStr_Nip(scratch, CB_Get_Size(lock_dir_name) + 1);
+    SStr_Nip(scratch, Str_Get_Size(lock_dir_name) + 1);
     if (!SStr_Starts_With(scratch, ivars->name)) {
         return false;
     }
@@ -246,20 +246,20 @@ LFLock_Maybe_Delete_File_IMP(LockFileLock *self, const CharBuf *path,
     if (Folder_Exists(folder, path)) {
         Hash *hash = (Hash*)Json_slurp_json(folder, path);
         if (hash != NULL && Obj_Is_A((Obj*)hash, HASH)) {
-            CharBuf *pid_buf = (CharBuf*)Hash_Fetch_Str(hash, "pid", 3);
-            CharBuf *host    = (CharBuf*)Hash_Fetch_Str(hash, "host", 4);
-            CharBuf *name
-                = (CharBuf*)Hash_Fetch_Str(hash, "name", 4);
+            String *pid_buf = (String*)Hash_Fetch_Str(hash, "pid", 3);
+            String *host    = (String*)Hash_Fetch_Str(hash, "host", 4);
+            String *name
+                = (String*)Hash_Fetch_Str(hash, "name", 4);
 
             // Match hostname and lock name.
             if (host != NULL
-                && CB_Equals(host, (Obj*)ivars->host)
+                && Str_Equals(host, (Obj*)ivars->host)
                 && name != NULL
-                && CB_Equals(name, (Obj*)ivars->name)
+                && Str_Equals(name, (Obj*)ivars->name)
                 && pid_buf != NULL
                ) {
                 // Verify that pid is either mine or dead.
-                int pid = (int)CB_To_I64(pid_buf);
+                int pid = (int)Str_To_I64(pid_buf);
                 if ((delete_mine && pid == PID_getpid())  // This process.
                     || (delete_other && !PID_active(pid)) // Dead pid.
                    ) {
@@ -267,7 +267,7 @@ LFLock_Maybe_Delete_File_IMP(LockFileLock *self, const CharBuf *path,
                         success = true;
                     }
                     else {
-                        CharBuf *mess
+                        String *mess
                             = MAKE_MESS("Can't delete '%o'", path);
                         DECREF(hash);
                         Err_throw_mess(ERR, mess);
@@ -291,13 +291,13 @@ LFLock_Destroy_IMP(LockFileLock *self) {
 /***************************************************************************/
 
 LockErr*
-LockErr_new(CharBuf *message) {
+LockErr_new(String *message) {
     LockErr *self = (LockErr*)VTable_Make_Obj(LOCKERR);
     return LockErr_init(self, message);
 }
 
 LockErr*
-LockErr_init(LockErr *self, CharBuf *message) {
+LockErr_init(LockErr *self, String *message) {
     Err_init((Err*)self, message);
     return self;
 }

http://git-wip-us.apache.org/repos/asf/lucy/blob/2c3dbf15/core/Lucy/Store/Lock.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Store/Lock.cfh b/core/Lucy/Store/Lock.cfh
index 0c95617..d18d083 100644
--- a/core/Lucy/Store/Lock.cfh
+++ b/core/Lucy/Store/Lock.cfh
@@ -30,9 +30,9 @@ parcel Lucy;
 public abstract class Lucy::Store::Lock inherits Clownfish::Obj {
 
     Folder      *folder;
-    CharBuf     *name;
-    CharBuf     *lock_path;
-    CharBuf     *host;
+    String      *name;
+    String      *lock_path;
+    String      *host;
     int32_t      timeout;
     int32_t      interval;
 
@@ -47,8 +47,8 @@ public abstract class Lucy::Store::Lock inherits Clownfish::Obj {
      * @param interval Time in milliseconds between retries.
      */
     public inert Lock*
-    init(Lock *self, Folder *folder, const CharBuf *name,
-         const CharBuf *host, int32_t timeout = 0, int32_t interval = 100);
+    init(Lock *self, Folder *folder, const String *name,
+         const String *host, int32_t timeout = 0, int32_t interval = 100);
 
     /** Returns true if the Lock is shared, false if the Lock is exclusive.
      */
@@ -97,13 +97,13 @@ public abstract class Lucy::Store::Lock inherits Clownfish::Obj {
     public abstract void
     Clear_Stale(Lock *self);
 
-    CharBuf*
+    String*
     Get_Name(Lock *self);
 
-    CharBuf*
+    String*
     Get_Host(Lock *self);
 
-    CharBuf*
+    String*
     Get_Lock_Path(Lock *self);
 
     public void
@@ -113,15 +113,15 @@ public abstract class Lucy::Store::Lock inherits Clownfish::Obj {
 class Lucy::Store::LockFileLock cnick LFLock
     inherits Lucy::Store::Lock {
 
-    CharBuf *link_path;
+    String *link_path;
 
     inert incremented LockFileLock*
-    new(Folder *folder, const CharBuf *name, const CharBuf *host,
+    new(Folder *folder, const String *name, const String *host,
         int32_t timeout = 0, int32_t interval = 100);
 
     public inert LockFileLock*
-    init(LockFileLock *self, Folder *folder, const CharBuf *name,
-         const CharBuf *host, int32_t timeout = 0, int32_t interval = 100);
+    init(LockFileLock *self, Folder *folder, const String *name,
+         const String *host, int32_t timeout = 0, int32_t interval = 100);
 
     public bool
     Shared(LockFileLock *self);
@@ -148,7 +148,7 @@ class Lucy::Store::LockFileLock cnick LFLock
      * don't match this process's pid.
      */
     bool
-    Maybe_Delete_File(LockFileLock *self, const CharBuf *filepath,
+    Maybe_Delete_File(LockFileLock *self, const String *filepath,
                       bool delete_mine, bool delete_other);
 
     public void
@@ -163,10 +163,10 @@ class Lucy::Store::LockFileLock cnick LFLock
 public class Lucy::Store::LockErr inherits Clownfish::Err {
 
     public inert incremented LockErr*
-    new(CharBuf *message);
+    new(String *message);
 
     public inert LockErr*
-    init(LockErr *self, CharBuf *message);
+    init(LockErr *self, String *message);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/2c3dbf15/core/Lucy/Store/LockFactory.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Store/LockFactory.c b/core/Lucy/Store/LockFactory.c
index 6515fd2..f485654 100644
--- a/core/Lucy/Store/LockFactory.c
+++ b/core/Lucy/Store/LockFactory.c
@@ -27,16 +27,16 @@
 #include "Lucy/Store/SharedLock.h"
 
 LockFactory*
-LockFact_new(Folder *folder, const CharBuf *host) {
+LockFact_new(Folder *folder, const String *host) {
     LockFactory *self = (LockFactory*)VTable_Make_Obj(LOCKFACTORY);
     return LockFact_init(self, folder, host);
 }
 
 LockFactory*
-LockFact_init(LockFactory *self, Folder *folder, const CharBuf *host) {
+LockFact_init(LockFactory *self, Folder *folder, const String *host) {
     LockFactoryIVARS *const ivars = LockFact_IVARS(self);
     ivars->folder    = (Folder*)INCREF(folder);
-    ivars->host      = CB_Clone(host);
+    ivars->host      = Str_Clone(host);
     return self;
 }
 
@@ -49,7 +49,7 @@ LockFact_Destroy_IMP(LockFactory *self) {
 }
 
 Lock*
-LockFact_Make_Lock_IMP(LockFactory *self, const CharBuf *name,
+LockFact_Make_Lock_IMP(LockFactory *self, const String *name,
                        int32_t timeout, int32_t interval) {
     LockFactoryIVARS *const ivars = LockFact_IVARS(self);
     return (Lock*)LFLock_new(ivars->folder, name, ivars->host, timeout,
@@ -57,7 +57,7 @@ LockFact_Make_Lock_IMP(LockFactory *self, const CharBuf *name,
 }
 
 Lock*
-LockFact_Make_Shared_Lock_IMP(LockFactory *self, const CharBuf *name,
+LockFact_Make_Shared_Lock_IMP(LockFactory *self, const String *name,
                               int32_t timeout, int32_t interval) {
     LockFactoryIVARS *const ivars = LockFact_IVARS(self);
     return (Lock*)ShLock_new(ivars->folder, name, ivars->host, timeout,

http://git-wip-us.apache.org/repos/asf/lucy/blob/2c3dbf15/core/Lucy/Store/LockFactory.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Store/LockFactory.cfh b/core/Lucy/Store/LockFactory.cfh
index 29d661e..b450191 100644
--- a/core/Lucy/Store/LockFactory.cfh
+++ b/core/Lucy/Store/LockFactory.cfh
@@ -28,17 +28,17 @@ public class Lucy::Store::LockFactory cnick LockFact
     inherits Clownfish::Obj {
 
     Folder  *folder;
-    CharBuf *host;
+    String *host;
 
     inert incremented LockFactory*
-    new(Folder *folder, const CharBuf *host);
+    new(Folder *folder, const String *host);
 
     /**
      * @param folder A L<Lucy::Store::Folder>.
      * @param host An identifier which should be unique per-machine.
      */
     public inert LockFactory*
-    init(LockFactory *self, Folder *folder, const CharBuf *host);
+    init(LockFactory *self, Folder *folder, const String *host);
 
     /** Return a Lock object, which, once Obtain() returns successfully,
      * maintains an exclusive lock on a resource.
@@ -50,7 +50,7 @@ public class Lucy::Store::LockFactory cnick LockFact
      * @param interval Time in milliseconds between retries.
      */
     public incremented Lock*
-    Make_Lock(LockFactory *self, const CharBuf *name, int32_t timeout = 0,
+    Make_Lock(LockFactory *self, const String *name, int32_t timeout = 0,
               int32_t interval = 100);
 
     /** Return a Lock object for which Shared() returns true, and which
@@ -64,7 +64,7 @@ public class Lucy::Store::LockFactory cnick LockFact
      * @param interval Time in milliseconds between retries.
      */
     public incremented Lock*
-    Make_Shared_Lock(LockFactory *self, const CharBuf *name,
+    Make_Shared_Lock(LockFactory *self, const String *name,
                      int32_t timeout = 0, int32_t interval = 100);
 
     public void

http://git-wip-us.apache.org/repos/asf/lucy/blob/2c3dbf15/core/Lucy/Store/OutStream.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Store/OutStream.c b/core/Lucy/Store/OutStream.c
index feba886..64fd86e 100644
--- a/core/Lucy/Store/OutStream.c
+++ b/core/Lucy/Store/OutStream.c
@@ -61,12 +61,12 @@ OutStream_do_open(OutStream *self, Obj *file) {
         ivars->file_handle
             = (FileHandle*)RAMFH_open(NULL, FH_WRITE_ONLY, (RAMFile*)file);
     }
-    else if (Obj_Is_A(file, CHARBUF)) {
-        ivars->file_handle = (FileHandle*)FSFH_open((CharBuf*)file,
+    else if (Obj_Is_A(file, STRING)) {
+        ivars->file_handle = (FileHandle*)FSFH_open((String*)file,
                                                     FH_WRITE_ONLY | FH_CREATE | FH_EXCLUSIVE);
     }
     else {
-        Err_set_error(Err_new(CB_newf("Invalid type for param 'file': '%o'",
+        Err_set_error(Err_new(Str_newf("Invalid type for param 'file': '%o'",
                                       Obj_Get_Class_Name(file))));
         DECREF(self);
         return NULL;
@@ -78,7 +78,7 @@ OutStream_do_open(OutStream *self, Obj *file) {
     }
 
     // Derive filepath from FileHandle.
-    ivars->path = CB_Clone(FH_Get_Path(ivars->file_handle));
+    ivars->path = Str_Clone(FH_Get_Path(ivars->file_handle));
 
     return self;
 }
@@ -98,7 +98,7 @@ OutStream_Destroy_IMP(OutStream *self) {
     SUPER_DESTROY(self, OUTSTREAM);
 }
 
-CharBuf*
+String*
 OutStream_Get_Path_IMP(OutStream *self) {
     return OutStream_IVARS(self)->path;
 }

http://git-wip-us.apache.org/repos/asf/lucy/blob/2c3dbf15/core/Lucy/Store/OutStream.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Store/OutStream.cfh b/core/Lucy/Store/OutStream.cfh
index 5e09a78..c4e2aad 100644
--- a/core/Lucy/Store/OutStream.cfh
+++ b/core/Lucy/Store/OutStream.cfh
@@ -33,7 +33,7 @@ class Lucy::Store::OutStream inherits Clownfish::Obj {
     int64_t        buf_start;
     size_t         buf_pos;
     FileHandle    *file_handle;
-    CharBuf       *path;
+    String        *path;
 
     inert incremented nullable OutStream*
     open(Obj *file);
@@ -45,7 +45,7 @@ class Lucy::Store::OutStream inherits Clownfish::Obj {
 
     /** Accessor for <code>path</code> member.
      */
-    CharBuf*
+    String*
     Get_Path(OutStream *self);
 
     /** Return the current file position.

http://git-wip-us.apache.org/repos/asf/lucy/blob/2c3dbf15/core/Lucy/Store/RAMDirHandle.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Store/RAMDirHandle.c b/core/Lucy/Store/RAMDirHandle.c
index 4900a69..993f741 100644
--- a/core/Lucy/Store/RAMDirHandle.c
+++ b/core/Lucy/Store/RAMDirHandle.c
@@ -58,10 +58,10 @@ RAMDH_Next_IMP(RAMDirHandle *self) {
     if (ivars->elems) {
         ivars->tick++;
         if (ivars->tick < (int32_t)VA_Get_Size(ivars->elems)) {
-            CharBuf *path = (CharBuf*)CERTIFY(
-                                VA_Fetch(ivars->elems, ivars->tick), CHARBUF);
+            String *path = (String*)CERTIFY(
+                                VA_Fetch(ivars->elems, ivars->tick), STRING);
             DECREF(ivars->entry);
-            ivars->entry = (CharBuf*)INCREF(path);
+            ivars->entry = (String*)INCREF(path);
             return true;
         }
         else {
@@ -76,7 +76,7 @@ bool
 RAMDH_Entry_Is_Dir_IMP(RAMDirHandle *self) {
     RAMDirHandleIVARS *const ivars = RAMDH_IVARS(self);
     if (ivars->elems) {
-        CharBuf *name = (CharBuf*)VA_Fetch(ivars->elems, ivars->tick);
+        String *name = (String*)VA_Fetch(ivars->elems, ivars->tick);
         if (name) {
             return RAMFolder_Local_Is_Directory(ivars->folder, name);
         }

http://git-wip-us.apache.org/repos/asf/lucy/blob/2c3dbf15/core/Lucy/Store/RAMFileHandle.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Store/RAMFileHandle.c b/core/Lucy/Store/RAMFileHandle.c
index d448c39..1b37503 100644
--- a/core/Lucy/Store/RAMFileHandle.c
+++ b/core/Lucy/Store/RAMFileHandle.c
@@ -22,13 +22,13 @@
 #include "Lucy/Store/FileWindow.h"
 
 RAMFileHandle*
-RAMFH_open(const CharBuf *path, uint32_t flags, RAMFile *file) {
+RAMFH_open(const String *path, uint32_t flags, RAMFile *file) {
     RAMFileHandle *self = (RAMFileHandle*)VTable_Make_Obj(RAMFILEHANDLE);
     return RAMFH_do_open(self, path, flags, file);
 }
 
 RAMFileHandle*
-RAMFH_do_open(RAMFileHandle *self, const CharBuf *path, uint32_t flags,
+RAMFH_do_open(RAMFileHandle *self, const String *path, uint32_t flags,
               RAMFile *file) {
     bool must_create
         = (flags & (FH_CREATE | FH_EXCLUSIVE)) == (FH_CREATE | FH_EXCLUSIVE)
@@ -43,7 +43,7 @@ RAMFH_do_open(RAMFileHandle *self, const CharBuf *path, uint32_t flags,
     // Obtain a RAMFile.
     if (file) {
         if (must_create) {
-            Err_set_error(Err_new(CB_newf("File '%o' exists, but FH_EXCLUSIVE flag supplied", path)));
+            Err_set_error(Err_new(Str_newf("File '%o' exists, but FH_EXCLUSIVE flag supplied", path)));
             DECREF(self);
             return NULL;
         }
@@ -53,7 +53,7 @@ RAMFH_do_open(RAMFileHandle *self, const CharBuf *path, uint32_t flags,
         ivars->ram_file = RAMFile_new(NULL, false);
     }
     else {
-        Err_set_error(Err_new(CB_newf("Must supply either RAMFile or FH_CREATE | FH_WRITE_ONLY")));
+        Err_set_error(Err_new(Str_newf("Must supply either RAMFile or FH_CREATE | FH_WRITE_ONLY")));
         DECREF(self);
         return NULL;
     }
@@ -83,16 +83,16 @@ RAMFH_Window_IMP(RAMFileHandle *self, FileWindow *window, int64_t offset,
     RAMFileHandleIVARS *const ivars = RAMFH_IVARS(self);
     int64_t end = offset + len;
     if (!(ivars->flags & FH_READ_ONLY)) {
-        Err_set_error(Err_new(CB_newf("Can't read from write-only handle")));
+        Err_set_error(Err_new(Str_newf("Can't read from write-only handle")));
         return false;
     }
     else if (offset < 0) {
-        Err_set_error(Err_new(CB_newf("Can't read from negative offset %i64",
+        Err_set_error(Err_new(Str_newf("Can't read from negative offset %i64",
                                       offset)));
         return false;
     }
     else if (end > ivars->len) {
-        Err_set_error(Err_new(CB_newf("Tried to read past EOF: offset %i64 + request %i64 > len %i64",
+        Err_set_error(Err_new(Str_newf("Tried to read past EOF: offset %i64 + request %i64 > len %i64",
                                       offset, len, ivars->len)));
         return false;
     }
@@ -115,16 +115,16 @@ RAMFH_Read_IMP(RAMFileHandle *self, char *dest, int64_t offset, size_t len) {
     RAMFileHandleIVARS *const ivars = RAMFH_IVARS(self);
     int64_t end = offset + len;
     if (!(ivars->flags & FH_READ_ONLY)) {
-        Err_set_error(Err_new(CB_newf("Can't read from write-only handle")));
+        Err_set_error(Err_new(Str_newf("Can't read from write-only handle")));
         return false;
     }
     else if (offset < 0) {
-        Err_set_error(Err_new(CB_newf("Can't read from a negative offset %i64",
+        Err_set_error(Err_new(Str_newf("Can't read from a negative offset %i64",
                                       offset)));
         return false;
     }
     else if (end > ivars->len) {
-        Err_set_error(Err_new(CB_newf("Attempt to read %u64 bytes starting at %i64 goes past EOF %u64",
+        Err_set_error(Err_new(Str_newf("Attempt to read %u64 bytes starting at %i64 goes past EOF %u64",
                                       (uint64_t)len, offset, ivars->len)));
         return false;
     }
@@ -139,7 +139,7 @@ bool
 RAMFH_Write_IMP(RAMFileHandle *self, const void *data, size_t len) {
     RAMFileHandleIVARS *const ivars = RAMFH_IVARS(self);
     if (ivars->flags & FH_READ_ONLY) {
-        Err_set_error(Err_new(CB_newf("Attempt to write to read-only RAMFile")));
+        Err_set_error(Err_new(Str_newf("Attempt to write to read-only RAMFile")));
         return false;
     }
     BB_Cat_Bytes(ivars->contents, data, len);
@@ -151,12 +151,12 @@ bool
 RAMFH_Grow_IMP(RAMFileHandle *self, int64_t len) {
     RAMFileHandleIVARS *const ivars = RAMFH_IVARS(self);
     if (len > INT32_MAX) {
-        Err_set_error(Err_new(CB_newf("Can't support RAM files of size %i64 (> %i32)",
+        Err_set_error(Err_new(Str_newf("Can't support RAM files of size %i64 (> %i32)",
                                       len, (int32_t)INT32_MAX)));
         return false;
     }
     else if (ivars->flags & FH_READ_ONLY) {
-        Err_set_error(Err_new(CB_newf("Can't grow read-only RAMFile '%o'",
+        Err_set_error(Err_new(Str_newf("Can't grow read-only RAMFile '%o'",
                                       ivars->path)));
         return false;
     }

http://git-wip-us.apache.org/repos/asf/lucy/blob/2c3dbf15/core/Lucy/Store/RAMFileHandle.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Store/RAMFileHandle.cfh b/core/Lucy/Store/RAMFileHandle.cfh
index 6e55f45..fb0877f 100644
--- a/core/Lucy/Store/RAMFileHandle.cfh
+++ b/core/Lucy/Store/RAMFileHandle.cfh
@@ -29,7 +29,7 @@ class Lucy::Store::RAMFileHandle cnick RAMFH
     int64_t  len;
 
     inert incremented nullable RAMFileHandle*
-    open(const CharBuf *path = NULL, uint32_t flags, RAMFile *file = NULL);
+    open(const String *path = NULL, uint32_t flags, RAMFile *file = NULL);
 
     /**
      * Return a new RAMFileHandle, or set Err_error and return NULL on
@@ -41,7 +41,7 @@ class Lucy::Store::RAMFileHandle cnick RAMFH
      * must be passed or an error will occur.
      */
     inert nullable RAMFileHandle*
-    do_open(RAMFileHandle *self, const CharBuf *path = NULL, uint32_t flags,
+    do_open(RAMFileHandle *self, const String *path = NULL, uint32_t flags,
             RAMFile *file = NULL);
 
     /** Access the backing RAMFile.

http://git-wip-us.apache.org/repos/asf/lucy/blob/2c3dbf15/core/Lucy/Store/RAMFolder.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Store/RAMFolder.c b/core/Lucy/Store/RAMFolder.c
index bf9600f..f8030c6 100644
--- a/core/Lucy/Store/RAMFolder.c
+++ b/core/Lucy/Store/RAMFolder.c
@@ -27,17 +27,17 @@
 #include "Lucy/Util/IndexFileNames.h"
 
 // Return the concatenation of the Folder's path and the supplied path.
-static CharBuf*
-S_fullpath(RAMFolder *self, const CharBuf *path);
+static String*
+S_fullpath(RAMFolder *self, const String *path);
 
 RAMFolder*
-RAMFolder_new(const CharBuf *path) {
+RAMFolder_new(const String *path) {
     RAMFolder *self = (RAMFolder*)VTable_Make_Obj(RAMFOLDER);
     return RAMFolder_init(self, path);
 }
 
 RAMFolder*
-RAMFolder_init(RAMFolder *self, const CharBuf *path) {
+RAMFolder_init(RAMFolder *self, const String *path) {
     Folder_init((Folder*)self, path);
     return self;
 }
@@ -54,15 +54,15 @@ RAMFolder_Check_IMP(RAMFolder *self) {
 }
 
 bool
-RAMFolder_Local_MkDir_IMP(RAMFolder *self, const CharBuf *name) {
+RAMFolder_Local_MkDir_IMP(RAMFolder *self, const String *name) {
     RAMFolderIVARS *const ivars = RAMFolder_IVARS(self);
     if (Hash_Fetch(ivars->entries, (Obj*)name)) {
-        Err_set_error(Err_new(CB_newf("Can't MkDir, '%o' already exists",
+        Err_set_error(Err_new(Str_newf("Can't MkDir, '%o' already exists",
                                       name)));
         return false;
     }
     else {
-        CharBuf *fullpath = S_fullpath(self, name);
+        String *fullpath = S_fullpath(self, name);
         Hash_Store(ivars->entries, (Obj*)name,
                    (Obj*)RAMFolder_new(fullpath));
         DECREF(fullpath);
@@ -71,11 +71,11 @@ RAMFolder_Local_MkDir_IMP(RAMFolder *self, const CharBuf *name) {
 }
 
 FileHandle*
-RAMFolder_Local_Open_FileHandle_IMP(RAMFolder *self, const CharBuf *name,
+RAMFolder_Local_Open_FileHandle_IMP(RAMFolder *self, const String *name,
                                     uint32_t flags) {
     RAMFolderIVARS *const ivars = RAMFolder_IVARS(self);
     RAMFileHandle *fh;
-    CharBuf *fullpath = S_fullpath(self, name);
+    String *fullpath = S_fullpath(self, name);
     RAMFile *file = (RAMFile*)Hash_Fetch(ivars->entries, (Obj*)name);
     bool can_create
         = (flags & (FH_WRITE_ONLY | FH_CREATE)) == (FH_WRITE_ONLY | FH_CREATE)
@@ -85,13 +85,13 @@ RAMFolder_Local_Open_FileHandle_IMP(RAMFolder *self, const CharBuf *name,
     // or we have permission to create it.
     if (file) {
         if (!RAMFile_Is_A(file, RAMFILE)) {
-            Err_set_error(Err_new(CB_newf("Not a file: '%o'", fullpath)));
+            Err_set_error(Err_new(Str_newf("Not a file: '%o'", fullpath)));
             DECREF(fullpath);
             return NULL;
         }
     }
     else if (!can_create) {
-        Err_set_error(Err_new(CB_newf("File not found: '%o'", fullpath)));
+        Err_set_error(Err_new(Str_newf("File not found: '%o'", fullpath)));
         DECREF(fullpath);
         return NULL;
     }
@@ -122,13 +122,13 @@ RAMFolder_Local_Open_Dir_IMP(RAMFolder *self) {
 }
 
 bool
-RAMFolder_Local_Exists_IMP(RAMFolder *self, const CharBuf *name) {
+RAMFolder_Local_Exists_IMP(RAMFolder *self, const String *name) {
     RAMFolderIVARS *const ivars = RAMFolder_IVARS(self);
     return !!Hash_Fetch(ivars->entries, (Obj*)name);
 }
 
 bool
-RAMFolder_Local_Is_Directory_IMP(RAMFolder *self, const CharBuf *name) {
+RAMFolder_Local_Is_Directory_IMP(RAMFolder *self, const String *name) {
     RAMFolderIVARS *const ivars = RAMFolder_IVARS(self);
     Obj *entry = Hash_Fetch(ivars->entries, (Obj*)name);
     if (entry && Obj_Is_A(entry, FOLDER)) { return true; }
@@ -139,7 +139,7 @@ RAMFolder_Local_Is_Directory_IMP(RAMFolder *self, const CharBuf *name) {
 #define OP_HARD_LINK 2
 
 static bool
-S_rename_or_hard_link(RAMFolder *self, const CharBuf* from, const CharBuf *to,
+S_rename_or_hard_link(RAMFolder *self, const String* from, const String *to,
                       Folder *from_folder, Folder *to_folder,
                       StackString *from_name, StackString *to_name,
                       int op) {
@@ -150,11 +150,11 @@ S_rename_or_hard_link(RAMFolder *self, const CharBuf* from, const CharBuf *to,
 
     // Make sure the source and destination folders exist.
     if (!from_folder) {
-        Err_set_error(Err_new(CB_newf("File not found: '%o'", from)));
+        Err_set_error(Err_new(Str_newf("File not found: '%o'", from)));
         return false;
     }
     if (!to_folder) {
-        Err_set_error(Err_new(CB_newf("Invalid file path (can't find dir): '%o'",
+        Err_set_error(Err_new(Str_newf("Invalid file path (can't find dir): '%o'",
                                       to)));
         return false;
     }
@@ -175,12 +175,12 @@ S_rename_or_hard_link(RAMFolder *self, const CharBuf* from, const CharBuf *to,
         inner_to_folder = (RAMFolder*)to_folder;
     }
     if (!RAMFolder_Is_A(inner_from_folder, RAMFOLDER)) {
-        Err_set_error(Err_new(CB_newf("Not a RAMFolder, but a '%o'",
+        Err_set_error(Err_new(Str_newf("Not a RAMFolder, but a '%o'",
                                       Obj_Get_Class_Name((Obj*)inner_from_folder))));
         return false;
     }
     if (!RAMFolder_Is_A(inner_to_folder, RAMFOLDER)) {
-        Err_set_error(Err_new(CB_newf("Not a RAMFolder, but a '%o'",
+        Err_set_error(Err_new(Str_newf("Not a RAMFolder, but a '%o'",
                                       Obj_Get_Class_Name((Obj*)inner_to_folder))));
         return false;
     }
@@ -190,13 +190,13 @@ S_rename_or_hard_link(RAMFolder *self, const CharBuf* from, const CharBuf *to,
                       (Obj*)from_name);
     if (!elem) {
         if (Folder_Is_A(from_folder, COMPOUNDFILEREADER)
-            && Folder_Local_Exists(from_folder, (CharBuf*)from_name)
+            && Folder_Local_Exists(from_folder, (String*)from_name)
            ) {
-            Err_set_error(Err_new(CB_newf("Source file '%o' is virtual",
+            Err_set_error(Err_new(Str_newf("Source file '%o' is virtual",
                                           from)));
         }
         else {
-            Err_set_error(Err_new(CB_newf("File not found: '%o'", from)));
+            Err_set_error(Err_new(Str_newf("File not found: '%o'", from)));
         }
         return false;
     }
@@ -227,7 +227,7 @@ S_rename_or_hard_link(RAMFolder *self, const CharBuf* from, const CharBuf *to,
                 }
             }
             if (conflict) {
-                Err_set_error(Err_new(CB_newf("Can't clobber a %o with a %o",
+                Err_set_error(Err_new(Str_newf("Can't clobber a %o with a %o",
                                               Obj_Get_Class_Name(existing),
                                               Obj_Get_Class_Name(elem))));
                 return false;
@@ -241,14 +241,14 @@ S_rename_or_hard_link(RAMFolder *self, const CharBuf* from, const CharBuf *to,
         DECREF(Hash_Delete(RAMFolder_IVARS(inner_from_folder)->entries,
                            (Obj*)from_name));
         if (Obj_Is_A(elem, FOLDER)) {
-            CharBuf *newpath = S_fullpath(inner_to_folder, (CharBuf*)to_name);
+            String *newpath = S_fullpath(inner_to_folder, (String*)to_name);
             Folder_Set_Path((Folder*)elem, newpath);
             DECREF(newpath);
         }
     }
     else if (op == OP_HARD_LINK) {
         if (!Obj_Is_A(elem, RAMFILE)) {
-            Err_set_error(Err_new(CB_newf("'%o' isn't a file, it's a %o",
+            Err_set_error(Err_new(Str_newf("'%o' isn't a file, it's a %o",
                                           from, Obj_Get_Class_Name(elem))));
             return false;
         }
@@ -257,7 +257,7 @@ S_rename_or_hard_link(RAMFolder *self, const CharBuf* from, const CharBuf *to,
                 = Hash_Fetch(RAMFolder_IVARS(inner_to_folder)->entries,
                              (Obj*)to_name);
             if (existing) {
-                Err_set_error(Err_new(CB_newf("'%o' already exists", to)));
+                Err_set_error(Err_new(Str_newf("'%o' already exists", to)));
                 return false;
             }
             else {
@@ -274,8 +274,8 @@ S_rename_or_hard_link(RAMFolder *self, const CharBuf* from, const CharBuf *to,
 }
 
 bool
-RAMFolder_Rename_IMP(RAMFolder *self, const CharBuf* from,
-                     const CharBuf *to) {
+RAMFolder_Rename_IMP(RAMFolder *self, const String* from,
+                     const String *to) {
     Folder        *from_folder = RAMFolder_Enclosing_Folder(self, from);
     Folder        *to_folder   = RAMFolder_Enclosing_Folder(self, to);
     StackString *from_name   = IxFileNames_local_part(from, SStr_BLANK());
@@ -288,8 +288,8 @@ RAMFolder_Rename_IMP(RAMFolder *self, const CharBuf* from,
 }
 
 bool
-RAMFolder_Hard_Link_IMP(RAMFolder *self, const CharBuf *from,
-                        const CharBuf *to) {
+RAMFolder_Hard_Link_IMP(RAMFolder *self, const String *from,
+                        const String *to) {
     Folder        *from_folder = RAMFolder_Enclosing_Folder(self, from);
     Folder        *to_folder   = RAMFolder_Enclosing_Folder(self, to);
     StackString *from_name   = IxFileNames_local_part(from, SStr_BLANK());
@@ -302,7 +302,7 @@ RAMFolder_Hard_Link_IMP(RAMFolder *self, const CharBuf *from,
 }
 
 bool
-RAMFolder_Local_Delete_IMP(RAMFolder *self, const CharBuf *name) {
+RAMFolder_Local_Delete_IMP(RAMFolder *self, const String *name) {
     RAMFolderIVARS *const ivars = RAMFolder_IVARS(self);
     Obj *entry = Hash_Fetch(ivars->entries, (Obj*)name);
     if (entry) {
@@ -336,7 +336,7 @@ RAMFolder_Local_Delete_IMP(RAMFolder *self, const CharBuf *name) {
 }
 
 Folder*
-RAMFolder_Local_Find_Folder_IMP(RAMFolder *self, const CharBuf *path) {
+RAMFolder_Local_Find_Folder_IMP(RAMFolder *self, const String *path) {
     RAMFolderIVARS *const ivars = RAMFolder_IVARS(self);
     Folder *local_folder = (Folder*)Hash_Fetch(ivars->entries, (Obj*)path);
     if (local_folder && Folder_Is_A(local_folder, FOLDER)) {
@@ -350,14 +350,14 @@ RAMFolder_Close_IMP(RAMFolder *self) {
     UNUSED_VAR(self);
 }
 
-static CharBuf*
-S_fullpath(RAMFolder *self, const CharBuf *path) {
+static String*
+S_fullpath(RAMFolder *self, const String *path) {
     RAMFolderIVARS *const ivars = RAMFolder_IVARS(self);
-    if (CB_Get_Size(ivars->path)) {
-        return CB_newf("%o/%o", ivars->path, path);
+    if (Str_Get_Size(ivars->path)) {
+        return Str_newf("%o/%o", ivars->path, path);
     }
     else {
-        return CB_Clone(path);
+        return Str_Clone(path);
     }
 }
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/2c3dbf15/core/Lucy/Store/RAMFolder.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Store/RAMFolder.cfh b/core/Lucy/Store/RAMFolder.cfh
index 6472449..a1133f2 100644
--- a/core/Lucy/Store/RAMFolder.cfh
+++ b/core/Lucy/Store/RAMFolder.cfh
@@ -25,13 +25,13 @@ parcel Lucy;
 public class Lucy::Store::RAMFolder inherits Lucy::Store::Folder {
 
     inert incremented RAMFolder*
-    new(const CharBuf *path = NULL);
+    new(const String *path = NULL);
 
     /**
      * @param path Relative path, used for subfolders.
      */
     public inert RAMFolder*
-    init(RAMFolder *self, const CharBuf *path = NULL);
+    init(RAMFolder *self, const String *path = NULL);
 
     public void
     Initialize(RAMFolder *self);
@@ -43,31 +43,31 @@ public class Lucy::Store::RAMFolder inherits Lucy::Store::Folder {
     Close(RAMFolder *self);
 
     incremented nullable FileHandle*
-    Local_Open_FileHandle(RAMFolder *self, const CharBuf *name, uint32_t flags);
+    Local_Open_FileHandle(RAMFolder *self, const String *name, uint32_t flags);
 
     incremented nullable DirHandle*
     Local_Open_Dir(RAMFolder *self);
 
     bool
-    Local_MkDir(RAMFolder *self, const CharBuf *name);
+    Local_MkDir(RAMFolder *self, const String *name);
 
     bool
-    Local_Exists(RAMFolder *self, const CharBuf *name);
+    Local_Exists(RAMFolder *self, const String *name);
 
     bool
-    Local_Is_Directory(RAMFolder *self, const CharBuf *name);
+    Local_Is_Directory(RAMFolder *self, const String *name);
 
     nullable Folder*
-    Local_Find_Folder(RAMFolder *self, const CharBuf *name);
+    Local_Find_Folder(RAMFolder *self, const String *name);
 
     bool
-    Local_Delete(RAMFolder *self, const CharBuf *name);
+    Local_Delete(RAMFolder *self, const String *name);
 
     public bool
-    Rename(RAMFolder *self, const CharBuf* from, const CharBuf *to);
+    Rename(RAMFolder *self, const String* from, const String *to);
 
     public bool
-    Hard_Link(RAMFolder *self, const CharBuf *from, const CharBuf *to);
+    Hard_Link(RAMFolder *self, const String *from, const String *to);
 }
 
 


Mime
View raw message