X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/abe76123b75b0bcc47d8823d89787691ab628704..d9eee173306578a60b96862e882f8657ec975b57:/usr/src/usr.bin/ar/replace.c diff --git a/usr/src/usr.bin/ar/replace.c b/usr/src/usr.bin/ar/replace.c index 9407070a0b..9f56a93775 100644 --- a/usr/src/usr.bin/ar/replace.c +++ b/usr/src/usr.bin/ar/replace.c @@ -5,11 +5,37 @@ * This code is derived from software contributed to Berkeley by * Hugh Smith at The University of Guelph. * - * %sccs.include.redist.c% + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. */ #ifndef lint -static char sccsid[] = "@(#)replace.c 5.4 (Berkeley) %G%"; +static char sccsid[] = "@(#)replace.c 5.8 (Berkeley) 3/15/91"; #endif /* not lint */ #include @@ -20,7 +46,9 @@ static char sccsid[] = "@(#)replace.c 5.4 (Berkeley) %G%"; #include #include #include +#include #include "archive.h" +#include "extern.h" extern CHDR chdr; /* converted header */ extern char *archive; /* archive name */ @@ -36,7 +64,7 @@ extern char *tname; /* temporary file "name" */ replace(argv) char **argv; { - extern char *posname; /* positioning file name */ + extern char *posarg, *posname; /* positioning file name */ register char *file; register int afd, curfd, mods, sfd; struct stat sb; @@ -45,6 +73,7 @@ replace(argv) int err, exists, tfd1, tfd2; char *rname(); + err = 0; /* * If doesn't exist, simply append to the archive. There's * a race here, but it's pretty short, and not worth fixing. @@ -69,8 +98,8 @@ replace(argv) * all back together at the end. */ mods = (options & (AR_A|AR_B)); - for (err = 0, curfd = tfd1; get_header(afd);) { - if ((file = *argv) && files(argv)) { + for (curfd = tfd1; get_arobj(afd);) { + if (*argv && (file = files(argv))) { if ((sfd = open(file, O_RDONLY)) < 0) { err = 1; (void)fprintf(stderr, "ar: %s: %s.\n", @@ -82,13 +111,13 @@ replace(argv) goto useold; if (options & AR_V) - (void)printf("r - %s\n", chdr.name); + (void)printf("r - %s\n", file); /* Read from disk, write to an archive; pad on write */ SETCF(sfd, file, curfd, tname, WPAD); - put_object(&cf, &sb); + put_arobj(&cf, &sb); (void)close(sfd); - skipobj(afd); + skip_arobj(afd); continue; } @@ -98,19 +127,19 @@ replace(argv) curfd = tfd2; /* Read and write to an archive; pad on both. */ SETCF(afd, archive, curfd, tname, RPAD|WPAD); - put_object(&cf, (struct stat *)NULL); + put_arobj(&cf, (struct stat *)NULL); if (options & AR_A) curfd = tfd2; } else { /* Read and write to an archive; pad on both. */ useold: SETCF(afd, archive, curfd, tname, RPAD|WPAD); - put_object(&cf, (struct stat *)NULL); + put_arobj(&cf, (struct stat *)NULL); } } if (mods) { (void)fprintf(stderr, "ar: %s: archive member not found.\n", - posname); + posarg); close_archive(afd); return(1); } @@ -118,7 +147,7 @@ useold: SETCF(afd, archive, curfd, tname, RPAD|WPAD); /* Append any left-over arguments to the end of the after file. */ append: while (file = *argv++) { if (options & AR_V) - (void)printf("a - %s\n", rname(file)); + (void)printf("a - %s\n", file); if ((sfd = open(file, O_RDONLY)) < 0) { err = 1; (void)fprintf(stderr, "ar: %s: %s.\n", @@ -129,7 +158,7 @@ append: while (file = *argv++) { /* Read from disk, write to an archive; pad on write. */ SETCF(sfd, file, options & (AR_A|AR_B) ? tfd1 : tfd2, tname, WPAD); - put_object(&cf, &sb); + put_arobj(&cf, &sb); (void)close(sfd); } @@ -139,14 +168,14 @@ append: while (file = *argv++) { if (tfd1 != -1) { tsize = size = lseek(tfd1, (off_t)0, SEEK_CUR); (void)lseek(tfd1, (off_t)0, SEEK_SET); - copyfile(&cf, size); + copy_ar(&cf, size); } else tsize = 0; tsize += size = lseek(tfd2, (off_t)0, SEEK_CUR); (void)lseek(tfd2, (off_t)0, SEEK_SET); cf.rfd = tfd2; - copyfile(&cf, size); + copy_ar(&cf, size); (void)ftruncate(afd, tsize + SARMAG); close_archive(afd);