hex: make wraparound of the index into ring-buffer explicit
Overflow is defined for unsigned integers, but not for signed ones. We could make the ring-buffer index in sha1_to_hex() and get_pathname() unsigned to be on the safe side to resolve this, but let's make it explicit that we are wrapping around at whatever the number of elements the ring-buffer has. The compiler is smart enough to turn modulus into bitmask for these codepaths that use ring-buffers of a size that is a power of 2. Signed-off-by: René Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
23415c26fe
commit
bb84735c80
3
hex.c
3
hex.c
@ -78,7 +78,8 @@ char *sha1_to_hex(const unsigned char *sha1)
|
||||
{
|
||||
static int bufno;
|
||||
static char hexbuffer[4][GIT_SHA1_HEXSZ + 1];
|
||||
return sha1_to_hex_r(hexbuffer[3 & ++bufno], sha1);
|
||||
bufno = (bufno + 1) % ARRAY_SIZE(hexbuffer);
|
||||
return sha1_to_hex_r(hexbuffer[bufno], sha1);
|
||||
}
|
||||
|
||||
char *oid_to_hex(const struct object_id *oid)
|
||||
|
3
path.c
3
path.c
@ -24,7 +24,8 @@ static struct strbuf *get_pathname(void)
|
||||
STRBUF_INIT, STRBUF_INIT, STRBUF_INIT, STRBUF_INIT
|
||||
};
|
||||
static int index;
|
||||
struct strbuf *sb = &pathname_array[3 & ++index];
|
||||
struct strbuf *sb = &pathname_array[index];
|
||||
index = (index + 1) % ARRAY_SIZE(pathname_array);
|
||||
strbuf_reset(sb);
|
||||
return sb;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user