{"thread":{"id":"41450","subject":"[PATCH] git.c: simplify striping extension of a file in handle_builtin()","startedAt":"2016-02-20T14:27:48Z","lastAt":"2016-02-22T00:20:12Z","messageCount":2,"participants":["Alexander Kuleshov","Eric Sunshine"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"278733","messageId":"1455978468-14387-1-git-send-email-kuleshovmail@gmail.com","threadId":"41450","inReplyTo":null,"subject":"[PATCH] git.c: simplify striping extension of a file in handle_builtin()","fromName":"Alexander Kuleshov","fromEmail":"kuleshovmail@gmail.com","sentAt":"2016-02-20T14:27:48Z","receivedAt":"2016-02-20T14:27:48Z","isPatch":true,"sender":{"key":"kuleshovmail@gmail.com","avatar":"https://avatars.githubusercontent.com/u/2699235?v=4"},"body":"The handle_builtin() starts from striping 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\nstriping.\n\nSigned-off-by: Alexander Kuleshov <kuleshovmail@gmail.com>\nHelped-by: Jeff King <peff@peff.net>\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.5.0\n"},{"id":"278806","messageId":"CAPig+cTiZ17Fb-d+9n_F2PM5+4Q4NAc0xC3xVogwv5+P6aCE9A@mail.gmail.com","threadId":"41450","inReplyTo":"1455978468-14387-1-git-send-email-kuleshovmail@gmail.com","subject":"Re: [PATCH] git.c: simplify striping extension of a file in handle_builtin()","fromName":"Eric Sunshine","fromEmail":"sunshine@sunshineco.com","sentAt":"2016-02-22T00:20:12Z","receivedAt":"2016-02-22T00:20:12Z","isPatch":true,"sender":{"key":"sunshine@sunshineco.com","avatar":"https://avatars.githubusercontent.com/u/163641?v=4"},"body":"On Sat, Feb 20, 2016 at 9:27 AM, Alexander Kuleshov\n<kuleshovmail@gmail.com> wrote:\n> git.c: simplify striping extension of a file in handle_builtin()\n\ns/striping/stripping/g\n\n(Note the '/g' above.)\n\nThe patch itself looks okay.\n\n> The handle_builtin() starts from striping of command extension if\n> STRIP_EXTENSION is enabled. Actually STRIP_EXTENSION does not used\n> anywhere else.\n>\n> This patch introduces strip_extension() helper to strip STRIP_EXTENSION\n> extension from argv[0] with the strip_suffix() instead of manually\n> striping.\n>\n> Signed-off-by: Alexander Kuleshov <kuleshovmail@gmail.com>\n> Helped-by: Jeff King <peff@peff.net>\n> ---\n> diff --git a/git-compat-util.h 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>  {\n> diff --git a/git.c b/git.c\n> index 087ad31..6cc0c07 100644\n> --- a/git.c\n> +++ b/git.c\n> @@ -509,21 +509,25 @@ int is_builtin(const char *s)\n>         return !!get_builtin(s);\n>  }\n>\n> +#ifdef STRIP_EXTENSION\n> +static void strip_extension(const char **argv)\n> +{\n> +       size_t len;\n> +\n> +       if (strip_suffix(argv[0], STRIP_EXTENSION, &len))\n> +               argv[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> -       const char *cmd = argv[0];\n> -       int i;\n> -       static const char ext[] = STRIP_EXTENSION;\n> +       const char *cmd;\n>         struct cmd_struct *builtin;\n>\n> -       if (sizeof(ext) > 1) {\n> -               i = strlen(argv[0]) - strlen(ext);\n> -               if (i > 0 && !strcmp(argv[0] + i, ext)) {\n> -                       char *argv0 = xstrdup(argv[0]);\n> -                       argv[0] = cmd = argv0;\n> -                       argv0[i] = '\\0';\n> -               }\n> -       }\n> +       strip_extension(argv);\n> +       cmd = argv[0];\n>\n>         /* Turn \"git cmd --help\" into \"git help cmd\" */\n>         if (argc > 1 && !strcmp(argv[1], \"--help\")) {\n> --\n> 2.5.0\n"}]}