mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-08 19:51:31 +00:00
Fixed leaks and added tests
This commit is contained in:
parent
dc34da6e81
commit
db62807215
@ -713,31 +713,28 @@ static int repo_write_template(
|
||||
const char *git_dir, const char *file, mode_t mode, const char *content)
|
||||
{
|
||||
git_buf path = GIT_BUF_INIT;
|
||||
int fd;
|
||||
int fd, error = 0;
|
||||
|
||||
if (git_buf_joinpath(&path, git_dir, file) < 0)
|
||||
return -1;
|
||||
|
||||
fd = p_open(git_buf_cstr(&path), O_WRONLY | O_CREAT | O_EXCL, mode);
|
||||
if (fd < 0) {
|
||||
git_buf_free(&path);
|
||||
if (errno == EEXIST)
|
||||
return 0;
|
||||
goto fail;
|
||||
|
||||
if (fd >= 0) {
|
||||
error = p_write(fd, content, strlen(content));
|
||||
|
||||
p_close(fd);
|
||||
}
|
||||
else if (errno != EEXIST)
|
||||
error = fd;
|
||||
|
||||
if (p_write(fd, content, strlen(content)) < 0)
|
||||
goto fail;
|
||||
|
||||
p_close(fd);
|
||||
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
git_buf_free(&path);
|
||||
giterr_set(GITERR_OS,
|
||||
"Failed to initialize repository with template '%s'", file);
|
||||
return -1;
|
||||
|
||||
if (error)
|
||||
giterr_set(GITERR_OS,
|
||||
"Failed to initialize repository with template '%s'", file);
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
static int repo_init_structure(const char *git_dir, int is_bare)
|
||||
|
@ -141,3 +141,27 @@ void test_repo_init__reinit_too_recent_bare_repo(void)
|
||||
|
||||
cl_fixture_cleanup("reinit.git");
|
||||
}
|
||||
|
||||
void test_repo_init__additional_templates(void)
|
||||
{
|
||||
git_buf path = GIT_BUF_INIT;
|
||||
|
||||
cl_set_cleanup(&cleanup_repository, "tester");
|
||||
|
||||
ensure_repository_init("tester", 0, "tester/.git/", "tester/");
|
||||
|
||||
cl_git_pass(
|
||||
git_buf_joinpath(&path, git_repository_path(_repo), "description"));
|
||||
cl_assert(git_path_isfile(git_buf_cstr(&path)));
|
||||
|
||||
cl_git_pass(
|
||||
git_buf_joinpath(&path, git_repository_path(_repo), "info/exclude"));
|
||||
cl_assert(git_path_isfile(git_buf_cstr(&path)));
|
||||
|
||||
cl_git_pass(
|
||||
git_buf_joinpath(&path, git_repository_path(_repo), "hooks"));
|
||||
cl_assert(git_path_isdir(git_buf_cstr(&path)));
|
||||
/* won't confirm specific contents of hooks dir since it may vary */
|
||||
|
||||
git_buf_free(&path);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user