summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2008-06-15 17:39:45 -0700
committerH. Peter Anvin <hpa@zytor.com>2008-06-15 17:39:45 -0700
commit2aa77394b7b5523fb031a0c059f0db7b93e565d5 (patch)
tree882ea67aeacb1e45ee9a449336d4b8a8889409db
parenta0b91037e21428682c29464a473cbcb13ed07c49 (diff)
downloadnasm-2aa77394b7b5523fb031a0c059f0db7b93e565d5.tar.gz
Free EOT_DB_STRING_FREE in cleanup_insn()
Free EOT_DB_STRING_FREE data in cleanup_insn(), which is where we free all the other extop data.
-rw-r--r--assemble.c2
-rw-r--r--parser.c7
2 files changed, 4 insertions, 5 deletions
diff --git a/assemble.c b/assemble.c
index 7ab53ad3..31955e5d 100644
--- a/assemble.c
+++ b/assemble.c
@@ -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) {
diff --git a/parser.c b/parser.c
index caff1b18..a88e8837 100644
--- 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);
}
}