Module Name:    src
Committed By:   rillig
Date:           Sat Dec  4 23:47:10 UTC 2021

Modified Files:
        src/usr.bin/make: parse.c

Log Message:
make: merge duplicate code in ParseDirective

No functional change.


To generate a diff of this commit:
cvs rdiff -u -r1.568 -r1.569 src/usr.bin/make/parse.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/make/parse.c
diff -u src/usr.bin/make/parse.c:1.568 src/usr.bin/make/parse.c:1.569
--- src/usr.bin/make/parse.c:1.568	Fri Dec  3 23:37:30 2021
+++ src/usr.bin/make/parse.c	Sat Dec  4 23:47:09 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: parse.c,v 1.568 2021/12/03 23:37:30 rillig Exp $	*/
+/*	$NetBSD: parse.c,v 1.569 2021/12/04 23:47:09 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -109,7 +109,7 @@
 #include "pathnames.h"
 
 /*	"@(#)parse.c	8.3 (Berkeley) 3/19/94"	*/
-MAKE_RCSID("$NetBSD: parse.c,v 1.568 2021/12/03 23:37:30 rillig Exp $");
+MAKE_RCSID("$NetBSD: parse.c,v 1.569 2021/12/04 23:47:09 rillig Exp $");
 
 /* types and constants */
 
@@ -2997,12 +2997,6 @@ ParseLine_ShellCommand(const char *p)
 	}
 }
 
-MAKE_INLINE bool
-IsDirective(const char *dir, size_t dirlen, const char *name)
-{
-	return dirlen == strlen(name) && memcmp(dir, name, dirlen) == 0;
-}
-
 /*
  * See if the line starts with one of the known directives, and if so, handle
  * the directive.
@@ -3011,8 +3005,8 @@ static bool
 ParseDirective(char *line)
 {
 	char *cp = line + 1;
-	const char *dir, *arg;
-	size_t dirlen;
+	const char *arg;
+	Substring dir;
 
 	pp_skip_whitespace(&cp);
 	if (IsInclude(cp, false)) {
@@ -3020,10 +3014,10 @@ ParseDirective(char *line)
 		return true;
 	}
 
-	dir = cp;
+	dir.start = cp;
 	while (ch_isalpha(*cp) || *cp == '-')
 		cp++;
-	dirlen = (size_t)(cp - dir);
+	dir.end = cp;
 
 	if (*cp != '\0' && !ch_isspace(*cp))
 		return false;
@@ -3031,31 +3025,31 @@ ParseDirective(char *line)
 	pp_skip_whitespace(&cp);
 	arg = cp;
 
-	if (IsDirective(dir, dirlen, "undef")) {
-		Var_Undef(cp);
+	if (Substring_Equals(dir, "undef")) {
+		Var_Undef(arg);
 		return true;
-	} else if (IsDirective(dir, dirlen, "export")) {
+	} else if (Substring_Equals(dir, "export")) {
 		Var_Export(VEM_PLAIN, arg);
 		return true;
-	} else if (IsDirective(dir, dirlen, "export-env")) {
+	} else if (Substring_Equals(dir, "export-env")) {
 		Var_Export(VEM_ENV, arg);
 		return true;
-	} else if (IsDirective(dir, dirlen, "export-literal")) {
+	} else if (Substring_Equals(dir, "export-literal")) {
 		Var_Export(VEM_LITERAL, arg);
 		return true;
-	} else if (IsDirective(dir, dirlen, "unexport")) {
+	} else if (Substring_Equals(dir, "unexport")) {
 		Var_UnExport(false, arg);
 		return true;
-	} else if (IsDirective(dir, dirlen, "unexport-env")) {
+	} else if (Substring_Equals(dir, "unexport-env")) {
 		Var_UnExport(true, arg);
 		return true;
-	} else if (IsDirective(dir, dirlen, "info")) {
+	} else if (Substring_Equals(dir, "info")) {
 		ParseMessage(PARSE_INFO, "info", arg);
 		return true;
-	} else if (IsDirective(dir, dirlen, "warning")) {
+	} else if (Substring_Equals(dir, "warning")) {
 		ParseMessage(PARSE_WARNING, "warning", arg);
 		return true;
-	} else if (IsDirective(dir, dirlen, "error")) {
+	} else if (Substring_Equals(dir, "error")) {
 		ParseMessage(PARSE_FATAL, "error", arg);
 		return true;
 	}

Reply via email to