Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
get_oid_hex_segment(): don't pad the rest of `oid`
author
Michael Haggerty
<mhagger@alum.mit.edu>
Sat, 26 Aug 2017 08:28:10 +0000
(10:28 +0200)
committer
Junio C Hamano
<gitster@pobox.com>
Sat, 26 Aug 2017 16:21:01 +0000
(09:21 -0700)
Remove the feature of `get_oid_hex_segment()` that it pads the rest of
the `oid` argument with zeros. Instead, do this at the caller who
needs it.
This makes the functionality of this function more coherent and
removes the need for its `oid_len` argument.
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
notes.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
4ebef53
)
diff --git
a/notes.c
b/notes.c
index 0074bc9b8948693d0dcd7957e1f9511bc50e43bf..e83f5e81363a9eadef850a89ada36551ad29b797 100644
(file)
--- a/
notes.c
+++ b/
notes.c
@@
-339,15
+339,14
@@
static void note_tree_free(struct int_node *tree)
* - hex - Partial SHA1 segment in ASCII hex format
* - hex_len - Length of above segment. Must be multiple of 2 between 0 and 40
* - oid - Partial SHA1 value is written here
* - hex - Partial SHA1 segment in ASCII hex format
* - hex_len - Length of above segment. Must be multiple of 2 between 0 and 40
* - oid - Partial SHA1 value is written here
- * - oid_len - Max #bytes to store in sha1, Must be >= hex_len / 2, and < 20
* Return 0 on success or -1 on error (invalid arguments or input not
* Return 0 on success or -1 on error (invalid arguments or input not
- * in hex format).
Pad oid with NULs up to oid_len.
+ * in hex format).
*/
static int get_oid_hex_segment(const char *hex, unsigned int hex_len,
*/
static int get_oid_hex_segment(const char *hex, unsigned int hex_len,
- unsigned char *oid
, unsigned int oid_len
)
+ unsigned char *oid)
{
unsigned int i, len = hex_len >> 1;
{
unsigned int i, len = hex_len >> 1;
- if (hex_len % 2 != 0
|| len > oid_len
)
+ if (hex_len % 2 != 0)
return -1;
for (i = 0; i < len; i++) {
unsigned int val = (hexval(hex[0]) << 4) | hexval(hex[1]);
return -1;
for (i = 0; i < len; i++) {
unsigned int val = (hexval(hex[0]) << 4) | hexval(hex[1]);
@@
-356,8
+355,6
@@
static int get_oid_hex_segment(const char *hex, unsigned int hex_len,
*oid++ = val;
hex += 2;
}
*oid++ = val;
hex += 2;
}
- for (; i < oid_len; i++)
- *oid++ = 0;
return 0;
}
return 0;
}
@@
-442,24
+439,29
@@
static void load_subtree(struct notes_tree *t, struct leaf_node *subtree,
goto handle_non_note;
if (get_oid_hex_segment(entry.path, path_len,
goto handle_non_note;
if (get_oid_hex_segment(entry.path, path_len,
- object_oid.hash + prefix_len,
- GIT_SHA1_RAWSZ - prefix_len))
+ object_oid.hash + prefix_len))
goto handle_non_note; /* entry.path is not a SHA1 */
type = PTR_TYPE_NOTE;
} else if (path_len == 2) {
/* This is potentially an internal node */
goto handle_non_note; /* entry.path is not a SHA1 */
type = PTR_TYPE_NOTE;
} else if (path_len == 2) {
/* This is potentially an internal node */
+ size_t len = prefix_len;
if (!S_ISDIR(entry.mode))
/* internal nodes must be trees */
goto handle_non_note;
if (get_oid_hex_segment(entry.path, 2,
if (!S_ISDIR(entry.mode))
/* internal nodes must be trees */
goto handle_non_note;
if (get_oid_hex_segment(entry.path, 2,
- object_oid.hash + prefix_len,
- GIT_SHA1_RAWSZ - prefix_len))
+ object_oid.hash + len++))
goto handle_non_note; /* entry.path is not a SHA1 */
goto handle_non_note; /* entry.path is not a SHA1 */
- object_oid.hash[KEY_INDEX] = (unsigned char) (prefix_len + 1);
+ /*
+ * Pad the rest of the SHA-1 with zeros,
+ * except for the last byte, where we write
+ * the length:
+ */
+ memset(object_oid.hash + len, 0, GIT_SHA1_RAWSZ - len - 1);
+ object_oid.hash[KEY_INDEX] = (unsigned char)len;
type = PTR_TYPE_SUBTREE;
} else {
type = PTR_TYPE_SUBTREE;
} else {