xref: /plan9/sys/src/ape/cmd/pax/append.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
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