Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbrian m. carlson <bk2204@github.com>2023-06-27 19:18:59 +0300
committerJunio C Hamano <gitster@pobox.com>2023-06-27 21:31:06 +0300
commitcdd489eaf9cd3c46c30b485601e2bcb989586274 (patch)
treede83eb71fffaf29491ab439c39d0871e0873850d /builtin
parentf74c90dcf7ed8ef7994ab583de089dba2a2b1a22 (diff)
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>
Diffstat (limited to 'builtin')
-rw-r--r--builtin/var.c45
1 files changed, 29 insertions, 16 deletions
diff --git a/builtin/var.c b/builtin/var.c
index 379564a399..d6f9f495c9 100644
--- a/builtin/var.c
+++ b/builtin/var.c
@@ -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;
}