commit ccff619c1232894de361a4f436f9695a57d7f401 from: Omar Polo via: Thomas Adam date: Fri Sep 02 15:54:01 2022 UTC gotwebd: avoid extra strdups in got_output_repo_tree ok stsp@ commit - 557d32ee82573eead5f6556008c70a5997bf5d8a commit + ccff619c1232894de361a4f436f9695a57d7f401 blob - e84d37d61384031563ae898d9990fcdcb531b46a blob + 25cd3fa766ecf4f0c281b4082a53fba930fa6c07 --- gotwebd/got_operations.c +++ gotwebd/got_operations.c @@ -816,8 +816,7 @@ got_output_repo_tree(struct request *c) struct got_tree_object *tree = NULL; struct repo_dir *repo_dir = t->repo_dir; const char *name, *index_page_str, *folder; - char *id_str = NULL, *escaped_name = NULL; - char *path = NULL, *modestr = NULL; + char *id_str = NULL, *escaped_name = NULL, *path = NULL; int nentries, i, r; TAILQ_INIT(&refs); @@ -859,6 +858,7 @@ got_output_repo_tree(struct request *c) folder = qs->folder ? qs->folder : ""; for (i = 0; i < nentries; i++) { + const char *modestr; struct got_tree_entry *te; mode_t mode; @@ -868,41 +868,17 @@ got_output_repo_tree(struct request *c) if (error) goto done; - modestr = strdup(""); - if (modestr == NULL) { - error = got_error_from_errno("strdup"); - goto done; - } mode = got_tree_entry_get_mode(te); - if (got_object_tree_entry_is_submodule(te)) { - free(modestr); - modestr = strdup("$"); - if (modestr == NULL) { - error = got_error_from_errno("strdup"); - goto done; - } - } else if (S_ISLNK(mode)) { - free(modestr); - modestr = strdup("@"); - if (modestr == NULL) { - error = got_error_from_errno("strdup"); - goto done; - } - } else if (S_ISDIR(mode)) { - free(modestr); - modestr = strdup("/"); - if (modestr == NULL) { - error = got_error_from_errno("strdup"); - goto done; - } - } else if (mode & S_IXUSR) { - free(modestr); - modestr = strdup("*"); - if (modestr == NULL) { - error = got_error_from_errno("strdup"); - goto done; - } - } + if (got_object_tree_entry_is_submodule(te)) + modestr = "$"; + else if (S_ISLNK(mode)) + modestr = "@"; + else if (S_ISDIR(mode)) + modestr = "/"; + else if (mode & S_IXUSR) + modestr = "*"; + else + modestr = ""; name = got_tree_entry_get_name(te); error = gotweb_escape_html(&escaped_name, name); @@ -949,15 +925,12 @@ got_output_repo_tree(struct request *c) } free(id_str); id_str = NULL; - free(modestr); - modestr = NULL; free(escaped_name); escaped_name = NULL; } done: free(escaped_name); free(id_str); - free(modestr); free(path); got_ref_list_free(&refs); if (commit)