Similar functions exist in apply.c and builtin/show-branch.c for counting the number of slashes in a string. Also in the later patches, we introduce a third caller for the same. Hence, we unify it now by cleaning the existing functions and declaring a common function count_slashes in dir.h and implementing it in dir.c to remove this code duplication.
Mentored-by: Christian Couder <christian.cou...@gmail.com> Mentored-by: Stefan Beller <sbel...@google.com> Signed-off-by: Junio C Hamano <gits...@pobox.com> Signed-off-by: Prathamesh Chavan <pc44...@gmail.com> --- In future, I intend to use this function in builtin/submodule--helper.c as well, hence this change was introduced now. The patch passes all the tests. Complete build report of this patch is available at: https://travis-ci.org/pratham-pc/git/builds Branch: count_slashes Build #97 apply.c | 11 ----------- builtin/show-branch.c | 13 +++---------- dir.c | 9 +++++++++ dir.h | 3 +++ 4 files changed, 15 insertions(+), 21 deletions(-) diff --git a/apply.c b/apply.c index c49cef063..121e53406 100644 --- a/apply.c +++ b/apply.c @@ -762,17 +762,6 @@ static char *find_name_traditional(struct apply_state *state, return find_name_common(state, line, def, p_value, line + len, 0); } -static int count_slashes(const char *cp) -{ - int cnt = 0; - char ch; - - while ((ch = *cp++)) - if (ch == '/') - cnt++; - return cnt; -} - /* * Given the string after "--- " or "+++ ", guess the appropriate * p_value for the given patch. diff --git a/builtin/show-branch.c b/builtin/show-branch.c index 4a6cc6f49..3636a0559 100644 --- a/builtin/show-branch.c +++ b/builtin/show-branch.c @@ -5,6 +5,7 @@ #include "color.h" #include "argv-array.h" #include "parse-options.h" +#include "dir.h" static const char* show_branch_usage[] = { N_("git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]\n" @@ -421,14 +422,6 @@ static int append_tag_ref(const char *refname, const struct object_id *oid, static const char *match_ref_pattern = NULL; static int match_ref_slash = 0; -static int count_slash(const char *s) -{ - int cnt = 0; - while (*s) - if (*s++ == '/') - cnt++; - return cnt; -} static int append_matching_ref(const char *refname, const struct object_id *oid, int flag, void *cb_data) @@ -438,7 +431,7 @@ static int append_matching_ref(const char *refname, const struct object_id *oid, * refs/tags/v0.99.9a and friends. */ const char *tail; - int slash = count_slash(refname); + int slash = count_slashes(refname); for (tail = refname; *tail && match_ref_slash < slash; ) if (*tail++ == '/') slash--; @@ -529,7 +522,7 @@ static void append_one_rev(const char *av) int saved_matches = ref_name_cnt; match_ref_pattern = av; - match_ref_slash = count_slash(av); + match_ref_slash = count_slashes(av); for_each_ref(append_matching_ref, NULL); if (saved_matches == ref_name_cnt && ref_name_cnt < MAX_REVS) diff --git a/dir.c b/dir.c index 9efcf1eab..4a953c16a 100644 --- a/dir.c +++ b/dir.c @@ -52,6 +52,15 @@ static enum path_treatment read_directory_recursive(struct dir_struct *dir, static int get_dtype(struct dirent *de, struct index_state *istate, const char *path, int len); +int count_slashes(const char *s) +{ + int cnt = 0; + while (*s) + if (*s++ == '/') + cnt++; + return cnt; +} + int fspathcmp(const char *a, const char *b) { return ignore_case ? strcasecmp(a, b) : strcmp(a, b); diff --git a/dir.h b/dir.h index a89c13e27..e3717055d 100644 --- a/dir.h +++ b/dir.h @@ -197,6 +197,9 @@ struct dir_struct { unsigned unmanaged_exclude_files; }; +/*Count the number of slashes for string s*/ +extern int count_slashes(const char *s); + /* * The ordering of these constants is significant, with * higher-numbered match types signifying "closer" (i.e. more -- 2.13.0