Skip to content

Commit 8e42ed0

Browse files
author
Noam Preil
committed
Probably fix another memory leak
1 parent 1a786a6 commit 8e42ed0

File tree

3 files changed

+11
-5
lines changed

3 files changed

+11
-5
lines changed

assembler/assembler.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -553,6 +553,13 @@ int try_split_line(struct assembler_state *state, char **line) {
553553
return 0;
554554
}
555555

556+
void macro_free(macro_t *macro) {
557+
list_free(macro->parameters);
558+
free_flat_list(macro->macro_lines);
559+
free(macro->name);
560+
free(macro);
561+
}
562+
556563
object_t *assemble(FILE *file, const char *file_name, assembler_settings_t *settings) {
557564
struct assembler_state state = {
558565
.object = create_object(),
@@ -700,10 +707,7 @@ object_t *assemble(FILE *file, const char *file_name, assembler_settings_t *sett
700707
list_free(state.extra_lines);
701708
for (int i = 0; i < state.macros->length; i += 1) {
702709
macro_t *macro = state.macros->items[i];
703-
list_free(macro->parameters);
704-
free_flat_list(macro->macro_lines);
705-
free(macro->name);
706-
free(macro);
710+
macro_free(macro);
707711
}
708712
list_free(state.macros);
709713
// Equates are also added to an area's symbols list, so they're cleaned up there

assembler/directives.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,8 @@ int handle_undef(struct assembler_state *state, char **argv, int argc) {
440440
macro_t *m = state->macros->items[i];
441441
scas_log(L_DEBUG, "Found %s", m->name);
442442
if (strcasecmp(m->name, argv[0]) == 0) {
443-
scas_log(L_DEBUG, "Undefined Symbol \'%s\'", m->name);
443+
scas_log(L_DEBUG, "Undefined macro \'%s\'", m->name);
444+
macro_free(m);
444445
list_del(state->macros, i);
445446
return 1;
446447
}

include/assembler.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,6 @@ struct assembler_state {
5050

5151
object_t *assemble(FILE *file, const char *file_name, assembler_settings_t *settings);
5252
void transform_local_labels(tokenized_expression_t *expression, const char *last_global_label);
53+
void macro_free(macro_t *macro);
5354

5455
#endif

0 commit comments

Comments
 (0)