Commit f58cc280 by Edward Thomson Committed by Edward Thomson

attr_session: keep a temp buffer

parent d4b1b767
...@@ -861,6 +861,7 @@ void git_attr_session__free(git_attr_session *session) ...@@ -861,6 +861,7 @@ void git_attr_session__free(git_attr_session *session)
return; return;
git_buf_free(&session->sysdir); git_buf_free(&session->sysdir);
git_buf_free(&session->tmp);
memset(session, 0, sizeof(git_attr_session)); memset(session, 0, sizeof(git_attr_session));
} }
...@@ -114,6 +114,7 @@ typedef struct { ...@@ -114,6 +114,7 @@ typedef struct {
unsigned int init_setup:1, unsigned int init_setup:1,
init_sysdir:1; init_sysdir:1;
git_buf sysdir; git_buf sysdir;
git_buf tmp;
} git_attr_session; } git_attr_session;
extern int git_attr_session__init(git_attr_session *attr_session, git_repository *repo); extern int git_attr_session__init(git_attr_session *attr_session, git_repository *repo);
......
...@@ -149,6 +149,7 @@ static int attr_cache_lookup( ...@@ -149,6 +149,7 @@ static int attr_cache_lookup(
git_attr_file **out_file, git_attr_file **out_file,
git_attr_file_entry **out_entry, git_attr_file_entry **out_entry,
git_repository *repo, git_repository *repo,
git_attr_session *attr_session,
git_attr_file_source source, git_attr_file_source source,
const char *base, const char *base,
const char *filename) const char *filename)
...@@ -162,9 +163,12 @@ static int attr_cache_lookup( ...@@ -162,9 +163,12 @@ static int attr_cache_lookup(
/* join base and path as needed */ /* join base and path as needed */
if (base != NULL && git_path_root(filename) < 0) { if (base != NULL && git_path_root(filename) < 0) {
if (git_buf_joinpath(&path, base, filename) < 0) git_buf *p = attr_session ? &attr_session->tmp : &path;
if (git_buf_joinpath(p, base, filename) < 0)
return -1; return -1;
filename = path.ptr;
filename = p->ptr;
} }
relfile = filename; relfile = filename;
...@@ -208,7 +212,7 @@ int git_attr_cache__get( ...@@ -208,7 +212,7 @@ int git_attr_cache__get(
git_attr_file *file = NULL, *updated = NULL; git_attr_file *file = NULL, *updated = NULL;
if ((error = attr_cache_lookup( if ((error = attr_cache_lookup(
&file, &entry, repo, source, base, filename)) < 0) &file, &entry, repo, attr_session, source, base, filename)) < 0)
return error; return error;
/* load file if we don't have one or if existing one is out of date */ /* load file if we don't have one or if existing one is out of date */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment