Module Name: src
Committed By: rillig
Date: Thu Mar 25 16:43:51 UTC 2021
Modified Files:
src/usr.bin/xlint/lint1: init.c
Log Message:
lint: free memory at the end of an initialization
No functional change, just more clarity in the code.
To generate a diff of this commit:
cvs rdiff -u -r1.120 -r1.121 src/usr.bin/xlint/lint1/init.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.bin/xlint/lint1/init.c
diff -u src/usr.bin/xlint/lint1/init.c:1.120 src/usr.bin/xlint/lint1/init.c:1.121
--- src/usr.bin/xlint/lint1/init.c:1.120 Thu Mar 25 16:30:23 2021
+++ src/usr.bin/xlint/lint1/init.c Thu Mar 25 16:43:51 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: init.c,v 1.120 2021/03/25 16:30:23 rillig Exp $ */
+/* $NetBSD: init.c,v 1.121 2021/03/25 16:43:51 rillig Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: init.c,v 1.120 2021/03/25 16:30:23 rillig Exp $");
+__RCSID("$NetBSD: init.c,v 1.121 2021/03/25 16:43:51 rillig Exp $");
#endif
#include <stdlib.h>
@@ -293,6 +293,19 @@ current_initstk(void)
return &init->initstk;
}
+static void
+free_initialization(struct initialization *in)
+{
+ initstack_element *el, *next;
+
+ for (el = in->initstk; el != NULL; el = next) {
+ next = el->i_enclosing;
+ free(el);
+ }
+
+ free(in);
+}
+
#define initerr (*current_initerr())
#define initsym (*current_initsym())
#define initstk (*current_initstk())
@@ -449,7 +462,7 @@ end_initialization(void)
curr_init = init;
init = init->next;
- free(curr_init);
+ free_initialization(curr_init);
debug_step("end initialization");
}
@@ -535,13 +548,6 @@ initstack_init(void)
if (initerr)
return;
- /* TODO: merge into end_initialization */
- /* free memory used in last initialization */
- while ((istk = initstk) != NULL) {
- initstk = istk->i_enclosing;
- free(istk);
- }
-
/* TODO: merge into init_using_expr */
while (namedmem != NULL)
designator_shift_name();