diff sbr/m_replace.c @ 0:bce86c4163a3

Initial revision
author kono
date Mon, 18 Apr 2005 23:46:02 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbr/m_replace.c	Mon Apr 18 23:46:02 2005 +0900
@@ -0,0 +1,53 @@
+/* m_replace.c - replace an entry in the profile */
+
+#include "../h/mh.h"
+#include <stdio.h>
+
+
+void m_replace (key, value)
+register char  *key,
+               *value;
+{
+    register struct node   *np;
+
+    m_getdefs ();
+    if (m_defs == NULL) {
+	np = m_defs = (struct node *) malloc (sizeof *np);
+	if (np == NULL)
+	    adios (NULLCP, "unable to allocate profile storage");
+
+	np -> n_name = getcpy (key);
+	np -> n_field = getcpy (value);
+	np -> n_context = 1;
+	np -> n_next = NULL;
+	ctxflags |= CTXMOD;
+	return;
+    }
+
+    for (np = m_defs;; np = np -> n_next) {
+	if (uleq (np -> n_name, key)) {
+	    if (strcmp (value, np -> n_field) != 0) {
+		if (!np -> n_context)
+		    admonish (NULLCP, "bug: m_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;
+    }
+    np -> n_next = (struct node *) malloc (sizeof *np);
+    if (np -> n_next == NULL)
+	adios (NULLCP, "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;
+}