Skip to content

Commit

Permalink
search_ref_dir(): return an index rather than a pointer
Browse files Browse the repository at this point in the history
Change search_ref_dir() to return the index of the sought entry (or -1
on error) rather than a pointer to the entry.  This will make it more
natural to use the function for removing an entry from the list.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Michael Haggerty authored and Junio C Hamano committed May 1, 2013
1 parent ab292bc commit 9fc0a64
Showing 1 changed file with 18 additions and 12 deletions.
30 changes: 18 additions & 12 deletions refs.c
Original file line number Diff line number Diff line change
Expand Up @@ -367,18 +367,17 @@ static int ref_entry_cmp_sslice(const void *key_, const void *ent_)
}

/*
* Return the entry with the given refname from the ref_dir
* (non-recursively), sorting dir if necessary. Return NULL if no
* such entry is found. dir must already be complete.
* Return the index of the entry with the given refname from the
* ref_dir (non-recursively), sorting dir if necessary. Return -1 if
* no such entry is found. dir must already be complete.
*/
static struct ref_entry *search_ref_dir(struct ref_dir *dir,
const char *refname, size_t len)
static int search_ref_dir(struct ref_dir *dir, const char *refname, size_t len)
{
struct ref_entry **r;
struct string_slice key;

if (refname == NULL || !dir->nr)
return NULL;
return -1;

sort_ref_dir(dir);
key.len = len;
Expand All @@ -387,9 +386,9 @@ static struct ref_entry *search_ref_dir(struct ref_dir *dir,
ref_entry_cmp_sslice);

if (r == NULL)
return NULL;
return -1;

return *r;
return r - dir->entries;
}

/*
Expand All @@ -403,8 +402,9 @@ static struct ref_dir *search_for_subdir(struct ref_dir *dir,
const char *subdirname, size_t len,
int mkdir)
{
struct ref_entry *entry = search_ref_dir(dir, subdirname, len);
if (!entry) {
int entry_index = search_ref_dir(dir, subdirname, len);
struct ref_entry *entry;
if (entry_index == -1) {
if (!mkdir)
return NULL;
/*
Expand All @@ -415,6 +415,8 @@ static struct ref_dir *search_for_subdir(struct ref_dir *dir,
*/
entry = create_dir_entry(dir->ref_cache, subdirname, len, 0);
add_entry_to_dir(dir, entry);
} else {
entry = dir->entries[entry_index];
}
return get_ref_dir(entry);
}
Expand Down Expand Up @@ -453,12 +455,16 @@ static struct ref_dir *find_containing_dir(struct ref_dir *dir,
*/
static struct ref_entry *find_ref(struct ref_dir *dir, const char *refname)
{
int entry_index;
struct ref_entry *entry;
dir = find_containing_dir(dir, refname, 0);
if (!dir)
return NULL;
entry = search_ref_dir(dir, refname, strlen(refname));
return (entry && !(entry->flag & REF_DIR)) ? entry : NULL;
entry_index = search_ref_dir(dir, refname, strlen(refname));
if (entry_index == -1)
return NULL;
entry = dir->entries[entry_index];
return (entry->flag & REF_DIR) ? NULL : entry;
}

/*
Expand Down

0 comments on commit 9fc0a64

Please sign in to comment.