home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 May / W2KPRK.iso / apps / posix / source / PAX / APPEND.C next >
Encoding:
C/C++ Source or Header  |  1999-11-17  |  2.6 KB  |  98 lines

  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.  
  64. #ifdef __STDC__
  65.  
  66. void append_archive(void)
  67.  
  68. #else
  69.  
  70. void append_archive()
  71.  
  72. #endif
  73. {
  74.     Stat            sb;
  75.     char            name[PATH_MAX + 1];
  76.  
  77.     name[0] = '\0';
  78. #ifdef DF_TRACE_DEBUG
  79. printf("DF_TRACE_DEBUG: void append_archive() in append.c\n");
  80. #endif
  81.     while (get_header(name, &sb) == 0) {
  82.     if (((ar_format == TAR)
  83.          ? buf_skip(ROUNDUP((OFFSET) sb.sb_size, BLOCKSIZE))
  84.          : buf_skip((OFFSET) sb.sb_size)) < 0) {
  85.         warn(name, "File data is corrupt");
  86.     }
  87.     }
  88.     /* we have now gotten to the end of the archive... */
  89.  
  90.     /* reset the buffer now that we have read the entire archive */
  91.     bufend = bufidx = bufstart;
  92. #if 0
  93.     bufidx -= 2*blocksize;
  94.     total -= 2*blocksize;
  95. #endif
  96.     create_archive();
  97. }
  98.