var: adjust memory allocation for strings

Right now, all of our values are constants whose allocation is managed
elsewhere.  However, in the future, we'll have some variables whose
memory we will need to free.  To keep things consistent, let's make each
of our functions allocate its own memory and make the caller responsible
for freeing it.

Signed-off-by: brian m. carlson <bk2204@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
brian m. carlson 2023-06-27 16:18:59 +00:00 committed by Junio C Hamano
parent f74c90dcf7
commit cdd489eaf9

View file

@ -12,47 +12,57 @@
static const char var_usage[] = "git var (-l | <variable>)";
static const char *editor(int ident_flag UNUSED)
static char *committer(int ident_flag)
{
return git_editor();
return xstrdup_or_null(git_committer_info(ident_flag));
}
static const char *sequence_editor(int ident_flag UNUSED)
static char *author(int ident_flag)
{
return git_sequence_editor();
return xstrdup_or_null(git_author_info(ident_flag));
}
static const char *pager(int ident_flag UNUSED)
static char *editor(int ident_flag UNUSED)
{
return xstrdup_or_null(git_editor());
}
static char *sequence_editor(int ident_flag UNUSED)
{
return xstrdup_or_null(git_sequence_editor());
}
static char *pager(int ident_flag UNUSED)
{
const char *pgm = git_pager(1);
if (!pgm)
pgm = "cat";
return pgm;
return xstrdup(pgm);
}
static const char *default_branch(int ident_flag UNUSED)
static char *default_branch(int ident_flag UNUSED)
{
return git_default_branch_name(1);
return xstrdup_or_null(git_default_branch_name(1));
}
static const char *shell_path(int ident_flag UNUSED)
static char *shell_path(int ident_flag UNUSED)
{
return SHELL_PATH;
return xstrdup(SHELL_PATH);
}
struct git_var {
const char *name;
const char *(*read)(int);
char *(*read)(int);
};
static struct git_var git_vars[] = {
{
.name = "GIT_COMMITTER_IDENT",
.read = git_committer_info,
.read = committer,
},
{
.name = "GIT_AUTHOR_IDENT",
.read = git_author_info,
.read = author,
},
{
.name = "GIT_EDITOR",
@ -83,11 +93,13 @@ static struct git_var git_vars[] = {
static void list_vars(void)
{
struct git_var *ptr;
const char *val;
char *val;
for (ptr = git_vars; ptr->read; ptr++)
if ((val = ptr->read(0)))
if ((val = ptr->read(0))) {
printf("%s=%s\n", ptr->name, val);
free(val);
}
}
static const struct git_var *get_git_var(const char *var)
@ -113,7 +125,7 @@ static int show_config(const char *var, const char *value, void *cb)
int cmd_var(int argc, const char **argv, const char *prefix UNUSED)
{
const struct git_var *git_var;
const char *val;
char *val;
if (argc != 2)
usage(var_usage);
@ -134,6 +146,7 @@ int cmd_var(int argc, const char **argv, const char *prefix UNUSED)
return 1;
printf("%s\n", val);
free(val);
return 0;
}