database: move striping of trailing '/' into helper function
authorYuri Volchkov <yuri.volchkov@gmail.com>
Mon, 21 Aug 2017 15:44:45 +0000 (17:44 +0200)
committerDavid Bremner <david@tethera.net>
Tue, 22 Aug 2017 21:47:51 +0000 (18:47 -0300)
Stripping trailing character is not that uncommon
operation. Particularly, the next patch has to perform it as
well. Lets move it to the separate function to avoid code duplication.

Also the new function has a little improvement: if the character to
strip is repeated several times in the end of a string, function
strips them all.

Signed-off-by: Yuri Volchkov <yuri.volchkov@gmail.com>
lib/database.cc
util/string-util.c
util/string-util.h

index 8f0e22a834eeb3e851577c2a97b3de4ddebf7202..79eb3d6977343e50e15e12746ac33ac01f505c28 100644 (file)
@@ -858,8 +858,7 @@ notmuch_database_open_verbose (const char *path,
     notmuch->status_string = NULL;
     notmuch->path = talloc_strdup (notmuch, path);
 
-    if (notmuch->path[strlen (notmuch->path) - 1] == '/')
-       notmuch->path[strlen (notmuch->path) - 1] = '\0';
+    strip_trailing(notmuch->path, '/');
 
     notmuch->mode = mode;
     notmuch->atomic_nesting = 0;
index 18125309ebe9ed33c048f928e02d1e6b35edca28..b0108811903b27153dcaece1fa10b893234c3b9f 100644 (file)
@@ -255,3 +255,16 @@ strcase_hash (const void *ptr)
 
     return hash;
 }
+
+void
+strip_trailing (char *str, char ch)
+{
+    int i;
+
+    for (i = strlen (str) - 1; i >= 0; i--) {
+       if (str[i] == ch)
+           str[i] = '\0';
+       else
+           break;
+    }
+}
index 87917b8fd279de6e07f2fb919429fb50512a85b4..97770614adf1ab6930e529cd148dea47c71547f6 100644 (file)
@@ -75,6 +75,8 @@ int strcase_equal (const void *a, const void *b);
 /* GLib GHashFunc compatible case insensitive hash function */
 unsigned int strcase_hash (const void *ptr);
 
+void strip_trailing (char *str, char ch);
+
 #ifdef __cplusplus
 }
 #endif