зеркало из https://github.com/microsoft/git.git
hex_to_bytes(): simpler replacement for `get_oid_hex_segment()`
Now that `get_oid_hex_segment()` does less, it makes sense to rename it and simplify its semantics: * Instead of a `hex_len` parameter, which was the number of hex characters (and had to be even), use a `len` parameter, which is the number of resulting bytes. This removes then need for the check that `hex_len` is even and to divide it by two to determine the number of bytes. For good hygiene, declare the `len` parameter to be `size_t` instead of `unsigned int`. * Change the order of the arguments to the more traditional (dst, src, len). * Rename the function to `hex_to_bytes()`. * Remove a loop variable: just count `len` down instead. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
d49852d6f8
Коммит
cfdc88f1a3
28
notes.c
28
notes.c
|
@ -335,25 +335,18 @@ static void note_tree_free(struct int_node *tree)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Convert a partial SHA1 hex string to the corresponding partial SHA1 value.
|
* Read `len` pairs of hexadecimal digits from `hex` and write the
|
||||||
* - hex - Partial SHA1 segment in ASCII hex format
|
* values to `binary` as `len` bytes. Return 0 on success, or -1 if
|
||||||
* - hex_len - Length of above segment. Must be multiple of 2 between 0 and 40
|
* the input does not consist of hex digits).
|
||||||
* - oid - Partial SHA1 value is written here
|
|
||||||
* Return 0 on success or -1 on error (invalid arguments or input not
|
|
||||||
* in hex format).
|
|
||||||
*/
|
*/
|
||||||
static int get_oid_hex_segment(const char *hex, unsigned int hex_len,
|
static int hex_to_bytes(unsigned char *binary, const char *hex, size_t len)
|
||||||
unsigned char *oid)
|
|
||||||
{
|
{
|
||||||
unsigned int i, len = hex_len >> 1;
|
for (; len; len--, hex += 2) {
|
||||||
if (hex_len % 2 != 0)
|
|
||||||
return -1;
|
|
||||||
for (i = 0; i < len; i++) {
|
|
||||||
unsigned int val = (hexval(hex[0]) << 4) | hexval(hex[1]);
|
unsigned int val = (hexval(hex[0]) << 4) | hexval(hex[1]);
|
||||||
|
|
||||||
if (val & ~0xff)
|
if (val & ~0xff)
|
||||||
return -1;
|
return -1;
|
||||||
*oid++ = val;
|
*binary++ = val;
|
||||||
hex += 2;
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -438,8 +431,8 @@ static void load_subtree(struct notes_tree *t, struct leaf_node *subtree,
|
||||||
/* notes must be blobs */
|
/* notes must be blobs */
|
||||||
goto handle_non_note;
|
goto handle_non_note;
|
||||||
|
|
||||||
if (get_oid_hex_segment(entry.path, path_len,
|
if (hex_to_bytes(object_oid.hash + prefix_len, entry.path,
|
||||||
object_oid.hash + prefix_len))
|
GIT_SHA1_RAWSZ - prefix_len))
|
||||||
goto handle_non_note; /* entry.path is not a SHA1 */
|
goto handle_non_note; /* entry.path is not a SHA1 */
|
||||||
|
|
||||||
type = PTR_TYPE_NOTE;
|
type = PTR_TYPE_NOTE;
|
||||||
|
@ -451,8 +444,7 @@ static void load_subtree(struct notes_tree *t, struct leaf_node *subtree,
|
||||||
/* internal nodes must be trees */
|
/* internal nodes must be trees */
|
||||||
goto handle_non_note;
|
goto handle_non_note;
|
||||||
|
|
||||||
if (get_oid_hex_segment(entry.path, 2,
|
if (hex_to_bytes(object_oid.hash + len++, entry.path, 1))
|
||||||
object_oid.hash + len++))
|
|
||||||
goto handle_non_note; /* entry.path is not a SHA1 */
|
goto handle_non_note; /* entry.path is not a SHA1 */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Загрузка…
Ссылка в новой задаче