0
|
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 }
|