help: clean up kfmclient munging
[gitweb.git] / builtin / help.c
index 3422e7307998b9da91f85512084aeae515022a60..e1650ab3f9a1b94e4df3542a8b1a9c7a43e2dd03 100644 (file)
@@ -140,17 +140,10 @@ static void exec_man_konqueror(const char *path, const char *page)
 
                /* It's simpler to launch konqueror using kfmclient. */
                if (path) {
-                       const char *file = strrchr(path, '/');
-                       if (file && !strcmp(file + 1, "konqueror")) {
-                               char *new = xstrdup(path);
-                               char *dest = strrchr(new, '/');
-
-                               /* strlen("konqueror") == strlen("kfmclient") */
-                               strcpy(dest + 1, "kfmclient");
-                               path = new;
-                       }
-                       if (file)
-                               filename = file;
+                       size_t len;
+                       if (strip_suffix(path, "/konqueror", &len))
+                               path = xstrfmt("%.*s/kfmclient", (int)len, path);
+                       filename = basename((char *)path);
                } else
                        path = "kfmclient";
                strbuf_addf(&man_page, "man:%s(1)", page);
@@ -295,16 +288,6 @@ static int is_git_command(const char *s)
                is_in_cmdlist(&other_cmds, s);
 }
 
-static const char *prepend(const char *prefix, const char *cmd)
-{
-       size_t pre_len = strlen(prefix);
-       size_t cmd_len = strlen(cmd);
-       char *p = xmalloc(pre_len + cmd_len + 1);
-       memcpy(p, prefix, pre_len);
-       strcpy(p + pre_len, cmd);
-       return p;
-}
-
 static const char *cmd_to_page(const char *git_cmd)
 {
        if (!git_cmd)
@@ -312,9 +295,9 @@ static const char *cmd_to_page(const char *git_cmd)
        else if (starts_with(git_cmd, "git"))
                return git_cmd;
        else if (is_git_command(git_cmd))
-               return prepend("git-", git_cmd);
+               return xstrfmt("git-%s", git_cmd);
        else
-               return prepend("git", git_cmd);
+               return xstrfmt("git%s", git_cmd);
 }
 
 static void setup_man_path(void)