if((signal(i
, 1) & 1) == 0)
for(cp
= argv
[1]; *cp
; cp
++)
printf("bad option `%c'\n", *cp
);
if(flg
['a'-'a'] || flg
['b'-'a']) {
printf("one of [%s] must be specified\n", man
);
printf("only one of [%s] allowed\n", man
);
printf("creating %s\n", arnam
);
if(namc
== 0 || match()) {
printf("cannot open %s\n", file
);
if(stbuf
.mdate
<= arbuf
.date
) {
copyfil(af
, -1, IODD
+SKIP
);
copyfil(af
, tf
, IODD
+OODD
+HEAD
);
copyfil(af
, -1, IODD
+SKIP
);
copyfil(af
, tf
, IODD
+OODD
+HEAD
);
if(namc
== 0 || match()) {
f
= creat(file
, arbuf
.mode
& 0777);
printf("%s cannot create\n", file
);
copyfil(af
, -1, IODD
+SKIP
);
if(namc
== 0 || match()) {
copyfil(af
, -1, IODD
+SKIP
);
tf2nam
= mktemp("/tmp/v2XXXXX");
close(creat(tf2nam
, 0600));
printf("cannot create third temp\n");
copyfil(af
, tf2
, IODD
+OODD
+HEAD
);
copyfil(af
, tf
, IODD
+OODD
+HEAD
);
if(namc
== 0 || match()) {
printf("%s\n", trim(file
));
copyfil(af
, -1, IODD
+SKIP
);
tfnam
= mktemp("/tmp/vXXXXX");
close(creat(tfnam
, 0600));
printf("cannot create temp file\n");
if(write(tf
, buf
, 2) != 2) {
printf("%s not in archive format\n", arnam
);
printf("usage: ar [%s][%s] archive files ...\n", opt
, man
);
printf("%s does not exist\n", arnam
);
printf("%s not found\n", namv
[i
]);
printf("%s cannot open\n", file
);
printf("cannot create %s\n", arnam
);
while((i
= read(tf
, buf
, 512)) > 0)
if(write(af
, buf
, i
) != i
) {
while((i
= read(tf2
, buf
, 512)) > 0)
if(write(af
, buf
, i
) != i
) {
while((i
= read(tf1
, buf
, 512)) > 0)
if(write(af
, buf
, i
) != i
) {
* into the temporary file
arbuf
.size
= itol(stbuf
.siz0
&0377, stbuf
.siz1
);
arbuf
.date
= stbuf
.mdate
;
arbuf
.mode
= stbuf
.flags
;
copyfil(f
, tf
, OODD
+HEAD
);
if(fstat(f
, &stbuf
) < 0) {
if((flag
& HEAD
) && fo
>= 0)
if(write(fo
, &arbuf
, sizeof arbuf
) != sizeof arbuf
) {
if(read(fi
, buf
, i
) != i
)
if(write(fo
, buf
, o
) != o
&& fo
>= 0) {
i
= read(af
, &arbuf
, sizeof arbuf
);
if(equal(trim(namv
[i
]), file
)) {
tf1nam
= mktemp("/tmp/v1XXXXX");
close(creat(tf1nam
, 0600));
printf("cannot create second temp\n");
printf("phase error on %s\n", file
);
if(c
!= 'c' || flg
['v'-'a'] > 1)
printf("%c - %s\n", c
, file
);
printf("%3d/%1d", arbuf
.uid
&0377, arbuf
.gid
&0377);
printf("%6s", locv(arbuf
.size
));
printf(" %-12.12s %-4.4s ", cp
+4, cp
+20);
int m1
[] { 1, ROWN
, 'r', '-' };
int m2
[] { 1, WOWN
, 'w', '-' };
int m3
[] { 2, SUID
, 's', XOWN
, 'x', '-' };
int m4
[] { 1, RGRP
, 'r', '-' };
int m5
[] { 1, WGRP
, 'w', '-' };
int m6
[] { 2, SGID
, 's', XGRP
, 'x', '-' };
int m7
[] { 1, ROTH
, 'r', '-' };
int m8
[] { 1, WOTH
, 'w', '-' };
int m9
[] { 2, STXT
, 't', XOTH
, 'x', '-' };
int *m
[] { m1
, m2
, m3
, m4
, m5
, m6
, m7
, m8
, m9
};
for (mp
= &m
[0]; mp
< &m
[9];)
while (--n
>=0 && (arbuf
.mode
&*ap
++)==0)