[PATCH v2] merge: break out of all_strategy loop when strategy is found
- From
- Rose via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Jan 9, 2023, 17:34 UTC
- Message-ID
- <pull.1429.v2.git.git.1673285669004.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.1429.git.git.1673203153257.gitgitgadget@gmail.com>
From: Seija Kijin <doremylover123@gmail.com>
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@gmail.com>
---
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@gmail.comPublished-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@gmail.com>
## 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