BSD 4_3_Reno release
[unix-history] / usr / src / old / ar11 / ar11.c
index b06eaed..9827570 100644 (file)
@@ -1,35 +1,40 @@
-static char *sccsid = "@(#)ar11.c      4.2 (Berkeley) %G%";
+static char *sccsid = "@(#)ar11.c      4.6 (Berkeley) 5/11/89";
 /* ar11 - archiver for PDP-11 formatted archives */
 
 /* ar11 - archiver for PDP-11 formatted archives */
 
-#include <signal.h>
-#include <stdio.h>
 #include <sys/types.h>
 #include <sys/types.h>
+#include <sys/signal.h>
 #include <sys/stat.h>
 #include <sys/stat.h>
-#define ARMAG -155  /* 017545 */
+#include <stdio.h>
+#include "pathnames.h"
+
+#define        ARMAG ((short)0177545)
 struct ar_hdr {
 struct ar_hdr {
-       char ar_name[14];
-       short ar_date1;
-       short ar_date2;
-       char ar_uid;
-       char ar_gid;
-       short ar_mode;
-       short ar_size1;
-       short ar_size2;
+       char    ar_name[14];
+       short   ar_sdate[2];
+       char    ar_uid;
+       char    ar_gid;
+       short   ar_mode;
+       short   ar_ssize[2];
 };
 };
-int ar_date;
-int ar_size;
-#include <signal.h>
+long   ar_date;
+long   ar_size;
+
+#ifdef vax
+#define        fixshort(s)     (s)
+#define        mklong(sp)      (((sp)[0] << 16) + (sp)[1])
+#define unmklong(sp,l) { sp[0] = l >> 16; sp[1] = l & 0177777; }
+#define fixhdr(hdr)    (hdr)
+#endif
+#if defined(mc68000) || defined(tahoe)
+#define        fixshort(s)     ((short)(((s>>8)&0377)+((s&0377)<<8)))
+#define        mklong(sp)      (((sp)[0] << 16) + (sp)[1])
+#define unmklong(sp,l) { sp[0] = l >> 16; sp[1] = l & 0177777; }
+#define fixhdr(hdr)    swaphdr(hdr)
+struct ar_hdr swaphdr();
+#endif
+
 struct stat    stbuf;
 struct ar_hdr  arbuf;
 struct stat    stbuf;
 struct ar_hdr  arbuf;
-union ints
-{
-       struct fun
-       {
-               short h1;
-               short h2;
-       };
-       int w1;
-} x;
 
 #define        SKIP    1
 #define        IODD    2
 
 #define        SKIP    1
 #define        IODD    2
@@ -253,11 +258,12 @@ pcmd()
 
 mcmd()
 {
 
 mcmd()
 {
+       static char name2[] = _PATH_TMP2;
 
        init();
        if(getaf())
                noar();
 
        init();
        if(getaf())
                noar();
-       tf2nam = mktemp("/tmp/v2XXXXX");
+       tf2nam = mktemp(name2);
        close(creat(tf2nam, 0600));
        tf2 = open(tf2nam, 2);
        if(tf2 < 0) {
        close(creat(tf2nam, 0600));
        tf2 = open(tf2nam, 2);
        if(tf2 < 0) {
@@ -294,9 +300,10 @@ tcmd()
 
 init()
 {
 
 init()
 {
-       static short mbuf = ARMAG;
+       static char name0[] = _PATH_TMP0;
+       static short mbuf = fixshort(ARMAG);
 
 
-       tfnam = mktemp("/tmp/vXXXXX");
+       tfnam = mktemp(name0);
        close(creat(tfnam, 0600));
        tf = open(tfnam, 2);
        if(tf < 0) {
        close(creat(tfnam, 0600));
        tf = open(tfnam, 2);
        if(tf < 0) {
@@ -314,7 +321,8 @@ getaf()
        af = open(arnam, 0);
        if(af < 0)
                return(1);
        af = open(arnam, 0);
        if(af < 0)
                return(1);
-       if (read(af, (char *)&mbuf, sizeof(short)) != sizeof(short) || mbuf!=ARMAG) {
+       if (read(af, (char *)&mbuf, sizeof(short)) != sizeof(short) ||
+           mbuf != fixshort(ARMAG)) {
                fprintf(stderr, "ar11: %s not in PDP-11 archive format\n", arnam);
                done(1);
        }
                fprintf(stderr, "ar11: %s not in PDP-11 archive format\n", arnam);
                done(1);
        }
@@ -427,12 +435,10 @@ movefil(f)
        for(i=0; i<14; i++)
                if(arbuf.ar_name[i] = *cp)
                        cp++;
        for(i=0; i<14; i++)
                if(arbuf.ar_name[i] = *cp)
                        cp++;
-       ar_size = x.w1 = stbuf.st_size;
-       arbuf.ar_size1 = x.h2;
-       arbuf.ar_size2 = x.h1;
-       x.w1 = stbuf.st_mtime;
-       arbuf.ar_date1 = x.h2;
-       arbuf.ar_date2 = x.h1;
+       ar_size =  stbuf.st_size;
+       ar_date = stbuf.st_mtime;
+       unmklong(arbuf.ar_ssize, ar_size);
+       unmklong(arbuf.ar_sdate, ar_date);
        arbuf.ar_uid = stbuf.st_uid;
        arbuf.ar_gid = stbuf.st_gid;
        arbuf.ar_mode = stbuf.st_mode;
        arbuf.ar_uid = stbuf.st_uid;
        arbuf.ar_gid = stbuf.st_gid;
        arbuf.ar_mode = stbuf.st_mode;
@@ -463,9 +469,13 @@ copyfil(fi, fo, flag)
        register i, o;
        int pe;
 
        register i, o;
        int pe;
 
-       if(flag & HEAD)
-               if (write(fo, (char *)&arbuf, sizeof arbuf) != sizeof arbuf)
+       if(flag & HEAD) {
+               struct ar_hdr tmpbuf;
+
+               tmpbuf = fixhdr(arbuf);
+               if (write(fo, (char *)&tmpbuf, sizeof arbuf) != sizeof arbuf)
                        wrerr();
                        wrerr();
+       }
        pe = 0;
        while(ar_size > 0) {
                i = o = 512;
        pe = 0;
        while(ar_size > 0) {
                i = o = 512;
@@ -502,13 +512,12 @@ getdir()
                }
                return(1);
        }
                }
                return(1);
        }
+       arbuf = fixhdr(arbuf);
        for(i=0; i<14; i++)
        for(i=0; i<14; i++)
-{
                name[i] = arbuf.ar_name[i];
                name[i] = arbuf.ar_name[i];
-}
        file = name;
        file = name;
-       ar_date = swap(&arbuf.ar_date1);
-       ar_size = swap(&arbuf.ar_size1);
+       ar_date = mklong(arbuf.ar_sdate);
+       ar_size = mklong(arbuf.ar_ssize);
        return(0);
 }
 
        return(0);
 }
 
@@ -530,6 +539,7 @@ match()
 
 bamatch()
 {
 
 bamatch()
 {
+       static char name1[] = _PATH_TMP1;
        register f;
 
        switch(bastate) {
        register f;
 
        switch(bastate) {
@@ -543,7 +553,7 @@ bamatch()
 
        case 2:
                bastate = 0;
 
        case 2:
                bastate = 0;
-               tf1nam = mktemp("/tmp/v1XXXXX");
+               tf1nam = mktemp(name1);
                close(creat(tf1nam, 0600));
                f = open(tf1nam, 2);
                if(f < 0) {
                close(creat(tf1nam, 0600));
                f = open(tf1nam, 2);
                if(f < 0) {
@@ -654,11 +664,16 @@ wrerr()
        done(1);
 }
 
        done(1);
 }
 
-swap(word)
-short *word;
+#if defined(mc68000) || defined(tahoe)
+struct ar_hdr
+swaphdr(hdr)
+       struct ar_hdr hdr;
 {
 {
-       x.h1 = ((struct fun *)word)->h2;
-       x.h2 = ((struct fun *)word)->h1;
-       
-       return(x.w1);
+       hdr.ar_sdate[0] = fixshort(hdr.ar_sdate[0]);
+       hdr.ar_sdate[1] = fixshort(hdr.ar_sdate[1]);
+       hdr.ar_ssize[0] = fixshort(hdr.ar_ssize[0]);
+       hdr.ar_ssize[1] = fixshort(hdr.ar_ssize[1]);
+       hdr.ar_mode = fixshort(hdr.ar_mode);
+       return (hdr);
 }
 }
+#endif