Skip to content

Commit

Permalink
Merge branch 'rs/hex2chr' into maint
Browse files Browse the repository at this point in the history
Code cleanup.

* rs/hex2chr:
  introduce hex2chr() for converting two hexadecimal digits to a character
  • Loading branch information
gitster committed Sep 19, 2016
2 parents 815a73f + d233097 commit c3befae
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 78 deletions.
10 changes: 10 additions & 0 deletions cache.h
Expand Up @@ -1139,6 +1139,16 @@ static inline unsigned int hexval(unsigned char c)
return hexval_table[c];
}

/*
* Convert two consecutive hexadecimal digits into a char. Return a
* negative value on error. Don't run over the end of short strings.
*/
static inline int hex2chr(const char *s)
{
int val = hexval(s[0]);
return (val < 0) ? val : (val << 4) | hexval(s[1]);
}

/* Convert to/from hex/sha1 representation */
#define MINIMUM_ABBREV minimum_abbrev
#define DEFAULT_ABBREV default_abbrev
Expand Down
12 changes: 2 additions & 10 deletions hex.c
Expand Up @@ -39,16 +39,8 @@ int get_sha1_hex(const char *hex, unsigned char *sha1)
{
int i;
for (i = 0; i < GIT_SHA1_RAWSZ; i++) {
unsigned int val;
/*
* hex[1]=='\0' is caught when val is checked below,
* but if hex[0] is NUL we have to avoid reading
* past the end of the string:
*/
if (!hex[0])
return -1;
val = (hexval(hex[0]) << 4) | hexval(hex[1]);
if (val & ~0xff)
int val = hex2chr(hex);
if (val < 0)
return -1;
*sha1++ = val;
hex += 2;
Expand Down
23 changes: 2 additions & 21 deletions pkt-line.c
Expand Up @@ -172,27 +172,8 @@ static int get_packet_data(int fd, char **src_buf, size_t *src_size,

static int packet_length(const char *linelen)
{
int n;
int len = 0;

for (n = 0; n < 4; n++) {
unsigned char c = linelen[n];
len <<= 4;
if (c >= '0' && c <= '9') {
len += c - '0';
continue;
}
if (c >= 'a' && c <= 'f') {
len += c - 'a' + 10;
continue;
}
if (c >= 'A' && c <= 'F') {
len += c - 'A' + 10;
continue;
}
return -1;
}
return len;
int val = hex2chr(linelen);
return (val < 0) ? val : (val << 8) | hex2chr(linelen + 2);
}

int packet_read(int fd, char **src_buf, size_t *src_len,
Expand Down
13 changes: 5 additions & 8 deletions pretty.c
Expand Up @@ -1065,7 +1065,7 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
const struct commit *commit = c->commit;
const char *msg = c->message;
struct commit_list *p;
int h1, h2;
int ch;

/* these are independent of the commit */
switch (placeholder[0]) {
Expand All @@ -1089,14 +1089,11 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
return 1;
case 'x':
/* %x00 == NUL, %x0a == LF, etc. */
if (0 <= (h1 = hexval_table[0xff & placeholder[1]]) &&
h1 <= 16 &&
0 <= (h2 = hexval_table[0xff & placeholder[2]]) &&
h2 <= 16) {
strbuf_addch(sb, (h1<<4)|h2);
return 3;
} else
ch = hex2chr(placeholder + 1);
if (ch < 0)
return 0;
strbuf_addch(sb, ch);
return 3;
case 'w':
if (placeholder[1] == '(') {
unsigned long width = 0, indent1 = 0, indent2 = 0;
Expand Down
20 changes: 1 addition & 19 deletions ref-filter.c
Expand Up @@ -1576,24 +1576,6 @@ void ref_array_sort(struct ref_sorting *sorting, struct ref_array *array)
qsort(array->items, array->nr, sizeof(struct ref_array_item *), compare_refs);
}

static int hex1(char ch)
{
if ('0' <= ch && ch <= '9')
return ch - '0';
else if ('a' <= ch && ch <= 'f')
return ch - 'a' + 10;
else if ('A' <= ch && ch <= 'F')
return ch - 'A' + 10;
return -1;
}
static int hex2(const char *cp)
{
if (cp[0] && cp[1])
return (hex1(cp[0]) << 4) | hex1(cp[1]);
else
return -1;
}

static void append_literal(const char *cp, const char *ep, struct ref_formatting_state *state)
{
struct strbuf *s = &state->stack->output;
Expand All @@ -1603,7 +1585,7 @@ static void append_literal(const char *cp, const char *ep, struct ref_formatting
if (cp[1] == '%')
cp++;
else {
int ch = hex2(cp + 1);
int ch = hex2chr(cp + 1);
if (0 <= ch) {
strbuf_addch(s, ch);
cp += 3;
Expand Down
21 changes: 1 addition & 20 deletions url.c
Expand Up @@ -29,25 +29,6 @@ int is_url(const char *url)
return (url[0] == ':' && url[1] == '/' && url[2] == '/');
}

static int url_decode_char(const char *q)
{
int i;
unsigned char val = 0;
for (i = 0; i < 2; i++) {
unsigned char c = *q++;
val <<= 4;
if (c >= '0' && c <= '9')
val += c - '0';
else if (c >= 'a' && c <= 'f')
val += c - 'a' + 10;
else if (c >= 'A' && c <= 'F')
val += c - 'A' + 10;
else
return -1;
}
return val;
}

static char *url_decode_internal(const char **query, int len,
const char *stop_at, struct strbuf *out,
int decode_plus)
Expand All @@ -66,7 +47,7 @@ static char *url_decode_internal(const char **query, int len,
}

if (c == '%') {
int val = url_decode_char(q + 1);
int val = hex2chr(q + 1);
if (0 <= val) {
strbuf_addch(out, val);
q += 3;
Expand Down

0 comments on commit c3befae

Please sign in to comment.