From fd4bda486555a0a90fad33001696eeb961447135 Mon Sep 17 00:00:00 2001 From: ceriel Date: Thu, 21 Apr 1988 18:53:31 +0000 Subject: [PATCH] made more portable --- util/led/memory.c | 5 +++++ util/led/memory.h | 2 ++ util/led/save.c | 6 +++--- util/led/scan.c | 12 ++++++------ 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/util/led/memory.c b/util/led/memory.c index dd94e66da..887a097c2 100644 --- a/util/led/memory.c +++ b/util/led/memory.c @@ -377,6 +377,11 @@ alloc(piece, size) return full; if (size != (ind_t)size) return BADOFF; + switch(piece) { + case ALLOMODL: + case ALLORANL: + size = int_align(size); + } if (size - left > 0) incr = ((size - left + (INCRSIZE - 1)) / INCRSIZE) * INCRSIZE; diff --git a/util/led/memory.h b/util/led/memory.h index 761783575..4286c16c3 100644 --- a/util/led/memory.h +++ b/util/led/memory.h @@ -35,6 +35,8 @@ extern struct memory mems[]; #define address(piece,offset) (mems[(piece)].mem_base+(offset)) #define modulptr(offset) (mems[ALLOMODL].mem_base+core_position+(offset)) +#define int_align(sz) (((sz)+(sizeof(int)-1))&~(sizeof(int)-1)) + extern ind_t core_position; extern ind_t hard_alloc(); extern ind_t alloc(); diff --git a/util/led/save.c b/util/led/save.c index f49e3fefb..102b73000 100644 --- a/util/led/save.c +++ b/util/led/save.c @@ -26,9 +26,9 @@ savemagic() if (!incore) return; - if ((p = core_alloc(ALLOMODL, (long)sizeof(ushort))) != (char *)0) { + if ((p = core_alloc(ALLOMODL, (long)sizeof(int))) != (char *)0) { *(ushort *)p = AALMAG; - core_position += sizeof(ushort); + core_position += sizeof(int); } } @@ -42,7 +42,7 @@ savehdr(hdr) if ((p=core_alloc(ALLOMODL,(long)sizeof(struct ar_hdr)))!=(char *)0) { *(struct ar_hdr *)p = *hdr; - core_position += sizeof(struct ar_hdr); + core_position += int_align(sizeof(struct ar_hdr)); } } diff --git a/util/led/scan.c b/util/led/scan.c index 55c9ac2cd..15471f143 100644 --- a/util/led/scan.c +++ b/util/led/scan.c @@ -104,8 +104,8 @@ getfile(filename) if (strcmp(archive_header.ar_name, SYMDEF)) fatal("no table of contents"); } else if (incore) { - modulbase += sizeof(ushort); - core_position += sizeof(ushort); + modulbase += sizeof(int); + core_position += sizeof(int); } return ARCHIVE; default: @@ -130,8 +130,8 @@ get_archive_header(archive_header) } else { /* Copy structs. */ *archive_header = *(struct ar_hdr *)modulbase; - modulbase += sizeof(struct ar_hdr); - core_position += sizeof(struct ar_hdr); + modulbase += int_align(sizeof(struct ar_hdr)); + core_position += int_align(sizeof(struct ar_hdr)); } #ifdef SYMDBUG objectsize = archive_header.ar_size; @@ -408,9 +408,9 @@ skip_modul(head) register ind_t skip = modulsize(head); if (incore) { - core_position += skip; + core_position += int_align(skip); if (passnumber == SECOND) - modulbase += skip; + modulbase += int_align(skip); } else { dealloc(ALLOMODL); core_position = (ind_t)0; -- 2.34.1