* (mh_strcasecmp): Rename the private strcasecmp function to mh_strcasecmp.
[mmh] / sbr / context_replace.c
1
2 /*
3  * context_replace.c -- add/replace an entry in the context/profile list
4  *
5  * $Id$
6  *
7  * This code is Copyright (c) 2002, by the authors of nmh.  See the
8  * COPYRIGHT file in the root directory of the nmh distribution for
9  * complete copyright information.
10  */
11
12 #include <h/mh.h>
13 #include <h/utils.h>
14
15
16 void
17 context_replace (char *key, char *value)
18 {
19     register struct node *np;
20
21     /*
22      * If list is emtpy, allocate head of profile/context list.
23      */
24     if (!m_defs) {
25         m_defs = (struct node *) mh_xmalloc (sizeof(*np));
26
27         np = m_defs;
28         np->n_name = getcpy (key);
29         np->n_field = getcpy (value);
30         np->n_context = 1;
31         np->n_next = NULL;
32         ctxflags |= CTXMOD;
33         return;
34     }
35
36     /*
37      * Search list of context/profile entries for
38      * this key, and replace its value if found.
39      */
40     for (np = m_defs;; np = np->n_next) {
41         if (!mh_strcasecmp (np->n_name, key)) {
42             if (strcmp (value, np->n_field)) {
43                 if (!np->n_context)
44                     admonish (NULL, "bug: context_replace(key=\"%s\",value=\"%s\")", key, value);
45                 if (np->n_field)
46                     free (np->n_field);
47                 np->n_field = getcpy (value);
48                 ctxflags |= CTXMOD;
49             }
50             return;
51         }
52         if (!np->n_next)
53             break;
54     }
55
56     /*
57      * Else add this new entry at the end
58      */
59     np->n_next = (struct node *) mh_xmalloc (sizeof(*np));
60
61     np = np->n_next;
62     np->n_name = getcpy (key);
63     np->n_field = getcpy (value);
64     np->n_context = 1;
65     np->n_next = NULL;
66     ctxflags |= CTXMOD;
67 }