diff options
author | Ævar Arnfjörð Bjarmason <avarab@gmail.com> | 2022-02-04 23:48:25 (GMT) |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2022-02-26 01:16:31 (GMT) |
commit | b04cdea46cf5ae60066fa6dd12d5449bf3ef283f (patch) | |
tree | 29b473cefcff4dd98c84118a6d4e0c2906c4288b /bulk-checkin.c | |
parent | 63e05f90562cc8db5c450dbceeab6677b6e5351f (diff) | |
download | git-b04cdea46cf5ae60066fa6dd12d5449bf3ef283f.zip git-b04cdea46cf5ae60066fa6dd12d5449bf3ef283f.tar.gz git-b04cdea46cf5ae60066fa6dd12d5449bf3ef283f.tar.bz2 |
object-file API: add a format_object_header() function
Add a convenience function to wrap the xsnprintf() command that
generates loose object headers. This code was copy/pasted in various
parts of the codebase, let's define it in one place and re-use it from
there.
All except one caller of it had a valid "enum object_type" for us,
it's only write_object_file_prepare() which might need to deal with
"git hash-object --literally" and a potential garbage type. Let's have
the primary API use an "enum object_type", and define a *_literally()
function that can take an arbitrary "const char *" for the type.
See [1] for the discussion that prompted this patch, i.e. new code in
object-file.c that wanted to copy/paste the xsnprintf() invocation.
In the case of fast-import.c the callers unfortunately need to cast
back & forth between "unsigned char *" and "char *", since
format_object_header() ad encode_in_pack_object_header() take
different signedness.
1. https://lore.kernel.org/git/211213.86bl1l9bfz.gmgdl@evledraar.gmail.com/
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Jiang Xin <zhiyou.jx@alibaba-inc.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'bulk-checkin.c')
-rw-r--r-- | bulk-checkin.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/bulk-checkin.c b/bulk-checkin.c index 8785b2a..85b3eba 100644 --- a/bulk-checkin.c +++ b/bulk-checkin.c @@ -220,8 +220,8 @@ static int deflate_to_pack(struct bulk_checkin_state *state, if (seekback == (off_t) -1) return error("cannot find the current offset"); - header_len = xsnprintf((char *)obuf, sizeof(obuf), "%s %" PRIuMAX, - type_name(type), (uintmax_t)size) + 1; + header_len = format_object_header((char *)obuf, sizeof(obuf), + type, size); the_hash_algo->init_fn(&ctx); the_hash_algo->update_fn(&ctx, obuf, header_len); |