git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] diff.c: guard config parser from value=NULL

From
Christian Couder <chriscool@tuxfamily.org>
Date
Feb 10, 2008, 18:35 UTC
Message-ID
<20080210193534.d11d8b15.chriscool@tuxfamily.org>

In fact we also guard for value="" as it doesn't make more sense for the variables here.

We do that by using a new function 'xstrdup_confval' to avoid code duplication.

By the way this changes a 'strdup' into 'xstrdup'.
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
---
 diff.c |   23 +++++++++++++----------
 1 files changed, 13 insertions(+), 10 deletions(-)
diff --git a/diff.c b/diff.c
index 5b8afdc..d51aecb 100644
--- a/diff.c
+++ b/diff.c
@@ -60,6 +60,14 @@ static struct ll_diff_driver {
 	char *cmd;
 } *user_diff, **user_diff_tail;
 
+static int xstrdup_confval(const char *dest, const char *var, const char *value)
+{
+	if (!value || !*value)
+		return error("%s: lacks value", var);
+	dest = xstrdup(value);
+	return 0;
+}
+
 /*
  * Currently there is only "diff.<drivername>.command" variable;
  * because there are "diff.color.<slot>" variables, we are parsing
@@ -86,10 +94,7 @@ static int parse_lldiff_command(const char *var, const char *ep, const char *val
 		user_diff_tail = &(drv->next);
 	}
 
-	if (!value)
-		return error("%s: lacks value", var);
-	drv->cmd = strdup(value);
-	return 0;
+	return xstrdup_confval(drv->cmd, var, value);
 }
 
 /*
@@ -123,8 +128,8 @@ static int parse_funcname_pattern(const char *var, const char *ep, const char *v
 	}
 	if (pp->pattern)
 		free(pp->pattern);
-	pp->pattern = xstrdup(value);
-	return 0;
+
+	return xstrdup_confval(pp->pattern, var, value);
 }
 
 /*
@@ -157,10 +162,8 @@ int git_diff_ui_config(const char *var, const char *value)
 		diff_auto_refresh_index = git_config_bool(var, value);
 		return 0;
 	}
-	if (!strcmp(var, "diff.external")) {
-		external_diff_cmd_cfg = xstrdup(value);
-		return 0;
-	}
+	if (!strcmp(var, "diff.external"))
+		return xstrdup_confval(external_diff_cmd_cfg, var, value);
 	if (!prefixcmp(var, "diff.")) {
 		const char *ep = strrchr(var, '.');
 
-- 
1.5.4.35.g3360
Next: Pierre Habouzit
Message 1 of 4 in “diff.c: guard config parser from value=NULL”
  1. diff.c: guard config parser from value=NULLChristian Couder, Feb 10, 2008
  2. Pierre HabouzitFeb 10, 2008
  3. Christian CouderFeb 11, 2008
  4. Martin KoeglerFeb 10, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.