Module Name:    src
Committed By:   uebayasi
Date:           Fri Oct 10 10:22:49 UTC 2014

Modified Files:
        src/usr.bin/config: main.c

Log Message:
If an option is selected, select the matching (lowercased) attribute.  Handle
dependencies too.


To generate a diff of this commit:
cvs rdiff -u -r1.60 -r1.61 src/usr.bin/config/main.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/config/main.c
diff -u src/usr.bin/config/main.c:1.60 src/usr.bin/config/main.c:1.61
--- src/usr.bin/config/main.c:1.60	Fri Oct 10 07:48:50 2014
+++ src/usr.bin/config/main.c	Fri Oct 10 10:22:49 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: main.c,v 1.60 2014/10/10 07:48:50 uebayasi Exp $	*/
+/*	$NetBSD: main.c,v 1.61 2014/10/10 10:22:49 uebayasi Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -531,6 +531,8 @@ dependopts_one(const char *name)
 	if (fs != NULL) {
 		do_depends(fs->nv_ptr);
 	}
+
+	CFGDBG(3, "depend `%s' searched", name);
 }
 
 static void
@@ -549,16 +551,25 @@ do_depend(struct nvlist *nv)
 	struct attr *a;
 
 	if (nv != NULL && (nv->nv_flags & NV_DEPENDED) == 0) {
+		const char *n = strtolower(nv->nv_name);
+
 		nv->nv_flags |= NV_DEPENDED;
 		/*
 		 * If the dependency is an attribute, then just add
 		 * it to the selecttab.
 		 */
+		CFGDBG(3, "depend attr `%s'", nv->nv_name);
+		/* XXX Do uppercased attribute names exist? */
 		if ((a = ht_lookup(attrtab, nv->nv_name)) != NULL) {
 			if (a->a_iattr)
 				panic("do_depend(%s): dep `%s' is an iattr",
 				    nv->nv_name, a->a_name);
 			expandattr(a, selectattr);
+		} else if ((a = ht_lookup(attrtab, n)) != NULL) {
+			if (a->a_iattr)
+				panic("do_depend(%s): dep `%s' is an iattr",
+				    n, a->a_name);
+			expandattr(a, selectattr);
 		} else {
 			if (ht_lookup(opttab, nv->nv_name) == NULL)
 				addoption(nv->nv_name, NULL);
@@ -975,6 +986,13 @@ addoption(const char *name, const char *
 	n = strtolower(name);
 	(void)ht_insert(selecttab, n, (void *)__UNCONST(n));
 	CFGDBG(3, "option selected `%s'", n);
+
+	/*
+	 * Select attribute if one exists.
+	 */
+	struct attr *a;
+	if ((a = ht_lookup(attrtab, n)) != NULL)
+		selectattr(a);
 }
 
 void

Reply via email to