Skip to content

Commit cdd489e

Browse files
bk2204gitster
authored andcommitted
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent f74c90d commit cdd489e

File tree

1 file changed

+29
-16
lines changed

1 file changed

+29
-16
lines changed

builtin/var.c

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,47 +12,57 @@
1212

1313
static const char var_usage[] = "git var (-l | <variable>)";
1414

15-
static const char *editor(int ident_flag UNUSED)
15+
static char *committer(int ident_flag)
1616
{
17-
return git_editor();
17+
return xstrdup_or_null(git_committer_info(ident_flag));
1818
}
1919

20-
static const char *sequence_editor(int ident_flag UNUSED)
20+
static char *author(int ident_flag)
2121
{
22-
return git_sequence_editor();
22+
return xstrdup_or_null(git_author_info(ident_flag));
2323
}
2424

25-
static const char *pager(int ident_flag UNUSED)
25+
static char *editor(int ident_flag UNUSED)
26+
{
27+
return xstrdup_or_null(git_editor());
28+
}
29+
30+
static char *sequence_editor(int ident_flag UNUSED)
31+
{
32+
return xstrdup_or_null(git_sequence_editor());
33+
}
34+
35+
static char *pager(int ident_flag UNUSED)
2636
{
2737
const char *pgm = git_pager(1);
2838

2939
if (!pgm)
3040
pgm = "cat";
31-
return pgm;
41+
return xstrdup(pgm);
3242
}
3343

34-
static const char *default_branch(int ident_flag UNUSED)
44+
static char *default_branch(int ident_flag UNUSED)
3545
{
36-
return git_default_branch_name(1);
46+
return xstrdup_or_null(git_default_branch_name(1));
3747
}
3848

39-
static const char *shell_path(int ident_flag UNUSED)
49+
static char *shell_path(int ident_flag UNUSED)
4050
{
41-
return SHELL_PATH;
51+
return xstrdup(SHELL_PATH);
4252
}
4353

4454
struct git_var {
4555
const char *name;
46-
const char *(*read)(int);
56+
char *(*read)(int);
4757
};
4858
static struct git_var git_vars[] = {
4959
{
5060
.name = "GIT_COMMITTER_IDENT",
51-
.read = git_committer_info,
61+
.read = committer,
5262
},
5363
{
5464
.name = "GIT_AUTHOR_IDENT",
55-
.read = git_author_info,
65+
.read = author,
5666
},
5767
{
5868
.name = "GIT_EDITOR",
@@ -83,11 +93,13 @@ static struct git_var git_vars[] = {
8393
static void list_vars(void)
8494
{
8595
struct git_var *ptr;
86-
const char *val;
96+
char *val;
8797

8898
for (ptr = git_vars; ptr->read; ptr++)
89-
if ((val = ptr->read(0)))
99+
if ((val = ptr->read(0))) {
90100
printf("%s=%s\n", ptr->name, val);
101+
free(val);
102+
}
91103
}
92104

93105
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)
113125
int cmd_var(int argc, const char **argv, const char *prefix UNUSED)
114126
{
115127
const struct git_var *git_var;
116-
const char *val;
128+
char *val;
117129

118130
if (argc != 2)
119131
usage(var_usage);
@@ -134,6 +146,7 @@ int cmd_var(int argc, const char **argv, const char *prefix UNUSED)
134146
return 1;
135147

136148
printf("%s\n", val);
149+
free(val);
137150

138151
return 0;
139152
}

0 commit comments

Comments
 (0)