Module Name: src Committed By: uebayasi Date: Sat Oct 11 09:06:29 UTC 2014
Modified Files: src/usr.bin/config: sem.c Log Message: Redo "device" dependency. It was completely wrong to select things just after definitions at enddefs(). Resolve dependency in selectbase(). To generate a diff of this commit: cvs rdiff -u -r1.57 -r1.58 src/usr.bin/config/sem.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/sem.c diff -u src/usr.bin/config/sem.c:1.57 src/usr.bin/config/sem.c:1.58 --- src/usr.bin/config/sem.c:1.57 Sat Oct 11 06:18:29 2014 +++ src/usr.bin/config/sem.c Sat Oct 11 09:06:29 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: sem.c,v 1.57 2014/10/11 06:18:29 uebayasi Exp $ */ +/* $NetBSD: sem.c,v 1.58 2014/10/11 09:06:29 uebayasi Exp $ */ /* * Copyright (c) 1992, 1993 @@ -146,9 +146,8 @@ mergedeps(struct devbase *dev, const cha { struct attr *a, *newa; + CFGDBG(4, "merging attr `%s' to devbase `%s'", name, dev->d_name); a = refattr(dev->d_name); - - CFGDBG(3, "merging attr `%s' in attr `%s'", name, a->a_name); if (finddep(a, name) == NULL) { newa = refattr(name); a->a_deps = attrlist_cons(a->a_deps, newa); @@ -167,19 +166,13 @@ fixdev(struct devbase *dev) if (devattr->a_devclass) panic("%s: dev %s is devclass!", __func__, devattr->a_name); - /* - * For each interface attribute this device refers to, add this - * device to its reference list. This makes, e.g., finding all - * "scsi"s easier. - * - * While looking through the attributes, set up the device - * class if any are devclass attributes (and error out if the - * device has two classes). - */ + CFGDBG(4, "fixing devbase `%s'", dev->d_name); for (al = dev->d_attrs; al != NULL; al = al->al_next) { a = al->al_this; if (a->a_iattr) { a->a_refs = addtoattr(a->a_refs, dev); + CFGDBG(3, "device `%s' has iattr `%s'", dev->d_name, + a->a_name); } else if (a->a_devclass != NULL) { if (dev->d_classattr != NULL) { cfgwarn("device `%s' has multiple classes " @@ -188,6 +181,8 @@ fixdev(struct devbase *dev) a->a_name); } dev->d_classattr = a; + CFGDBG(3, "device `%s' is devclass `%s'", dev->d_name, + a->a_name); } else { if (strcmp(dev->d_name, a->a_name) != 0) { mergedeps(dev, a->a_name); @@ -201,6 +196,8 @@ enddefs(void) { struct devbase *dev; + yyfile = "enddefs"; + TAILQ_FOREACH(dev, &allbases, d_next) { if (!dev->d_isdef) { (void)fprintf(stderr, @@ -209,7 +206,6 @@ enddefs(void) errors++; continue; } - fixdev(dev); } if (errors) { (void)fprintf(stderr, "*** Stop.\n"); @@ -1965,6 +1961,8 @@ selectbase(struct devbase *d, struct dev expandattr(a, selectattr); } } + + fixdev(d); } /*