svn commit: r303601 - head/usr.bin/indent

Pedro F. Giffuni pfg at FreeBSD.org
Sun Jul 31 21:43:44 UTC 2016


Author: pfg
Date: Sun Jul 31 21:43:43 2016
New Revision: 303601
URL: https://svnweb.freebsd.org/changeset/base/303601

Log:
  indent(1): Rearrange option parsing code to squelch clang's static analyzer.
  
  clang-analyzer complained that eqin() sets file-scoped pointer param_start
  to point into char buffer defined in scan_profile(), and once
  scan_profile() exits, param_start is a "dangling reference". param_start
  was never used afterwards, but it's cleaner to move it to set_option()
  which is the only branch where param_start is needed.
  
  Reference:
  https://github.com/pstef/freebsd_indent/commit/ab0e44e5da3ff0fa4b62e451e4bbc3ea1ec7f365
  
  Differential Revision: https://reviews.freebsd.org/D6966  (Partial)
  Submitted by:	Piotr Stefaniak

Modified:
  head/usr.bin/indent/args.c

Modified: head/usr.bin/indent/args.c
==============================================================================
--- head/usr.bin/indent/args.c	Sun Jul 31 21:36:40 2016	(r303600)
+++ head/usr.bin/indent/args.c	Sun Jul 31 21:43:43 2016	(r303601)
@@ -223,17 +223,14 @@ scan_profile(FILE *f)
     }
 }
 
-const char	*param_start;
-
-static int
+static const char *
 eqin(const char *s1, const char *s2)
 {
     while (*s1) {
 	if (*s1++ != *s2++)
-	    return (false);
+	    return (NULL);
     }
-    param_start = s2;
-    return (true);
+    return (s2);
 }
 
 /*
@@ -257,11 +254,12 @@ set_defaults(void)
 void
 set_option(char *arg)
 {
-    struct pro *p;
+    struct	pro *p;
+    const char	*param_start;
 
     arg++;			/* ignore leading "-" */
     for (p = pro; p->p_name; p++)
-	if (*p->p_name == *arg && eqin(p->p_name, arg))
+	if (*p->p_name == *arg && (param_start = eqin(p->p_name, arg)) != NULL)
 	    goto found;
     errx(1, "%s: unknown parameter \"%s\"", option_source, arg - 1);
 found:


More information about the svn-src-all mailing list