diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2007-05-30 10:32:19 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2007-05-30 15:01:37 -0700 |
commit | 192a6be2a77ab3bf446237fdf6575b0aca863d9e (patch) | |
tree | 8ee58b598b0abffe78dcf16385320c53b74f4f52 /cache.h | |
parent | 7faf068660f0a060066ccbc80f7debbba6bc2d76 (diff) | |
download | git-192a6be2a77ab3bf446237fdf6575b0aca863d9e.tar.gz git-192a6be2a77ab3bf446237fdf6575b0aca863d9e.tar.xz |
fix signed range problems with hex conversions
Make hexval_table[] "const". Also make sure that the accessor
function hexval() does not access the table with out-of-range
values by declaring its parameter "unsigned char", instead of
"unsigned int".
With this, gcc can just generate:
movzbl (%rdi), %eax
movsbl hexval_table(%rax),%edx
movzbl 1(%rdi), %eax
movsbl hexval_table(%rax),%eax
sall $4, %edx
orl %eax, %edx
for the code to generate a byte from two hex characters.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'cache.h')
-rw-r--r-- | cache.h | 4 |
1 files changed, 2 insertions, 2 deletions
@@ -302,8 +302,8 @@ extern int legacy_loose_object(unsigned char *); extern int has_pack_file(const unsigned char *sha1); extern int has_pack_index(const unsigned char *sha1); -extern signed char hexval_table[256]; -static inline unsigned int hexval(unsigned int c) +extern const signed char hexval_table[256]; +static inline unsigned int hexval(unsigned char c) { return hexval_table[c]; } |