Bug fix: order in archive longs is PDP-11 order!
authorceriel <none@none>
Thu, 8 Jan 1987 17:39:37 +0000 (17:39 +0000)
committerceriel <none@none>
Thu, 8 Jan 1987 17:39:37 +0000 (17:39 +0000)
modules/src/object/rd_arhdr.c
modules/src/object/wr_arhdr.c

index 691799f..bce8b18 100644 (file)
@@ -5,7 +5,7 @@ int
 rd_arhdr(fd, arhdr)
        register struct ar_hdr  *arhdr;
 {
-#if ! (BYTES_REVERSED || WORDS_REVERSED)
+#if WORDS_REVERSED && ! BYTES_REVERSED
        if (sizeof (struct ar_hdr) != AR_TOTAL)
 #endif
        {       
@@ -23,13 +23,15 @@ rd_arhdr(fd, arhdr)
                while (i--) {
                        *p++ = *c++;
                }
-               arhdr->ar_date = get4(c); c += 4;
+               arhdr->ar_date = get2(c) << 16; c += 2;
+               arhdr->ar_date |= get2(c) & 0xffff; c += 2;
                arhdr->ar_uid = *c++;
                arhdr->ar_gid = *c++;
                arhdr->ar_mode = get2(c); c += 2;
-               arhdr->ar_size = get4(c);
+               arhdr->ar_size = get2(c) << 16; c += 2;
+               arhdr->ar_size |= get2(c) & 0xffff;
        }
-#if ! (BYTES_REVERSED || WORDS_REVERSED)
+#if WORDS_REVERSED && !BYTES_REVERSED
        else    {
                register int i;
                i = read(fd, (char *) arhdr, AR_TOTAL);
index f7ac67b..6ad9b99 100644 (file)
@@ -4,7 +4,7 @@
 wr_arhdr(fd, arhdr)
        register struct ar_hdr  *arhdr;
 {
-#if ! (BYTES_REVERSED || WORDS_REVERSED)
+#if WORDS_REVERSED && !BYTES_REVERSED
        if (sizeof (struct ar_hdr) != AR_TOTAL)
 #endif
        {       
@@ -16,14 +16,16 @@ wr_arhdr(fd, arhdr)
                while (i--) {
                        *c++ = *p++;
                }
-               put4(arhdr->ar_date,c); c += 4;
+               put2(arhdr->ar_date>>16,c); c += 2;
+               put2(arhdr->ar_date,c); c += 2;
                *c++ = arhdr->ar_uid;
                *c++ = arhdr->ar_gid;
                put2(arhdr->ar_mode,c); c += 2;
-               put4(arhdr->ar_size,c);
+               put2(arhdr->ar_size>>16,c); c += 2;
+               put2(arhdr->ar_size,c);
                wr_bytes(fd, buf, (long) AR_TOTAL);
        }
-#if ! (BYTES_REVERSED || WORDS_REVERSED)
+#if WORDS_REVERSED && !BYTES_REVERSED
        else    wr_bytes(fd, (char *) arhdr, (long) AR_TOTAL);
 #endif
 }