From 91aad0b28e33c5dfb5ca3a63bbea1593c40c0de9 Mon Sep 17 00:00:00 2001 From: ceriel Date: Wed, 3 Dec 1986 13:09:15 +0000 Subject: [PATCH] Improved relocation reading code for the !incore strategy. --- util/led/scan.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/util/led/scan.c b/util/led/scan.c index 0ac32dd3b..e9d87ae36 100644 --- a/util/led/scan.c +++ b/util/led/scan.c @@ -494,9 +494,11 @@ modulsize(head) */ static struct outrelo *walkrelo; +static unsigned short cnt_relos; +static unsigned short index; startrelo(head) - struct outhead *head; + register struct outhead *head; { ind_t reloindex; @@ -504,18 +506,29 @@ startrelo(head) reloindex = *(ind_t *)(modulbase + IND_RELO(*head)); walkrelo = (struct outrelo *)address(ALLORELO, reloindex); } + else { + index = 20; + rd_rew_relos(head); + cnt_relos = head->oh_nrelos; + } } struct outrelo * nextrelo() { - static struct outrelo relobuf; + static struct outrelo relobuf[20]; if (incore) return walkrelo++; - rd_relo(&relobuf, 1); - return &relobuf; + if (index == 20) { + int i = cnt_relos >= 20 ? 20 : cnt_relos; + + cnt_relos -= i; + rd_relo(relobuf, i); + index = 0; + } + return &relobuf[index++]; } /* ------------------------------------------------------------------------- */ -- 2.34.1