From: Seija Kijin <doremylover123@xxxxxxxxx> strncmp does not modify any of the memory. Once we find a match, there is no point in trying to find the second match in the inner loop. Break out of the loop once we find the first match. Signed-off-by: Seija Kijin <doremylover123@xxxxxxxxx> --- merge: break out of all_strategy loop when strategy is found strncmp does not modify any of the memory, so looping through all elements is a waste of resources. Signed-off-by: Seija Kijin doremylover123@xxxxxxxxx Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1429%2FAtariDreams%2Fexit-v2 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1429/AtariDreams/exit-v2 Pull-Request: https://github.com/git/git/pull/1429 Range-diff vs v1: 1: 82c1d021b2c ! 1: d93d4aff780 merge: break out of all_strategy loop when strategy is found @@ Metadata ## Commit message ## merge: break out of all_strategy loop when strategy is found - strncmp does not modify any of the memory, - so looping through all elements is a waste of resources. + strncmp does not modify any of the memory. + Once we find a match, there is no point + in trying to find the second match + in the inner loop. + + Break out of the loop once we + find the first match. Signed-off-by: Seija Kijin <doremylover123@xxxxxxxxx> ## builtin/merge.c ## @@ builtin/merge.c: static struct strategy *get_strategy(const char *name) + for (i = 0; i < main_cmds.cnt; i++) { int j, found = 0; struct cmdname *ent = main_cmds.names[i]; - for (j = 0; j < ARRAY_SIZE(all_strategy); j++) -- if (!strncmp(ent->name, all_strategy[j].name, ent->len) -- && !all_strategy[j].name[ent->len]) -+ if (!strncmp(ent->name, all_strategy[j].name, -+ ent->len) && -+ !all_strategy[j].name[ent->len]) { +- for (j = 0; j < ARRAY_SIZE(all_strategy); j++) ++ for (j = 0; !found && j < ARRAY_SIZE(all_strategy); j++) + if (!strncmp(ent->name, all_strategy[j].name, ent->len) + && !all_strategy[j].name[ent->len]) found = 1; -+ break; -+ } - if (!found) - add_cmdname(¬_strategies, ent->name, ent->len); - } builtin/merge.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builtin/merge.c b/builtin/merge.c index 0f093f2a4f2..74de2ebd2b3 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -188,7 +188,7 @@ static struct strategy *get_strategy(const char *name) for (i = 0; i < main_cmds.cnt; i++) { int j, found = 0; struct cmdname *ent = main_cmds.names[i]; - for (j = 0; j < ARRAY_SIZE(all_strategy); j++) + for (j = 0; !found && j < ARRAY_SIZE(all_strategy); j++) if (!strncmp(ent->name, all_strategy[j].name, ent->len) && !all_strategy[j].name[ent->len]) found = 1; base-commit: a38d39a4c50d1275833aba54c4dbdfce9e2e9ca1 -- gitgitgadget