diff options
| author | Andrew R. Reiter <arr@FreeBSD.org> | 2001-11-18 18:19:35 +0000 |
|---|---|---|
| committer | Andrew R. Reiter <arr@FreeBSD.org> | 2001-11-18 18:19:35 +0000 |
| commit | b489b4075c24449483a358a4f417fc76c31b794f (patch) | |
| tree | 7736597570471d49b80fcf81411fd2535fcdb9a2 /sys | |
| parent | 6971b3c7d12b77bbcb2662221234b370fc6cf46b (diff) | |
Notes
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/kern/kern_linker.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/sys/kern/kern_linker.c b/sys/kern/kern_linker.c index ca032a9ae124..bc969e4bdff7 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); |
