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 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