{"thread":{"id":"10439","subject":"[PATCH] chdir() into list_commands() dir instead of building paths for stat()","startedAt":"2007-10-23T15:40:22Z","lastAt":"2007-10-23T15:40:22Z","messageCount":1,"participants":["Scott R Parish"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"57000","messageId":"20071023154021.GA26587@srparish.net","threadId":"10439","inReplyTo":null,"subject":"[PATCH] chdir() into list_commands() dir instead of building paths for stat()","fromName":"Scott R Parish","fromEmail":"srp@srparish.net","sentAt":"2007-10-23T15:40:22Z","receivedAt":"2007-10-23T15:40:22Z","isPatch":true,"sender":{"key":"srp@srparish.net","avatar":"https://gravatar.com/avatar/870e5b6fc4f710cf4db5684bd9af7f2cee5734b3dab3209b13e00cf64f6c9f0e?d=mp&s=160"},"body":"Signed-off-by: Scott R Parish <srp@srparish.net>\n---\n help.c |   18 +++---------------\n 1 files changed, 3 insertions(+), 15 deletions(-)\n\ndiff --git a/help.c b/help.c\nindex 950f62d..906f8f6 100644\n--- a/help.c\n+++ b/help.c\n@@ -96,35 +96,23 @@ static void pretty_print_string_list(struct cmdname **cmdname, int longest)\n static void list_commands(const char *exec_path, const char *prefix)\n {\n \tunsigned int longest = 0;\n-\tchar path[PATH_MAX];\n-\tint dirlen;\n \tint prefix_len = strlen(prefix);\n \tDIR *dir = opendir(exec_path);\n \tstruct dirent *de;\n \n-\tif (!dir) {\n+\tif (!dir || chdir(exec_path)) {\n \t\tfprintf(stderr, \"git: '%s': %s\\n\", exec_path, strerror(errno));\n \t\texit(1);\n \t}\n \n-\tdirlen = strlen(exec_path);\n-\tif (PATH_MAX - 20 < dirlen) {\n-\t\tfprintf(stderr, \"git: insanely long exec-path '%s'\\n\",\n-\t\t\texec_path);\n-\t\texit(1);\n-\t}\n-\n-\tmemcpy(path, exec_path, dirlen);\n-\tpath[dirlen++] = '/';\n-\n \twhile ((de = readdir(dir)) != NULL) {\n \t\tstruct stat st;\n \t\tint entlen;\n \n \t\tif (prefixcmp(de->d_name, prefix))\n \t\t\tcontinue;\n-\t\tstrcpy(path+dirlen, de->d_name);\n-\t\tif (stat(path, &st) || /* stat, not lstat */\n+\n+\t\tif (stat(de->d_name, &st) || /* stat, not lstat */\n \t\t    !S_ISREG(st.st_mode) ||\n \t\t    !(st.st_mode & S_IXUSR))\n \t\t\tcontinue;\n-- \ngitgui.0.8.4.11178.g9a1bf-dirty\n"}]}