mirror of
https://github.com/git/git.git
synced 2026-08-08 17:11:48 +00:00
hex: add functionality for lowercase-only hex
We currently allow both upper and lower case for all hex values in Git. However, in a future commit, we'll want to change that to allow only lowercase values in some cases. To prepare for that case, provide a table to convert hex values using lowercase only and an enum to let us choose which we want, wiring it up to the hexval function. For now, keep things completely the same by specifying only the variant that accepts both lowercase and uppercase to avoid changing behavior. Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
6375b40aea
commit
fa632be563
2
color.c
2
color.c
@@ -72,7 +72,7 @@ static int get_hex_color(const char **inp, int width, unsigned char *out)
|
||||
unsigned int val;
|
||||
|
||||
assert(width == 1 || width == 2);
|
||||
val = (hexval(in[0]) << 4) | hexval(in[width - 1]);
|
||||
val = (hexval(in[0], HEX_KIND_MIXED) << 4) | hexval(in[width - 1], HEX_KIND_MIXED);
|
||||
if (val & ~0xff)
|
||||
return -1;
|
||||
*inp += width;
|
||||
|
||||
37
hex-ll.c
37
hex-ll.c
@@ -36,10 +36,45 @@ const signed char hexval_table[256] = {
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* f8-ff */
|
||||
};
|
||||
|
||||
const signed char hexval_lc_table[256] = {
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* 00-07 */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* 08-0f */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* 10-17 */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* 18-1f */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* 20-27 */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* 28-2f */
|
||||
0, 1, 2, 3, 4, 5, 6, 7, /* 30-37 */
|
||||
8, 9, -1, -1, -1, -1, -1, -1, /* 38-3f */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* 40-47 */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* 48-4f */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* 50-57 */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* 58-5f */
|
||||
-1, 10, 11, 12, 13, 14, 15, -1, /* 60-67 */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* 68-67 */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* 70-77 */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* 78-7f */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* 80-87 */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* 88-8f */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* 90-97 */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* 98-9f */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* a0-a7 */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* a8-af */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* b0-b7 */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* b8-bf */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* c0-c7 */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* c8-cf */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* d0-d7 */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* d8-df */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* e0-e7 */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* e8-ef */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* f0-f7 */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, /* f8-ff */
|
||||
};
|
||||
|
||||
int hex_to_bytes(unsigned char *binary, const char *hex, size_t len)
|
||||
{
|
||||
for (; len; len--, hex += 2) {
|
||||
unsigned int val = (hexval(hex[0]) << 4) | hexval(hex[1]);
|
||||
unsigned int val = (hexval(hex[0], HEX_KIND_MIXED) << 4) | hexval(hex[1], HEX_KIND_MIXED);
|
||||
|
||||
if (val & ~0xff)
|
||||
return -1;
|
||||
|
||||
14
hex-ll.h
14
hex-ll.h
@@ -1,10 +1,16 @@
|
||||
#ifndef HEX_LL_H
|
||||
#define HEX_LL_H
|
||||
|
||||
enum hexkind {
|
||||
HEX_KIND_MIXED = 0,
|
||||
HEX_KIND_LOWER = 1,
|
||||
};
|
||||
|
||||
extern const signed char hexval_table[256];
|
||||
static inline unsigned int hexval(unsigned char c)
|
||||
extern const signed char hexval_lc_table[256];
|
||||
static inline unsigned int hexval(unsigned char c, enum hexkind kind)
|
||||
{
|
||||
return hexval_table[c];
|
||||
return kind == HEX_KIND_MIXED ? hexval_table[c] : hexval_lc_table[c];
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -13,8 +19,8 @@ static inline unsigned int hexval(unsigned char c)
|
||||
*/
|
||||
static inline int hex2chr(const char *s)
|
||||
{
|
||||
unsigned int val = hexval(s[0]);
|
||||
return (val & ~0xf) ? val : (val << 4) | hexval(s[1]);
|
||||
unsigned int val = hexval(s[0], HEX_KIND_MIXED);
|
||||
return (val & ~0xf) ? val : (val << 4) | hexval(s[1], HEX_KIND_MIXED);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -378,10 +378,10 @@ int packet_length(const char lenbuf_hex[4], size_t size)
|
||||
{
|
||||
if (size < 4)
|
||||
BUG("buffer too small");
|
||||
return hexval(lenbuf_hex[0]) << 12 |
|
||||
hexval(lenbuf_hex[1]) << 8 |
|
||||
hexval(lenbuf_hex[2]) << 4 |
|
||||
hexval(lenbuf_hex[3]);
|
||||
return hexval(lenbuf_hex[0], HEX_KIND_MIXED) << 12 |
|
||||
hexval(lenbuf_hex[1], HEX_KIND_MIXED) << 8 |
|
||||
hexval(lenbuf_hex[2], HEX_KIND_MIXED) << 4 |
|
||||
hexval(lenbuf_hex[3], HEX_KIND_MIXED);
|
||||
}
|
||||
|
||||
static const char *find_packfile_uri_path(const char *buffer)
|
||||
|
||||
Reference in New Issue
Block a user