deallocates the item, if allready exsists, before adding the new one
authorborutr <borutr@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 30 Mar 2003 19:47:08 +0000 (19:47 +0000)
committerborutr <borutr@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 30 Mar 2003 19:47:08 +0000 (19:47 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@2442 4a8a32a2-be11-0410-ad9d-d568d2c75423

src/SDCChasht.c

index 07aa2ec50f49c799f62200e5ae8a80b61beb9071..dd6322d451c632b5a70231f1ed0f57b6f979e628 100644 (file)
@@ -561,11 +561,21 @@ _hash (const char *sz)
 void 
 shash_add (hTab ** h, const char *szKey, const char *szValue)
 {
+  char *val;
   int key = _hash (szKey);
-  /* First, delete any that currently exist */
-  hTabDeleteByKey (h, key, szKey, _compare);
+
+  /* Find value of the item */
+  val = (char *)hTabFindByKey(*h, key, szKey, _compare);
+  /* Delete any that currently exist */
+  hTabDeleteByKey(h, key, szKey, _compare);
+  /* Deallocate old value in not NULL */
+  if (val != NULL)
+    Safe_free(val);
+  /* Duplicate new value if not NULL */
+  if (szValue != NULL)
+    szValue = Safe_strdup(szValue);
   /* Now add in ours */
-  hTabAddItemLong (h, key, Safe_strdup (szKey), Safe_strdup (szValue));
+  hTabAddItemLong (h, key, Safe_strdup (szKey), (void *)szValue);
 }
 
 const char *