Browse Source

init: plug tiny one-time memory leak

The buffer used to construct paths like ".git/objects/info" and
".git/objects/pack" is allocated on the heap and never freed.

So free it.  While at it, factor out the relevant code into its own
function and rename the sha1_dir variable to object_directory (to
match the change in everyday usage after the renaming of
SHA1_FILE_DIRECTORY in v0.99~603^2~7, 2005).

Noticed by valgrind while setting up tests (in test-lib).

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Jonathan Nieder 14 years ago committed by Junio C Hamano
parent
commit
9173912be3
  1. 32
      builtin/init-db.c

32
builtin/init-db.c

@ -294,11 +294,26 @@ static int create_default_files(const char *template_path) @@ -294,11 +294,26 @@ static int create_default_files(const char *template_path)
return reinit;
}

static void create_object_directory(void)
{
const char *object_directory = get_object_directory();
int len = strlen(object_directory);
char *path = xmalloc(len + 40);

memcpy(path, object_directory, len);

safe_create_dir(object_directory, 1);
strcpy(path+len, "/pack");
safe_create_dir(path, 1);
strcpy(path+len, "/info");
safe_create_dir(path, 1);

free(path);
}

int init_db(const char *template_dir, unsigned int flags)
{
const char *sha1_dir;
char *path;
int len, reinit;
int reinit;

safe_create_dir(get_git_dir(), 0);

@ -313,16 +328,7 @@ int init_db(const char *template_dir, unsigned int flags) @@ -313,16 +328,7 @@ int init_db(const char *template_dir, unsigned int flags)

reinit = create_default_files(template_dir);

sha1_dir = get_object_directory();
len = strlen(sha1_dir);
path = xmalloc(len + 40);
memcpy(path, sha1_dir, len);

safe_create_dir(sha1_dir, 1);
strcpy(path+len, "/pack");
safe_create_dir(path, 1);
strcpy(path+len, "/info");
safe_create_dir(path, 1);
create_object_directory();

if (shared_repository) {
char buf[10];

Loading…
Cancel
Save