From 47cd77ddbdb2cc3dc758299fce4bc95699d63378 Mon Sep 17 00:00:00 2001 From: arr Date: Sun, 18 Nov 2001 18:19:35 +0000 Subject: - Ensure that linker file id's are unique, rather than blindly incrementing the value. Reviewed by: dfr, peter --- sys/kern/kern_linker.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/sys/kern/kern_linker.c b/sys/kern/kern_linker.c index ca032a9..bc969e4 100644 --- a/sys/kern/kern_linker.c +++ b/sys/kern/kern_linker.c @@ -70,6 +70,20 @@ static linker_class_list_t classes; static linker_file_list_t linker_files; static int next_file_id = 1; +#define LINKER_GET_NEXT_FILE_ID(a) do { \ + linker_file_t lftmp; \ + \ +retry: \ + TAILQ_FOREACH(lftmp, &linker_files, link) { \ + if (next_file_id == lftmp->id) { \ + next_file_id++; \ + goto retry; \ + } \ + } \ + (a) = next_file_id; \ +} while(0) + + /* XXX wrong name; we're looking at version provision tags here, not modules */ typedef TAILQ_HEAD(, modlist) modlisthead_t; struct modlist { @@ -401,7 +415,7 @@ linker_make_file(const char* pathname, linker_class_t lc) lf->userrefs = 0; lf->flags = 0; lf->filename = linker_strdup(filename); - lf->id = next_file_id++; + LINKER_GET_NEXT_FILE_ID(lf->id); lf->ndeps = 0; lf->deps = NULL; STAILQ_INIT(&lf->common); -- cgit v1.1