path: root/cache.h
diff options
authorLinus Torvalds <>2007-05-30 17:32:19 (GMT)
committerJunio C Hamano <>2007-05-30 22:01:37 (GMT)
commit192a6be2a77ab3bf446237fdf6575b0aca863d9e (patch)
tree8ee58b598b0abffe78dcf16385320c53b74f4f52 /cache.h
parent7faf068660f0a060066ccbc80f7debbba6bc2d76 (diff)
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 <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'cache.h')
1 files changed, 2 insertions, 2 deletions
diff --git a/cache.h b/cache.h
index 7cedda6..bea8cad 100644
--- a/cache.h
+++ b/cache.h
@@ -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];