Free EOT_DB_STRING_FREE in cleanup_insn()
authorH. Peter Anvin <hpa@zytor.com>
Mon, 16 Jun 2008 00:39:45 +0000 (17:39 -0700)
committerH. Peter Anvin <hpa@zytor.com>
Mon, 16 Jun 2008 00:39:45 +0000 (17:39 -0700)
Free EOT_DB_STRING_FREE data in cleanup_insn(), which is where we free
all the other extop data.

assemble.c
parser.c

index 7ab53ad..31955e5 100644 (file)
@@ -349,8 +349,6 @@ int64_t assemble(int32_t segment, int64_t offset, int bits, uint32_t cp,
                             OUT_RAWDATA, align, NO_SEG, NO_SEG);
                     }
                     offset += e->stringlen + align;
-                   if (e->type == EOT_DB_STRING_FREE)
-                       nasm_free(e->stringval);
                 }
             }
             if (t > 0 && t == instruction->times - 1) {
index caff1b1..a88e883 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -947,9 +947,10 @@ void cleanup_insn(insn * i)
 {
     extop *e;
 
-    while (i->eops) {
-        e = i->eops;
-        i->eops = i->eops->next;
+    while ((e = i->eops)) {
+        i->eops = e->next;
+       if (e->type == EOT_DB_STRING_FREE)
+           nasm_free(e->stringval);
         nasm_free(e);
     }
 }