made more portable
authorceriel <none@none>
Thu, 21 Apr 1988 18:53:31 +0000 (18:53 +0000)
committerceriel <none@none>
Thu, 21 Apr 1988 18:53:31 +0000 (18:53 +0000)
util/led/memory.c
util/led/memory.h
util/led/save.c
util/led/scan.c

index dd94e66..887a097 100644 (file)
@@ -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;
index 7617835..4286c16 100644 (file)
@@ -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();
index f49e3fe..102b730 100644 (file)
@@ -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));
        }
 }
 
index 55c9ac2..15471f1 100644 (file)
@@ -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;