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