Simplify the print routines by using LST_FOREACH instead of Lst_ForEach
authorMax Okumoto <okumoto@dragonflybsd.org>
Sat, 12 Mar 2005 11:31:30 +0000 (11:31 +0000)
committerMax Okumoto <okumoto@dragonflybsd.org>
Sat, 12 Mar 2005 11:31:30 +0000 (11:31 +0000)
and inlining the small printing utility functions.
Create a function that can be used to produce printable representations
of flag words.

FreeBSD-Date: 2005/03/11 13:24:08
Author: harti

usr.bin/make/suff.c
usr.bin/make/util.c
usr.bin/make/util.h

index 8d802f1..127d18a 100644 (file)
@@ -37,7 +37,7 @@
  *
  * @(#)suff.c  8.4 (Berkeley) 3/21/94
  * $FreeBSD: src/usr.bin/make/suff.c,v 1.43 2005/02/04 13:23:39 harti Exp $
- * $DragonFly: src/usr.bin/make/suff.c,v 1.43 2005/03/12 11:25:16 okumoto Exp $
+ * $DragonFly: src/usr.bin/make/suff.c,v 1.44 2005/03/12 11:31:30 okumoto Exp $
  */
 
 /*-
@@ -2287,80 +2287,55 @@ Suff_Init(void)
 
 /********************* DEBUGGING FUNCTIONS **********************/
 
-static int
-SuffPrintName(void *s, void *dummy __unused)
+void
+Suff_PrintAll(void)
 {
+       const LstNode   *ln;
+       const LstNode   *tln;
+       const GNode     *gn;
+       const Suff      *s;
+
+       static const struct flag2str suff_flags[] = {
+               { SUFF_INCLUDE, "INCLUDE" },
+               { SUFF_LIBRARY, "LIBRARY" },
+               { SUFF_NULL,    "NULL" },
+               { 0,            NULL }
+       };
 
-       printf("`%s' ", ((Suff *)s)->name);
-       return (0);
-}
+       printf("#*** Suffixes:\n");
+       LST_FOREACH(ln, &sufflist) {
+               s = Lst_Datum(ln);
+               printf("# `%s' [%d] ", s->name, s->refCount);
 
-static int
-SuffPrintSuff(void *sp, void *dummy __unused)
-{
-       Suff    *s = sp;
-       int     flags;
-       int     flag;
-
-       printf("# `%s' [%d] ", s->name, s->refCount);
-
-       flags = s->flags;
-       if (flags) {
-               fputs(" (", stdout);
-               while (flags) {
-                       flag = 1 << (ffs(flags) - 1);
-                       flags &= ~flag;
-                       switch (flag) {
-                         case SUFF_NULL:
-                               printf("NULL");
-                               break;
-                         case SUFF_INCLUDE:
-                               printf("INCLUDE");
-                               break;
-                         case SUFF_LIBRARY:
-                               printf("LIBRARY");
-                               break;
-                         default:
-                               break;
-                       }
-                       fputc(flags ? '|' : ')', stdout);
+               if (s->flags != 0) {
+                       printf(" ");
+                       print_flags(stdout, suff_flags, s->flags);
                }
-       }
-       fputc('\n', stdout);
-       printf("#\tTo: ");
-       Lst_ForEach(&s->parents, SuffPrintName, (void *)NULL);
-       fputc('\n', stdout);
-       printf("#\tFrom: ");
-       Lst_ForEach(&s->children, SuffPrintName, (void *)NULL);
-       fputc('\n', stdout);
-       printf("#\tSearch Path: ");
-       Dir_PrintPath(&s->searchPath);
-       fputc('\n', stdout);
-       return (0);
-}
 
-static int
-SuffPrintTrans(void *tp, void *dummy __unused)
-{
-       GNode   *t = tp;
+               printf("\n#\tTo: ");
+               LST_FOREACH(tln, &s->parents)
+                       printf("`%s' ", ((const Suff *)Lst_Datum(tln))->name);
 
-       printf("%-16s: ", t->name);
-       Targ_PrintType(t->type);
-       fputc('\n', stdout);
-       Lst_ForEach(&t->commands, Targ_PrintCmd, (void *)NULL);
-       fputc('\n', stdout);
-       return (0);
-}
+               printf("\n#\tFrom: ");
+               LST_FOREACH(tln, &s->children)
+                       printf("`%s' ", ((const Suff *)Lst_Datum(tln))->name);
 
-void
-Suff_PrintAll(void)
-{
+               printf("\n#\tSearch Path: ");
+               Dir_PrintPath(&s->searchPath);
 
-       printf("#*** Suffixes:\n");
-       Lst_ForEach(&sufflist, SuffPrintSuff, (void *)NULL);
+               printf("\n");
+       }
 
        printf("#*** Transformations:\n");
-       Lst_ForEach(&transforms, SuffPrintTrans, (void *)NULL);
+       LST_FOREACH(ln, &transforms) {
+               gn = Lst_Datum(ln);
+               printf("%-16s: ", gn->name);
+               Targ_PrintType(gn->type);
+               printf("\n");
+               LST_FOREACH(tln, &gn->commands)
+                       printf("\t%s\n", (const char *)Lst_Datum(tln));
+               printf("\n");
+       }
 }
 
 #ifdef DEBUG_SRC
index 6dd39aa..bc4154e 100644 (file)
@@ -37,7 +37,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/usr.bin/make/util.c,v 1.16 2005/02/04 13:23:39 harti Exp $
- * $DragonFly: src/usr.bin/make/util.c,v 1.18 2005/03/12 09:52:54 okumoto Exp $
+ * $DragonFly: src/usr.bin/make/util.c,v 1.19 2005/03/12 11:31:30 okumoto Exp $
  */
 
 /*-
@@ -290,3 +290,23 @@ eunlink(const char *file)
        return (unlink(file));
 }
 
+/*
+ * Convert a flag word to a printable thing and print it
+ */
+void
+print_flags(FILE *fp, const struct flag2str *tab, u_int flags)
+{
+       int first = 1;
+
+       fprintf(fp, "(");
+       while (tab->str != NULL) {
+               if (flags & tab->flag) {
+                       if (!first)
+                               fprintf(fp, "|");
+                       first = 0;
+                       fprintf(fp, "%s", tab->str);
+               }
+               tab++;
+       }
+       fprintf(fp, ")");
+}
index 16718e7..8884334 100644 (file)
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $DragonFly: src/usr.bin/make/util.h,v 1.6 2005/03/12 09:52:54 okumoto Exp $
+ * $DragonFly: src/usr.bin/make/util.h,v 1.7 2005/03/12 11:31:30 okumoto Exp $
  */
 
 #ifndef util_h_b7020fdb
 #define        util_h_b7020fdb
 
 #include <sys/types.h>
+#include <stdio.h>
 
 #define        CONCAT(a,b)     a##b
 
+struct flag2str {
+       u_int           flag;
+       const char      *str;
+};
+
 /*
  * debug control:
  *     There is one bit per module.  It is up to the module what debug
@@ -90,5 +96,6 @@ char *estrdup(const char *);
 void *emalloc(size_t);
 void *erealloc(void *, size_t);
 int eunlink(const char *);
+void print_flags(FILE *, const struct flag2str *, u_int);
 
 #endif /* util_h_b7020fdb */