Browse Source

opt: Don't segfault if a string's default is NULL

Instead show '(nil)', like other people do. This is distinguishable
from a similar looking string value, because the latter is shown with
double quotes while NULL's nil has no quotes.

Signed-off-by: Douglas Bagnall <douglas@halo.gen.nz>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Douglas Bagnall 11 years ago
parent
commit
7220240c0e
1 changed files with 13 additions and 8 deletions
  1. 13 8
      ccan/opt/helpers.c

+ 13 - 8
ccan/opt/helpers.c

@@ -202,14 +202,19 @@ void opt_show_invbool(char buf[OPT_SHOW_LEN], const bool *b)
 
 void opt_show_charp(char buf[OPT_SHOW_LEN], char *const *p)
 {
-	size_t len = strlen(*p);
-	buf[0] = '"';
-	if (len > OPT_SHOW_LEN - 2)
-		len = OPT_SHOW_LEN - 2;
-	strncpy(buf+1, *p, len);
-	buf[1+len] = '"';
-	if (len < OPT_SHOW_LEN - 2)
-		buf[2+len] = '\0';
+	if (*p){
+		size_t len = strlen(*p);
+		buf[0] = '"';
+		if (len > OPT_SHOW_LEN - 2)
+			len = OPT_SHOW_LEN - 2;
+		strncpy(buf+1, *p, len);
+		buf[1+len] = '"';
+		if (len < OPT_SHOW_LEN - 2)
+			buf[2+len] = '\0';
+	}
+	else {
+		strncpy(buf, "(nil)", OPT_SHOW_LEN);
+	}
 }
 
 /* Show an integer value, various forms. */