diff options
author | Jeff King <peff@peff.net> | 2009-02-25 03:32:10 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-02-26 00:49:44 -0800 |
commit | 5483f79998c5a9705d453a713d11fb7591329ed4 (patch) | |
tree | e80ce636a4c7618b184a5749e0dc09f7515cb054 | |
parent | 119c8eeede81489b2ce8b26ae7dcb47290e257eb (diff) | |
download | git-5483f79998c5a9705d453a713d11fb7591329ed4.tar.gz |
refactor find_ref_by_name() to accept const list
Since it doesn't actually touch its argument, this makes
sense.
However, we still want to return a non-const version (which
requires a cast) so that this:
struct ref *a, *b;
a = find_ref_by_name(b);
works. Unfortunately, you can also silently strip the const
from a variable:
struct ref *a;
const struct ref *b;
a = find_ref_by_name(b);
This is a classic C const problem because there is no way to
say "return the type with the same constness that was passed
to us"; we provide the same semantics as standard library
functions like strchr.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Jay Soffian <jaysoffian@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | cache.h | 2 | ||||
-rw-r--r-- | refs.c | 4 |
2 files changed, 3 insertions, 3 deletions
@@ -801,7 +801,7 @@ struct ref { #define REF_HEADS (1u << 1) #define REF_TAGS (1u << 2) -extern struct ref *find_ref_by_name(struct ref *list, const char *name); +extern struct ref *find_ref_by_name(const struct ref *list, const char *name); #define CONNECT_VERBOSE (1u << 0) extern struct child_process *git_connect(int fd[2], const char *url, const char *prog, int flags); @@ -1628,10 +1628,10 @@ int update_ref(const char *action, const char *refname, return 0; } -struct ref *find_ref_by_name(struct ref *list, const char *name) +struct ref *find_ref_by_name(const struct ref *list, const char *name) { for ( ; list; list = list->next) if (!strcmp(list->name, name)) - return list; + return (struct ref *)list; return NULL; } |