summaryrefslogtreecommitdiff
path: root/cache.h
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2016-10-03 20:35:51 (GMT)
committerJunio C Hamano <gitster@pobox.com>2016-10-10 20:52:36 (GMT)
commit597f9134ded20f882e2bf6bca8b0e1f03981b98d (patch)
treead7cd7eff31ed1dd109230e4ef99de551f0e908c /cache.h
parent29ec6af2b81894d3236f2aec100323138023ef4d (diff)
downloadgit-597f9134ded20f882e2bf6bca8b0e1f03981b98d.zip
git-597f9134ded20f882e2bf6bca8b0e1f03981b98d.tar.gz
git-597f9134ded20f882e2bf6bca8b0e1f03981b98d.tar.bz2
alternates: use a separate scratch space
The alternate_object_database struct uses a single buffer both for storing the path to the alternate, and as a scratch buffer for forming object names. This is efficient (since otherwise we'd end up storing the path twice), but it makes life hard for callers who just want to know the path to the alternate. They have to remember to stop reading after "alt->name - alt->base" bytes, and to subtract one for the trailing '/'. It would be much simpler if they could simply access a NUL-terminated path string. We could encapsulate this in a function which puts a NUL in the scratch buffer and returns the string, but that opens up questions about the lifetime of the result. The first time another caller uses the alternate, the scratch buffer may get other data tacked onto it. Let's instead just store the root path separately from the scratch buffer. There aren't enough alternates being stored for the duplicated data to matter for performance, and this keeps things simple and safe for the callers. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'cache.h')
-rw-r--r--cache.h5
1 files changed, 4 insertions, 1 deletions
diff --git a/cache.h b/cache.h
index ece2c7c..555ba71 100644
--- a/cache.h
+++ b/cache.h
@@ -1383,8 +1383,11 @@ extern void remove_scheduled_dirs(void);
extern struct alternate_object_database {
struct alternate_object_database *next;
+
char *name;
- char base[FLEX_ARRAY]; /* more */
+ char *scratch;
+
+ char path[FLEX_ARRAY];
} *alt_odb_list;
extern void prepare_alt_odb(void);
extern void read_info_alternates(const char * relative_base, int depth);