Added warning to all nmh programs for multiple profile entries for the
authorDavid Levine <levinedl@acm.org>
Sat, 9 Jun 2012 14:31:19 +0000 (09:31 -0500)
committerDavid Levine <levinedl@acm.org>
Sat, 9 Jun 2012 14:31:19 +0000 (09:31 -0500)
same component.  Until now, all but the first were silently ignored.

docs/pending-release-notes
man/mh-profile.man
sbr/readconfig.c

index 23c4f4f..3e8fb6b 100644 (file)
@@ -1,6 +1,17 @@
 Things to add to the release notes for the next full release:
 
-Backward incompatibilities:
+------------
+NEW FEATURES
+------------
+
+- All nmh programs will now warn about multiple profile entries for the
+  same component.  In previous versions, all but the first were
+  silently ignored.
+
+----------------------------
+OBSOLETE/DEPRECATED FEATURES
+----------------------------
+
 - Changed exit status of each nmh command's -version and -help
   switches from 1 to 0.
 - The following environment variables were deprecated in nmh 1.5
index f08f62e..63cafab 100644 (file)
@@ -40,7 +40,9 @@ indicates whether the information is kept in the user's
 .B nmh
 profile or
 .B nmh
-context, and indicates what the default value is.
+context, and indicates what the default value is.  Note that a profile
+component can only appear once.  Multiple appearances with trigger a
+warning that all appearances after the first are ignored.
 .PP
 .BR Path :
 Mail
index 2321145..5900c37 100644 (file)
@@ -106,5 +106,23 @@ readconfig (struct node **npp, FILE *ib, char *file, int ctx)
        break;
     }
 
+    if (opp == NULL) {
+       /* Check for duplicated profile entries.  But only on this
+          very first call from context_read(), when opp is NULL. */
+
+       for (np = m_defs; np; np = np->n_next) {
+           /* Yes, this is O(N^2).  The profile should be small enough so
+              that's not a performance problem. */
+           struct node *np2;
+           for (np2 = np->n_next; np2; np2 = np2->n_next) {
+               if (!mh_strcasecmp (np->n_name, np2->n_name)) {
+                   admonish (NULL, "multiple \"%s\" profile components "
+                               "in %s, ignoring \"%s\"",
+                             np->n_name, defpath, np2->n_field);
+               }
+           }
+       }
+    }
+
     opp = npp;
 }