]> git.ipfire.org Git - thirdparty/git.git/commit - builtin/grep.c
get_sha1_with_context: dynamically allocate oc->path
authorJeff King <peff@peff.net>
Fri, 19 May 2017 12:54:43 +0000 (08:54 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 24 May 2017 01:59:27 +0000 (10:59 +0900)
commitdc944b65f1d13e258edc88a7608e2fe957ec334e
tree7dd3656014dbd1f40e06375052db9a9687fc292b
parentd72cae12b9a7bba3a6626e0b5805955eafdefcc6
get_sha1_with_context: dynamically allocate oc->path

When a sha1 lookup returns the tree path via "struct
object_context", it just copies it into a fixed-size buffer.
This means the result can be truncated, and it means our
"struct object_context" consumes a lot of stack space.

Instead, let's allocate a string on the heap. Because most
callers don't care about this information, we'll avoid doing
it by default (so they don't all have to start calling
free() on the result). There are basically two options for
the caller to signal to us that it's interested:

  1. By setting a pointer to storage in the object_context.

  2. By passing a flag in another parameter.

Doing (1) would match the way that sha1_object_info_extended()
works. But it would mean that every caller would have to
initialize the object_context, which they don't currently
have to do.

This patch does (2), and adds a new bit to the function's
flags field. All of the callers that look at the "path"
field are updated to pass the new flag.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/cat-file.c
builtin/grep.c
builtin/log.c
cache.h
sha1_name.c