From e30560d793ff5bc704dadc2eab9d31100ad4636b Mon Sep 17 00:00:00 2001 From: David Levine Date: Sat, 9 Jun 2012 09:31:19 -0500 Subject: [PATCH] Added warning to all nmh programs for multiple profile entries for the same component. Until now, all but the first were silently ignored. --- docs/pending-release-notes | 13 ++++++++++++- man/mh-profile.man | 4 +++- sbr/readconfig.c | 18 ++++++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/docs/pending-release-notes b/docs/pending-release-notes index 23c4f4f..3e8fb6b 100644 --- a/docs/pending-release-notes +++ b/docs/pending-release-notes @@ -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 diff --git a/man/mh-profile.man b/man/mh-profile.man index f08f62e..63cafab 100644 --- a/man/mh-profile.man +++ b/man/mh-profile.man @@ -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 diff --git a/sbr/readconfig.c b/sbr/readconfig.c index 2321145..5900c37 100644 --- a/sbr/readconfig.c +++ b/sbr/readconfig.c @@ -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; } -- 1.7.10.4