{"thread":{"id":"41468","subject":"[PATCH v2] git.c: simplify stripping extension of a file in handle_builtin()","startedAt":"2016-02-22T07:18:29Z","lastAt":"2016-02-22T07:18:29Z","messageCount":1,"participants":["Alexander Kuleshov"],"isPatch":true,"patchVersion":2,"patchTotal":null},"messages":[{"id":"278838","messageId":"1456125509-2317-1-git-send-email-kuleshovmail@gmail.com","threadId":"41468","inReplyTo":null,"subject":"[PATCH v2] git.c: simplify stripping extension of a file in handle_builtin()","fromName":"Alexander Kuleshov","fromEmail":"kuleshovmail@gmail.com","sentAt":"2016-02-22T07:18:29Z","receivedAt":"2016-02-22T07:18:29Z","isPatch":true,"sender":{"key":"kuleshovmail@gmail.com","avatar":"https://avatars.githubusercontent.com/u/2699235?v=4"},"body":"The handle_builtin() starts from stripping of command extension if\nSTRIP_EXTENSION is enabled. Actually STRIP_EXTENSION does not used\nanywhere else.\n\nThis patch introduces strip_extension() helper to strip STRIP_EXTENSION\nextension from argv[0] with the strip_suffix() instead of manually\nstripping.\n\nSigned-off-by: Alexander Kuleshov <kuleshovmail@gmail.com>\nHelped-by: Jeff King <peff@peff.net>\n---\nChangelog:\n\nv2: typos fixed in commit message.\n\n git-compat-util.h |  4 ----\n git.c             | 26 +++++++++++++++-----------\n 2 files changed, 15 insertions(+), 15 deletions(-)\n\ndiff --git a/git-compat-util.h b/git-compat-util.h\nindex 8f0e76b..b35251c 100644\n--- a/git-compat-util.h\n+++ b/git-compat-util.h\n@@ -333,10 +333,6 @@ extern char *gitdirname(char *);\n #define _PATH_DEFPATH \"/usr/local/bin:/usr/bin:/bin\"\n #endif\n \n-#ifndef STRIP_EXTENSION\n-#define STRIP_EXTENSION \"\"\n-#endif\n-\n #ifndef has_dos_drive_prefix\n static inline int git_has_dos_drive_prefix(const char *path)\n {\ndiff --git a/git.c b/git.c\nindex 087ad31..6cc0c07 100644\n--- a/git.c\n+++ b/git.c\n@@ -509,21 +509,25 @@ int is_builtin(const char *s)\n \treturn !!get_builtin(s);\n }\n \n+#ifdef STRIP_EXTENSION\n+static void strip_extension(const char **argv)\n+{\n+\tsize_t len;\n+\n+\tif (strip_suffix(argv[0], STRIP_EXTENSION, &len))\n+\t\targv[0] = xmemdupz(argv[0], len);\n+}\n+#else\n+#define strip_extension(cmd)\n+#endif\n+\n static void handle_builtin(int argc, const char **argv)\n {\n-\tconst char *cmd = argv[0];\n-\tint i;\n-\tstatic const char ext[] = STRIP_EXTENSION;\n+\tconst char *cmd;\n \tstruct cmd_struct *builtin;\n \n-\tif (sizeof(ext) > 1) {\n-\t\ti = strlen(argv[0]) - strlen(ext);\n-\t\tif (i > 0 && !strcmp(argv[0] + i, ext)) {\n-\t\t\tchar *argv0 = xstrdup(argv[0]);\n-\t\t\targv[0] = cmd = argv0;\n-\t\t\targv0[i] = '\\0';\n-\t\t}\n-\t}\n+\tstrip_extension(argv);\n+\tcmd = argv[0];\n \n \t/* Turn \"git cmd --help\" into \"git help cmd\" */\n \tif (argc > 1 && !strcmp(argv[1], \"--help\")) {\n-- \n2.7.1.339.g0233b80\n"}]}