From 8f0246551c3964eeb16d9c9f39845bd53af8bda8 Mon Sep 17 00:00:00 2001 From: Alex Riesen Date: Thu, 19 Mar 2009 23:27:32 +0100 Subject: Microoptimize strbuf_cmp It can be less object code and may be even faster, even if at the moment there is no callers to take an advantage of that. This implementation can be trivially made inlinable later. Signed-off-by: Alex Riesen Signed-off-by: Junio C Hamano --- strbuf.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) (limited to 'strbuf.c') diff --git a/strbuf.c b/strbuf.c index 6ed06840b8..bfbd81632e 100644 --- a/strbuf.c +++ b/strbuf.c @@ -139,14 +139,11 @@ void strbuf_list_free(struct strbuf **sbs) int strbuf_cmp(const struct strbuf *a, const struct strbuf *b) { - int cmp; - if (a->len < b->len) { - cmp = memcmp(a->buf, b->buf, a->len); - return cmp ? cmp : -1; - } else { - cmp = memcmp(a->buf, b->buf, b->len); - return cmp ? cmp : a->len != b->len; - } + int len = a->len < b->len ? a->len: b->len; + int cmp = memcmp(a->buf, b->buf, len); + if (cmp) + return cmp; + return a->len < b->len ? -1: a->len != b->len; } void strbuf_splice(struct strbuf *sb, size_t pos, size_t len, -- cgit v1.2.3 From a552de75eb01f78046feaf7dc88e5e4833624ad5 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Sat, 21 Mar 2009 13:17:30 -0700 Subject: strbuf_branchname(): a wrapper for branch name shorthands The function takes a user-supplied string that is supposed to be a branch name, and puts it in a strbuf after expanding possible shorthand notation. A handful of open coded sequence to do this in the existing code have been changed to use this helper function. Signed-off-by: Junio C Hamano --- strbuf.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'strbuf.c') diff --git a/strbuf.c b/strbuf.c index bfbd81632e..a60b0ad67d 100644 --- a/strbuf.c +++ b/strbuf.c @@ -357,3 +357,12 @@ int strbuf_read_file(struct strbuf *sb, const char *path, size_t hint) return len; } + +int strbuf_branchname(struct strbuf *sb, const char *name) +{ + int len = strlen(name); + if (interpret_branch_name(name, sb) == len) + return 0; + strbuf_add(sb, name, len); + return len; +} -- cgit v1.2.3 From a2fab531bbb00ff64335906e22854365be2eb5c7 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Sat, 21 Mar 2009 14:35:51 -0700 Subject: strbuf_check_branch_ref(): a helper to check a refname for a branch This allows a common calling sequence strbuf_branchname(&ref, name); strbuf_splice(&ref, 0, 0, "refs/heads/", 11); if (check_ref_format(ref.buf)) die(...); to be refactored into if (strbuf_check_branch_ref(&ref, name)) die(...); Signed-off-by: Junio C Hamano --- strbuf.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'strbuf.c') diff --git a/strbuf.c b/strbuf.c index a60b0ad67d..a88496030b 100644 --- a/strbuf.c +++ b/strbuf.c @@ -1,4 +1,5 @@ #include "cache.h" +#include "refs.h" int prefixcmp(const char *str, const char *prefix) { @@ -366,3 +367,10 @@ int strbuf_branchname(struct strbuf *sb, const char *name) strbuf_add(sb, name, len); return len; } + +int strbuf_check_branch_ref(struct strbuf *sb, const char *name) +{ + strbuf_branchname(sb, name); + strbuf_splice(sb, 0, 0, "refs/heads/", 11); + return check_ref_format(sb->buf); +} -- cgit v1.2.3