* Copyright (c) 1990 The Regents of the University of California.
* This code is derived from software contributed to Berkeley by
* Hugh Smith at The University of Guelph.
* %sccs.include.redist.c%
static char sccsid
[] = "@(#)extract.c 5.4 (Berkeley) %G%";
extern CHDR chdr
; /* converted header */
extern char *archive
; /* archive name */
* Extract files from the named archive - if member names given only
* extract those members otherwise extract all members. If 'o' option
* selected modify date of newly created file to be same as archive
* members date otherwise date is time of extraction. Does not modify
register int afd
, all
, tfd
;
tv
[0].tv_usec
= tv
[1].tv_usec
= 0;
afd
= open_archive(O_RDONLY
);
/* Read from an archive, write to disk; pad on read. */
SETCF(afd
, archive
, 0, 0, RPAD
);
for (all
= !*argv
; get_header(afd
);) {
else if (!(file
= files(argv
))) {
if (options
& AR_U
&& !stat(file
, &sb
) &&
if ((tfd
= open(file
, O_WRONLY
|O_CREAT
|O_TRUNC
, S_IWUSR
)) < 0) {
(void)fprintf(stderr
, "ar: %s: %s.\n",
(void)printf("x - %s\n", file
);
copyfile(&cf
, chdr
.size
);
if (fchmod(tfd
, (short)chdr
.mode
)) {
(void)fprintf(stderr
, "ar: %s: chmod: %s\n",
tv
[0].tv_sec
= tv
[1].tv_sec
= chdr
.date
;
(void)fprintf(stderr
, "ar: %s: utimes: %s\n",