[PATCH 6/8] sha1_name: introduce getn_sha1() to take length
- From
Ramkumar Ramachandra <artagnon@gmail.com>
- Date
- Jan 10, 2012, 16:13 UTC
- Message-ID
- <1326212039-13806-7-git-send-email-artagnon@gmail.com>
- In-Reply-To
- <1326212039-13806-1-git-send-email-artagnon@gmail.com>
Introduce a variant of get_sha1() that additionally takes the length of the buffer, so it can parse object names from buffers that don't necessarily terminate with NUL.
Suggested-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com> --- cache.h | 1 + sha1_name.c | 23 +++++++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/cache.h b/cache.h index 10afd71..8bb6759 100644 --- a/cache.h +++ b/cache.h @@ -812,6 +812,7 @@ struct object_context { }; extern int get_sha1(const char *str, unsigned char *sha1); +extern int getn_sha1(const char *name, int namelen, unsigned char *sha1); extern int get_sha1_with_mode_1(const char *str, unsigned char *sha1, unsigned *mode, int only_to_die, const char *prefix); static inline int get_sha1_with_mode(const char *str, unsigned char *sha1, unsigned *mode) { diff --git a/sha1_name.c b/sha1_name.c index 03ffc2c..31d412e 100644 --- a/sha1_name.c +++ b/sha1_name.c @@ -1019,12 +1019,11 @@ static char *resolve_relative_path(const char *rel) rel); } -int get_sha1_with_context_1(const char *name, unsigned char *sha1, - struct object_context *oc, - int only_to_die, const char *prefix) +static int getn_sha1_with_context_1(const char *name, int namelen, + unsigned char *sha1, struct object_context *oc, + int only_to_die, const char *prefix) { int ret, bracket_depth; - int namelen = strlen(name); const char *cp; memset(oc, 0, sizeof(*oc)); @@ -1134,3 +1133,19 @@ int get_sha1_with_context_1(const char *name, unsigned char *sha1, } return ret; } + +int get_sha1_with_context_1(const char *name, unsigned char *sha1, + struct object_context *oc, + int only_to_die, const char *prefix) +{ + int namelen = strlen(name); + return getn_sha1_with_context_1(name, namelen, sha1, + oc, only_to_die, prefix); +} + +/* A variant of get_sha1 that takes a length. */ +int getn_sha1(const char *name, int namelen, unsigned char *sha1) +{ + struct object_context unused; + return getn_sha1_with_context_1(name, namelen, sha1, &unused, 0, NULL); +}
-- 1.7.8.2