Skip to content

Commit b511d6d

Browse files
peffgitster
authored andcommitted
untracked-cache: simplify parsing by dropping "next"
When we parse an on-disk untracked cache, we have two pointers, "data" and "next". As we parse, we point "next" to the end of an element, and then later update "data" to match. But we actually don't need two pointers. Each parsing step can just update "data" directly from other variables we hold (and we don't have to worry about bailing in an intermediate state, since any parsing failure causes us to immediately discard "data" and return). Signed-off-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent c6909f9 commit b511d6d

File tree

1 file changed

+7
-13
lines changed

1 file changed

+7
-13
lines changed

dir.c

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2732,50 +2732,44 @@ static int read_one_dir(struct untracked_cache_dir **untracked_,
27322732
struct read_data *rd)
27332733
{
27342734
struct untracked_cache_dir ud, *untracked;
2735-
const unsigned char *next, *data = rd->data, *end = rd->end;
2735+
const unsigned char *data = rd->data, *end = rd->end;
27362736
const unsigned char *eos;
27372737
unsigned int value;
27382738
int i, len;
27392739

27402740
memset(&ud, 0, sizeof(ud));
27412741

2742-
next = data;
2743-
value = decode_varint(&next);
2744-
if (next > end)
2742+
value = decode_varint(&data);
2743+
if (data > end)
27452744
return -1;
27462745
ud.recurse = 1;
27472746
ud.untracked_alloc = value;
27482747
ud.untracked_nr = value;
27492748
if (ud.untracked_nr)
27502749
ALLOC_ARRAY(ud.untracked, ud.untracked_nr);
2751-
data = next;
27522750

2753-
next = data;
2754-
ud.dirs_alloc = ud.dirs_nr = decode_varint(&next);
2755-
if (next > end)
2751+
ud.dirs_alloc = ud.dirs_nr = decode_varint(&data);
2752+
if (data > end)
27562753
return -1;
27572754
ALLOC_ARRAY(ud.dirs, ud.dirs_nr);
2758-
data = next;
27592755

27602756
eos = memchr(data, '\0', end - data);
27612757
if (!eos || eos == end)
27622758
return -1;
27632759
len = eos - data;
2764-
next = eos + 1;
27652760

27662761
*untracked_ = untracked = xmalloc(st_add3(sizeof(*untracked), len, 1));
27672762
memcpy(untracked, &ud, sizeof(ud));
27682763
memcpy(untracked->name, data, len + 1);
2769-
data = next;
2764+
data = eos + 1;
27702765

27712766
for (i = 0; i < untracked->untracked_nr; i++) {
27722767
eos = memchr(data, '\0', end - data);
27732768
if (!eos || eos == end)
27742769
return -1;
27752770
len = eos - data;
2776-
next = eos + 1;
27772771
untracked->untracked[i] = xmemdupz(data, len);
2778-
data = next;
2772+
data = eos + 1;
27792773
}
27802774

27812775
rd->ucd[rd->index++] = untracked;

0 commit comments

Comments
 (0)