comparison sbr/m_replace.c @ 0:bce86c4163a3

Initial revision
author kono
date Mon, 18 Apr 2005 23:46:02 +0900
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:bce86c4163a3
1 /* m_replace.c - replace an entry in the profile */
2
3 #include "../h/mh.h"
4 #include <stdio.h>
5
6
7 void m_replace (key, value)
8 register char *key,
9 *value;
10 {
11 register struct node *np;
12
13 m_getdefs ();
14 if (m_defs == NULL) {
15 np = m_defs = (struct node *) malloc (sizeof *np);
16 if (np == NULL)
17 adios (NULLCP, "unable to allocate profile storage");
18
19 np -> n_name = getcpy (key);
20 np -> n_field = getcpy (value);
21 np -> n_context = 1;
22 np -> n_next = NULL;
23 ctxflags |= CTXMOD;
24 return;
25 }
26
27 for (np = m_defs;; np = np -> n_next) {
28 if (uleq (np -> n_name, key)) {
29 if (strcmp (value, np -> n_field) != 0) {
30 if (!np -> n_context)
31 admonish (NULLCP, "bug: m_replace(key=\"%s\",value=\"%s\")",
32 key, value);
33 if (np -> n_field)
34 free (np -> n_field);
35 np -> n_field = getcpy (value);
36 ctxflags |= CTXMOD;
37 }
38 return;
39 }
40 if (!np -> n_next)
41 break;
42 }
43 np -> n_next = (struct node *) malloc (sizeof *np);
44 if (np -> n_next == NULL)
45 adios (NULLCP, "unable to allocate profile storage");
46
47 np = np -> n_next;
48 np -> n_name = getcpy (key);
49 np -> n_field = getcpy (value);
50 np -> n_context = 1;
51 np -> n_next = NULL;
52 ctxflags |= CTXMOD;
53 }