BSD 4_4_Lite1 release
[unix-history] / usr / src / usr.bin / ar / append.c
CommitLineData
3971cf43 1/*-
ed554bc5 2 * Copyright (c) 1990, 1993, 1994
ad787160 3 * The Regents of the University of California. All rights reserved.
3971cf43
KB
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Hugh Smith at The University of Guelph.
7 *
c0567266
KB
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * 3. All advertising materials mentioning features or use of this software
17 * must display the following acknowledgement:
18 * This product includes software developed by the University of
19 * California, Berkeley and its contributors.
20 * 4. Neither the name of the University nor the names of its contributors
21 * may be used to endorse or promote products derived from this software
22 * without specific prior written permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
3971cf43
KB
35 */
36
37#ifndef lint
ed554bc5 38static char sccsid[] = "@(#)append.c 8.3 (Berkeley) 4/2/94";
3971cf43
KB
39#endif /* not lint */
40
41#include <sys/param.h>
42#include <sys/stat.h>
706c0358
JSP
43
44#include <err.h>
3971cf43
KB
45#include <fcntl.h>
46#include <unistd.h>
47#include <dirent.h>
48#include <stdio.h>
755759c7 49#include <string.h>
706c0358 50
3971cf43 51#include "archive.h"
755759c7 52#include "extern.h"
3971cf43 53
3971cf43
KB
54/*
55 * append --
56 * Append files to the archive - modifies original archive or creates
57 * a new archive if named archive does not exist.
58 */
706c0358 59int
3971cf43
KB
60append(argv)
61 char **argv;
62{
706c0358
JSP
63 int afd, fd, eval;
64 char *file;
3971cf43 65 CF cf;
706c0358 66 struct stat sb;
3971cf43
KB
67
68 afd = open_archive(O_CREAT|O_RDWR);
69 if (lseek(afd, (off_t)0, SEEK_END) == (off_t)-1)
70 error(archive);
71
ff7a74c0 72 /* Read from disk, write to an archive; pad on write. */
3971cf43 73 SETCF(0, 0, afd, archive, WPAD);
1161a8a6 74 for (eval = 0; file = *argv++;) {
3971cf43 75 if ((fd = open(file, O_RDONLY)) < 0) {
706c0358 76 warn("%s", file);
1161a8a6 77 eval = 1;
3971cf43
KB
78 continue;
79 }
80 if (options & AR_V)
af52bb8a 81 (void)printf("q - %s\n", file);
3971cf43
KB
82 cf.rfd = fd;
83 cf.rname = file;
ce478bb7 84 put_arobj(&cf, &sb);
3971cf43
KB
85 (void)close(fd);
86 }
87 close_archive(afd);
706c0358 88 return (eval);
3971cf43 89}