1*9a747e4fSDavid du Colombier /* $Source: /u/mark/src/pax/RCS/append.c,v $
2*9a747e4fSDavid du Colombier *
3*9a747e4fSDavid du Colombier * $Revision: 1.2 $
4*9a747e4fSDavid du Colombier *
5*9a747e4fSDavid du Colombier * append.c - append to a tape archive.
6*9a747e4fSDavid du Colombier *
7*9a747e4fSDavid du Colombier * DESCRIPTION
8*9a747e4fSDavid du Colombier *
9*9a747e4fSDavid du Colombier * Routines to allow appending of archives
10*9a747e4fSDavid du Colombier *
11*9a747e4fSDavid du Colombier * AUTHORS
12*9a747e4fSDavid du Colombier *
13*9a747e4fSDavid du Colombier * Mark H. Colburn, NAPS International (mark@jhereg.mn.org)
14*9a747e4fSDavid du Colombier *
15*9a747e4fSDavid du Colombier *
16*9a747e4fSDavid du Colombier * Sponsored by The USENIX Association for public distribution.
17*9a747e4fSDavid du Colombier *
18*9a747e4fSDavid du Colombier * Copyright (c) 1989 Mark H. Colburn.
19*9a747e4fSDavid du Colombier * All rights reserved.
20*9a747e4fSDavid du Colombier *
21*9a747e4fSDavid du Colombier * Redistribution and use in source and binary forms are permitted
22*9a747e4fSDavid du Colombier * provided that the above copyright notice is duplicated in all such
23*9a747e4fSDavid du Colombier * forms and that any documentation, advertising materials, and other
24*9a747e4fSDavid du Colombier * materials related to such distribution and use acknowledge that the
25*9a747e4fSDavid du Colombier * software was developed * by Mark H. Colburn and sponsored by The
26*9a747e4fSDavid du Colombier * USENIX Association.
27*9a747e4fSDavid du Colombier *
28*9a747e4fSDavid du Colombier * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
29*9a747e4fSDavid du Colombier * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
30*9a747e4fSDavid du Colombier * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
31*9a747e4fSDavid du Colombier *
32*9a747e4fSDavid du Colombier * $Log: append.c,v $
33*9a747e4fSDavid du Colombier * Revision 1.2 89/02/12 10:03:58 mark
34*9a747e4fSDavid du Colombier * 1.2 release fixes
35*9a747e4fSDavid du Colombier *
36*9a747e4fSDavid du Colombier * Revision 1.1 88/12/23 18:02:00 mark
37*9a747e4fSDavid du Colombier * Initial revision
38*9a747e4fSDavid du Colombier *
39*9a747e4fSDavid du Colombier */
40*9a747e4fSDavid du Colombier
41*9a747e4fSDavid du Colombier #ifndef lint
42*9a747e4fSDavid du Colombier static char *ident = "$Id: append.c,v 1.2 89/02/12 10:03:58 mark Exp $";
43*9a747e4fSDavid du Colombier static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
44*9a747e4fSDavid du Colombier #endif /* ! lint */
45*9a747e4fSDavid du Colombier
46*9a747e4fSDavid du Colombier
47*9a747e4fSDavid du Colombier /* Headers */
48*9a747e4fSDavid du Colombier
49*9a747e4fSDavid du Colombier #include "pax.h"
50*9a747e4fSDavid du Colombier
51*9a747e4fSDavid du Colombier
52*9a747e4fSDavid du Colombier /* append_archive - main loop for appending to a tar archive
53*9a747e4fSDavid du Colombier *
54*9a747e4fSDavid du Colombier * DESCRIPTION
55*9a747e4fSDavid du Colombier *
56*9a747e4fSDavid du Colombier * Append_archive reads an archive until the end of the archive is
57*9a747e4fSDavid du Colombier * reached once the archive is reached, the buffers are reset and the
58*9a747e4fSDavid du Colombier * create_archive function is called to handle the actual writing of
59*9a747e4fSDavid du Colombier * the appended archive data. This is quite similar to the
60*9a747e4fSDavid du Colombier * read_archive function, however, it does not do all the processing.
61*9a747e4fSDavid du Colombier */
62*9a747e4fSDavid du Colombier
63*9a747e4fSDavid du Colombier #ifdef __STDC__
64*9a747e4fSDavid du Colombier
append_archive(void)65*9a747e4fSDavid du Colombier void append_archive(void)
66*9a747e4fSDavid du Colombier
67*9a747e4fSDavid du Colombier #else
68*9a747e4fSDavid du Colombier
69*9a747e4fSDavid du Colombier void append_archive()
70*9a747e4fSDavid du Colombier
71*9a747e4fSDavid du Colombier #endif
72*9a747e4fSDavid du Colombier {
73*9a747e4fSDavid du Colombier Stat sb;
74*9a747e4fSDavid du Colombier char name[PATH_MAX + 1];
75*9a747e4fSDavid du Colombier
76*9a747e4fSDavid du Colombier name[0] = '\0';
77*9a747e4fSDavid du Colombier while (get_header(name, &sb) == 0) {
78*9a747e4fSDavid du Colombier if (((ar_format == TAR)
79*9a747e4fSDavid du Colombier ? buf_skip(ROUNDUP((OFFSET) sb.sb_size, BLOCKSIZE))
80*9a747e4fSDavid du Colombier : buf_skip((OFFSET) sb.sb_size)) < 0) {
81*9a747e4fSDavid du Colombier warn(name, "File data is corrupt");
82*9a747e4fSDavid du Colombier }
83*9a747e4fSDavid du Colombier }
84*9a747e4fSDavid du Colombier /* we have now gotten to the end of the archive... */
85*9a747e4fSDavid du Colombier
86*9a747e4fSDavid du Colombier /* reset the buffer now that we have read the entire archive */
87*9a747e4fSDavid du Colombier bufend = bufidx = bufstart;
88*9a747e4fSDavid du Colombier create_archive();
89*9a747e4fSDavid du Colombier }
90