X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Fcontext_replace.c;h=bfa3daf8b4160baecdf7dcdf3105603a26dd2aef;hp=b723cb43118a65bf5f0c820b1739a9b8cf307ed7;hb=641a9d953e86685f9ca2f3da72e9a94e5bcfd69e;hpb=5afa7072e3fe7fc42287e2149e1c23b363700795 diff --git a/sbr/context_replace.c b/sbr/context_replace.c index b723cb4..bfa3daf 100644 --- a/sbr/context_replace.c +++ b/sbr/context_replace.c @@ -1,69 +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. - */ +** context_replace.c -- add/replace an entry in the context/profile list +** +** 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) +context_replace(char *key, char *value) { - register struct node *np; - - /* - * 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"); + struct node *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; - } + /* + ** If list is emtpy, allocate head of profile/context list. + */ + if (!m_defs) { + m_defs = mh_xcalloc(1, sizeof(*np)); - /* - * 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); + np = m_defs; + np->n_name = mh_xstrdup(key); + np->n_field = mh_xstrdup(value); + np->n_context = 1; + np->n_next = NULL; ctxflags |= CTXMOD; - } - return; + 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"); + /* + ** 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)!=0) { + if (!np->n_context) + admonish(NULL, "bug: context_replace(key=\"%s\",value=\"%s\")", key, value); + if (np->n_field) + mh_free0(&(np->n_field)); + np->n_field = mh_xstrdup(value); + ctxflags |= CTXMOD; + } + return; + } + if (!np->n_next) + break; + } + + /* + ** Else add this new entry at the end + */ + np->n_next = mh_xcalloc(1, sizeof(*np)); - np = np->n_next; - np->n_name = getcpy (key); - np->n_field = getcpy (value); - np->n_context = 1; - np->n_next = NULL; - ctxflags |= CTXMOD; + np = np->n_next; + np->n_name = mh_xstrdup(key); + np->n_field = mh_xstrdup(value); + np->n_context = 1; + np->n_next = NULL; + ctxflags |= CTXMOD; }