dir-iterator: pass name to prepare_next_entry_data() directly

When adding the next directory entry for `struct dir_iterator` we pass
the complete `struct dirent *` to `prepare_next_entry_data()` even
though we only need the entry's name.

Refactor the code to pass in the name, only. This prepares for a
subsequent commit where we introduce the ability to iterate through
dir entries in an ordered manner.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Patrick Steinhardt 2024-02-21 13:37:19 +01:00 committed by Junio C Hamano
parent f7cdeafdd0
commit 0218de2bdb

View file

@ -94,15 +94,15 @@ static int pop_level(struct dir_iterator_int *iter)
/* /*
* Populate iter->base with the necessary information on the next iteration * Populate iter->base with the necessary information on the next iteration
* entry, represented by the given dirent de. Return 0 on success and -1 * entry, represented by the given name. Return 0 on success and -1
* otherwise, setting errno accordingly. * otherwise, setting errno accordingly.
*/ */
static int prepare_next_entry_data(struct dir_iterator_int *iter, static int prepare_next_entry_data(struct dir_iterator_int *iter,
struct dirent *de) const char *name)
{ {
int err, saved_errno; int err, saved_errno;
strbuf_addstr(&iter->base.path, de->d_name); strbuf_addstr(&iter->base.path, name);
/* /*
* We have to reset these because the path strbuf might have * We have to reset these because the path strbuf might have
* been realloc()ed at the previous strbuf_addstr(). * been realloc()ed at the previous strbuf_addstr().
@ -159,7 +159,7 @@ int dir_iterator_advance(struct dir_iterator *dir_iterator)
if (is_dot_or_dotdot(de->d_name)) if (is_dot_or_dotdot(de->d_name))
continue; continue;
if (prepare_next_entry_data(iter, de)) { if (prepare_next_entry_data(iter, de->d_name)) {
if (errno != ENOENT && iter->flags & DIR_ITERATOR_PEDANTIC) if (errno != ENOENT && iter->flags & DIR_ITERATOR_PEDANTIC)
goto error_out; goto error_out;
continue; continue;