1: static char sccsid[] = "@(#)arcv.c 4.1 10/1/80";
2: /*
3: * arcv - convert old to new archive format
4: */
5:
6: #include <signal.h>
7: #include <ar.h>
8: #define OARMAG 0177545
9: struct oar_hdr {
10: char oar_name[14];
11: long oar_date;
12: char oar_uid;
13: char oar_gid;
14: int oar_mode;
15: long oar_size;
16: };
17:
18: struct ar_hdr nh;
19: struct oar_hdr oh;
20: char *tmp;
21: char *mktemp();
22: int f;
23: char buf[512];
24: int tf;
25: main(argc, argv)
26: char *argv[];
27: {
28: register i;
29:
30: if (argc>1 && strcmp(argv[1], "-t")==0) {
31: tmp = mktemp("/usr/tmp/arcXXXXXX");
32: argc--;
33: argv++;
34: } else
35: tmp = mktemp("/tmp/arcXXXXXX");
36: for(i=1; i<4; i++)
37: signal(i, SIG_IGN);
38: for(i=1; i<argc; i++) {
39: if (argc>1)
40: printf("%s:\n", argv[i]);
41: conv(argv[i]);
42: }
43: unlink(tmp);
44: return(0);
45: }
46:
47: conv(fil)
48: char *fil;
49: {
50: int oldmagic;
51: long n;
52: unsigned i;
53:
54: f = open(fil, 2);
55: if(f < 0) {
56: printf("arcv: cannot open %s\n", fil);
57: return;
58: }
59: close(creat(tmp, 0600));
60: tf = open(tmp, 2);
61: if(tf < 0) {
62: printf("arcv: cannot open temp\n");
63: close(f);
64: return;
65: }
66: oldmagic = 0;
67: read(f, (char *)&oldmagic, sizeof(oldmagic));
68: if(oldmagic != 0177545) {
69: printf("arcv: %s not old archive format\n", fil);
70: close(tf);
71: close(f);
72: return;
73: }
74: chkwrite(tf, ARMAG, SARMAG);
75: loop:
76: i = read(f, (char *)&oh, sizeof(oh));
77: if(i != sizeof(oh))
78: goto out;
79:
80: sprintf(buf, "%-16.14s%-12ld%-6u%-6u%-8o%-10ld%-2s",
81: oh.oar_name,
82: oh.oar_date,
83: oh.oar_uid,
84: oh.oar_gid,
85: (unsigned short)oh.oar_mode,
86: oh.oar_size,
87: ARFMAG);
88: strncpy((char *)&nh, buf, sizeof(nh));
89: n = oh.oar_size;
90: chkwrite(tf, (char *)&nh, sizeof(nh));
91: while(n > 0) {
92: i = 512;
93: if (n<i)
94: i = n;
95: read(f, buf, i&01? i+1:i);
96: if (i&01) {
97: buf[i] = '\n';
98: i++;
99: }
100: chkwrite(tf, buf, i);
101: n -= i;
102: }
103: goto loop;
104: out:
105: lseek(f, 0L, 0);
106: lseek(tf, 0L, 0);
107: while((i=read(tf, buf, 512)) > 0)
108: chkwrite(f, buf, i);
109: close(f);
110: close(tf);
111: }
112:
113: chkwrite(f, b, n)
114: char *b;
115: {
116: if (write(f, b, n) != n) {
117: printf("arcv: write error\n");
118: unlink(tmp);
119: exit(1);
120: }
121: }
Defined functions
conv
defined in line
47; used 1 times
main
defined in line
25;
never used
Defined variables
buf
defined in line
23; used 7 times
f
defined in line
22; used 12 times
nh
defined in line
18; used 4 times
oh
defined in line
19; used 10 times
sccsid
defined in line
1;
never used
tf
defined in line
24; used 9 times
tmp
defined in line
20; used 6 times
Defined struct's
Defined macros
OARMAG
defined in line
8;
never used