X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Fcontext_replace.c;h=dbe1014aee952af28984e8c549d82a5066440dc3;hp=541253db66309398b6591db84ebe7124ad184fc2;hb=a485ed478abbd599d8c9aab48934e7a26733ecb1;hpb=6c42153ad9362cc676ea66563bf400d7511b3b68 diff --git a/sbr/context_replace.c b/sbr/context_replace.c index 541253d..dbe1014 100644 --- a/sbr/context_replace.c +++ b/sbr/context_replace.c @@ -1,73 +1,64 @@ - /* * context_replace.c -- add/replace an entry in the context/profile list * - * $Id$ - * * This code is Copyright (c) 2002, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for * complete copyright information. */ #include +#include void context_replace (char *key, char *value) { - register struct node *np; + register struct node *np; + + /* + * If list is emtpy, allocate head of profile/context list. + */ + if (!m_defs) { + m_defs = (struct node *) mh_xmalloc (sizeof(*np)); + + np = m_defs; + np->n_name = getcpy (key); + np->n_field = getcpy (value); + np->n_context = 1; + np->n_next = NULL; + ctxflags |= CTXMOD; + return; + } - /* sanity check - check that context has been read */ - if (defpath == NULL) - adios (NULL, "oops, context hasn't been read yet"); + /* + * Search list of context/profile entries for + * this key, and replace its value if found. + */ + for (np = m_defs;; np = np->n_next) { + if (!mh_strcasecmp (np->n_name, key)) { + if (strcmp (value, np->n_field)) { + if (!np->n_context) + admonish (NULL, "bug: context_replace(key=\"%s\",value=\"%s\")", key, value); + if (np->n_field) + free (np->n_field); + np->n_field = getcpy (value); + ctxflags |= CTXMOD; + } + return; + } + if (!np->n_next) + break; + } - /* - * If list is emtpy, allocate head of profile/context list. - */ - if (!m_defs) { - if (!(m_defs = (struct node *) malloc (sizeof(*np)))) - adios (NULL, "unable to allocate profile storage"); + /* + * Else add this new entry at the end + */ + np->n_next = (struct node *) mh_xmalloc (sizeof(*np)); - np = m_defs; + np = np->n_next; np->n_name = getcpy (key); np->n_field = getcpy (value); np->n_context = 1; np->n_next = NULL; ctxflags |= CTXMOD; - return; - } - - /* - * Search list of context/profile entries for - * this key, and replace its value if found. - */ - for (np = m_defs;; np = np->n_next) { - if (!strcasecmp (np->n_name, key)) { - if (strcmp (value, np->n_field)) { - if (!np->n_context) - admonish (NULL, "bug: context_replace(key=\"%s\",value=\"%s\")", key, value); - if (np->n_field) - free (np->n_field); - np->n_field = getcpy (value); - ctxflags |= CTXMOD; - } - return; - } - if (!np->n_next) - break; - } - - /* - * Else add this new entry at the end - */ - np->n_next = (struct node *) malloc (sizeof(*np)); - if (!np->n_next) - adios (NULL, "unable to allocate profile storage"); - - np = np->n_next; - np->n_name = getcpy (key); - np->n_field = getcpy (value); - np->n_context = 1; - np->n_next = NULL; - ctxflags |= CTXMOD; }