1 /* Buffer management for tar.
2 Copyright (C) 1988, 92, 93, 94, 96, 97, 1999 Free Software Foundation, Inc.
3 Written by John Gilmore, on 1985-08-25.
5 This program is free software; you can redistribute it and/or modify it
6 under the terms of the GNU General Public License as published by the
7 Free Software Foundation; either version 2, or (at your option) any later
10 This program is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
13 Public License for more details.
15 You should have received a copy of the GNU General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
30 # include <sys/inode.h>
33 #ifndef FNM_LEADING_DIR
40 #define DEBUG_FORK 0 /* if nonzero, childs are born stopped */
42 #define PREAD 0 /* read file descriptor from pipe() */
43 #define PWRITE 1 /* write file descriptor from pipe() */
45 /* Number of retries before giving up on read. */
46 #define READ_ERROR_MAX 10
48 /* Globbing pattern to append to volume label if initial match failed. */
49 #define VOLUME_LABEL_APPEND " Volume [1-9]*"
53 static tarlong total_written
; /* bytes written on all volumes */
54 static tarlong bytes_written
; /* bytes written on this volume */
56 /* FIXME: The following four variables should ideally be static to this
57 module. However, this cannot be done yet, as update.c uses the first
58 three a lot, and compare.c uses the fourth. The cleanup continues! */
60 union block
*record_start
; /* start of record of archive */
61 union block
*record_end
; /* last+1 block of archive record */
62 union block
*current_block
; /* current block of archive */
63 enum access_mode access_mode
; /* how do we handle the archive */
64 static struct stat archive_stat
; /* stat block for archive file */
66 static off_t record_start_block
; /* block ordinal at record_start */
68 /* Where we write list messages (not errors, not interactions) to. Stdout
69 unless we're writing a pipe, in which case stderr. */
72 static void backspace_output
PARAMS ((void));
73 static int new_volume
PARAMS ((enum access_mode
));
74 static void write_error
PARAMS ((ssize_t
));
75 static void read_error
PARAMS ((void));
78 /* Obnoxious test to see if dimwit is trying to dump the archive. */
83 /* PID of child program, if compress_option or remote archive access. */
84 static pid_t child_pid
;
86 /* Error recovery stuff */
87 static int read_error_count
;
89 /* Have we hit EOF yet? */
92 /* Checkpointing counter */
93 static int checkpoint
;
95 /* We're reading, but we just read the last block and its time to update. */
96 /* As least EXTERN like this one as possible. FIXME! */
97 extern int time_to_start_writing
;
99 int file_to_switch_to
= -1; /* if remote update, close archive, and use
100 this descriptor to write to */
102 static int volno
= 1; /* which volume of a multi-volume tape we're
104 static int global_volno
= 1; /* volume number to print in external
107 /* The pointer save_name, which is set in function dump_file() of module
108 create.c, points to the original long filename instead of the new,
109 shorter mangled name that is set in start_header() of module create.c.
110 The pointer save_name is only used in multi-volume mode when the file
111 being processed is non-sparse; if a file is split between volumes, the
112 save_name is used in generating the LF_MULTIVOL record on the second
113 volume. (From Pierce Cantrell, 1991-08-13.) */
115 char *save_name
; /* name of the file we are currently writing */
116 off_t save_totsize
; /* total size of file we are writing, only
117 valid if save_name is non NULL */
118 off_t save_sizeleft
; /* where we are in the file we are writing,
119 only valid if save_name is nonzero */
121 int write_archive_to_stdout
= 0;
123 /* Used by flush_read and flush_write to store the real info about saved
125 static char *real_s_name
= NULL
;
126 static off_t real_s_totsize
;
127 static off_t real_s_sizeleft
;
136 pid_t result
= fork();
139 kill (getpid (), SIGSTOP
);
145 #endif /* DEBUG FORK */
148 init_total_written (void)
150 clear_tarlong (total_written
);
151 clear_tarlong (bytes_written
);
155 print_total_written (void)
157 fprintf (stderr
, _("Total bytes written: "));
158 print_tarlong (total_written
, stderr
);
159 fprintf (stderr
, "\n");
162 /*--------------------------------------------------------.
163 | Compute and return the block ordinal at current_block. |
164 `--------------------------------------------------------*/
167 current_block_ordinal (void)
169 return record_start_block
+ (current_block
- record_start
);
172 /*------------------------------------------------------------------.
173 | If the EOF flag is set, reset it, as well as current_block, etc. |
174 `------------------------------------------------------------------*/
182 current_block
= record_start
;
183 record_end
= record_start
+ blocking_factor
;
184 access_mode
= ACCESS_WRITE
;
188 /*-------------------------------------------------------------------------.
189 | Return the location of the next available input or output block. |
190 | Return NULL for EOF. Once we have returned NULL, we just keep returning |
191 | it, to avoid accidentally going on to the next file on the tape. |
192 `-------------------------------------------------------------------------*/
195 find_next_block (void)
197 if (current_block
== record_end
)
202 if (current_block
== record_end
)
208 return current_block
;
211 /*------------------------------------------------------.
212 | Indicate that we have used all blocks up thru BLOCK. |
214 | FIXME: should the arg have an off-by-1? |
215 `------------------------------------------------------*/
218 set_next_block_after (union block
*block
)
220 while (block
>= current_block
)
223 /* Do *not* flush the archive here. If we do, the same argument to
224 set_next_block_after could mean the next block (if the input record
225 is exactly one block long), which is not what is intended. */
227 if (current_block
> record_end
)
231 /*------------------------------------------------------------------------.
232 | Return the number of bytes comprising the space between POINTER through |
233 | the end of the current buffer of blocks. This space is available for |
234 | filling with data, or taking data from. POINTER is usually (but not |
235 | always) the result previous find_next_block call. |
236 `------------------------------------------------------------------------*/
239 available_space_after (union block
*pointer
)
241 return record_end
->buffer
- pointer
->buffer
;
244 /*------------------------------------------------------------------.
245 | Close file having descriptor FD, and abort if close unsucessful. |
246 `------------------------------------------------------------------*/
252 FATAL_ERROR ((0, errno
, _("Cannot close file #%d"), fd
));
255 /*-----------------------------------------------------------------------.
256 | Duplicate file descriptor FROM into becoming INTO, or else, issue |
257 | MESSAGE. INTO is closed first and has to be the next available slot. |
258 `-----------------------------------------------------------------------*/
261 xdup2 (int from
, int into
, const char *message
)
265 int status
= close (into
);
267 if (status
< 0 && errno
!= EBADF
)
268 FATAL_ERROR ((0, errno
, _("Cannot close descriptor %d"), into
));
271 FATAL_ERROR ((0, errno
, _("Cannot properly duplicate %s"), message
));
278 /*-------------------------------------------------------.
279 | Set ARCHIVE for writing, then compressing an archive. |
280 `-------------------------------------------------------*/
283 child_open_for_compress (void)
285 FATAL_ERROR ((0, 0, _("Cannot use compressed or remote archives")));
288 /*---------------------------------------------------------.
289 | Set ARCHIVE for uncompressing, then reading an archive. |
290 `---------------------------------------------------------*/
293 child_open_for_uncompress (void)
295 FATAL_ERROR ((0, 0, _("Cannot use compressed or remote archives")));
298 #else /* not MSDOS */
300 /*---------------------------------------------------------------------.
301 | Return nonzero if NAME is the name of a regular file, or if the file |
302 | does not exist (so it would be created as a regular file). |
303 `---------------------------------------------------------------------*/
306 is_regular_file (const char *name
)
310 if (stat (name
, &stbuf
) < 0)
313 if (S_ISREG (stbuf
.st_mode
))
320 write_archive_buffer (void)
325 while (0 <= (status
= rmtwrite (archive
, record_start
->buffer
+ written
,
326 record_size
- written
)))
329 if (written
== record_size
330 || _isrmt (archive
) || ! S_ISFIFO (archive_stat
.st_mode
))
334 return written
? written
: status
;
337 /*-------------------------------------------------------.
338 | Set ARCHIVE for writing, then compressing an archive. |
339 `-------------------------------------------------------*/
342 child_open_for_compress (void)
346 pid_t grandchild_pid
;
348 if (pipe (parent_pipe
) < 0)
349 FATAL_ERROR ((0, errno
, _("Cannot open pipe")));
353 FATAL_ERROR ((0, errno
, _("Cannot fork")));
357 /* The parent tar is still here! Just clean up. */
359 archive
= parent_pipe
[PWRITE
];
360 xclose (parent_pipe
[PREAD
]);
364 /* The new born child tar is here! */
366 program_name
= _("tar (child)");
368 xdup2 (parent_pipe
[PREAD
], STDIN_FILENO
, _("(child) Pipe to stdin"));
369 xclose (parent_pipe
[PWRITE
]);
371 /* Check if we need a grandchild tar. This happens only if either:
372 a) we are writing stdout: to force reblocking;
373 b) the file is to be accessed by rmt: compressor doesn't know how;
374 c) the file is not a plain file. */
376 if (strcmp (archive_name_array
[0], "-") != 0
377 && !_remdev (archive_name_array
[0])
378 && is_regular_file (archive_name_array
[0]))
381 maybe_backup_file (archive_name_array
[0], 1);
383 /* We don't need a grandchild tar. Open the archive and launch the
386 archive
= creat (archive_name_array
[0], MODE_RW
);
389 int saved_errno
= errno
;
393 FATAL_ERROR ((0, saved_errno
, _("Cannot open archive %s"),
394 archive_name_array
[0]));
396 xdup2 (archive
, STDOUT_FILENO
, _("Archive to stdout"));
397 execlp (use_compress_program_option
, use_compress_program_option
,
399 FATAL_ERROR ((0, errno
, _("Cannot exec %s"),
400 use_compress_program_option
));
403 /* We do need a grandchild tar. */
405 if (pipe (child_pipe
) < 0)
406 FATAL_ERROR ((0, errno
, _("Cannot open pipe")));
408 grandchild_pid
= fork ();
409 if (grandchild_pid
< 0)
410 FATAL_ERROR ((0, errno
, _("Child cannot fork")));
412 if (grandchild_pid
> 0)
414 /* The child tar is still here! Launch the compressor. */
416 xdup2 (child_pipe
[PWRITE
], STDOUT_FILENO
,
417 _("((child)) Pipe to stdout"));
418 xclose (child_pipe
[PREAD
]);
419 execlp (use_compress_program_option
, use_compress_program_option
,
421 FATAL_ERROR ((0, errno
, _("Cannot exec %s"),
422 use_compress_program_option
));
425 /* The new born grandchild tar is here! */
427 program_name
= _("tar (grandchild)");
429 /* Prepare for reblocking the data from the compressor into the archive. */
431 xdup2 (child_pipe
[PREAD
], STDIN_FILENO
, _("(grandchild) Pipe to stdin"));
432 xclose (child_pipe
[PWRITE
]);
434 if (strcmp (archive_name_array
[0], "-") == 0)
435 archive
= STDOUT_FILENO
;
437 archive
= rmtcreat (archive_name_array
[0], MODE_RW
, rsh_command_option
);
439 FATAL_ERROR ((0, errno
, _("Cannot open archive %s"),
440 archive_name_array
[0]));
442 /* Let's read out of the stdin pipe and write an archive. */
450 /* Assemble a record. */
452 for (length
= 0, cursor
= record_start
->buffer
;
453 length
< record_size
;
454 length
+= status
, cursor
+= status
)
456 size_t size
= record_size
- length
;
458 if (size
< BLOCKSIZE
)
460 status
= full_read (STDIN_FILENO
, cursor
, size
);
466 FATAL_ERROR ((0, errno
, _("Cannot read from compression program")));
468 /* Copy the record. */
472 /* We hit the end of the file. Write last record at
473 full length, as the only role of the grandchild is
474 doing proper reblocking. */
478 memset (record_start
->buffer
+ length
, 0, record_size
- length
);
479 status
= write_archive_buffer ();
480 if (status
!= record_size
)
481 write_error (status
);
484 /* There is nothing else to read, break out. */
488 status
= write_archive_buffer ();
489 if (status
!= record_size
)
490 write_error (status
);
499 /*---------------------------------------------------------.
500 | Set ARCHIVE for uncompressing, then reading an archive. |
501 `---------------------------------------------------------*/
504 child_open_for_uncompress (void)
508 pid_t grandchild_pid
;
510 if (pipe (parent_pipe
) < 0)
511 FATAL_ERROR ((0, errno
, _("Cannot open pipe")));
515 FATAL_ERROR ((0, errno
, _("Cannot fork")));
519 /* The parent tar is still here! Just clean up. */
521 read_full_records_option
= 1;
522 archive
= parent_pipe
[PREAD
];
523 xclose (parent_pipe
[PWRITE
]);
527 /* The new born child tar is here! */
529 program_name
= _("tar (child)");
531 xdup2 (parent_pipe
[PWRITE
], STDOUT_FILENO
, _("(child) Pipe to stdout"));
532 xclose (parent_pipe
[PREAD
]);
534 /* Check if we need a grandchild tar. This happens only if either:
535 a) we're reading stdin: to force unblocking;
536 b) the file is to be accessed by rmt: compressor doesn't know how;
537 c) the file is not a plain file. */
539 if (strcmp (archive_name_array
[0], "-") != 0
540 && !_remdev (archive_name_array
[0])
541 && is_regular_file (archive_name_array
[0]))
543 /* We don't need a grandchild tar. Open the archive and lauch the
546 archive
= open (archive_name_array
[0], O_RDONLY
| O_BINARY
, MODE_RW
);
548 FATAL_ERROR ((0, errno
, _("Cannot open archive %s"),
549 archive_name_array
[0]));
550 xdup2 (archive
, STDIN_FILENO
, _("Archive to stdin"));
551 execlp (use_compress_program_option
, use_compress_program_option
,
553 FATAL_ERROR ((0, errno
, _("Cannot exec %s"),
554 use_compress_program_option
));
557 /* We do need a grandchild tar. */
559 if (pipe (child_pipe
) < 0)
560 FATAL_ERROR ((0, errno
, _("Cannot open pipe")));
562 grandchild_pid
= fork ();
563 if (grandchild_pid
< 0)
564 FATAL_ERROR ((0, errno
, _("Child cannot fork")));
566 if (grandchild_pid
> 0)
568 /* The child tar is still here! Launch the uncompressor. */
570 xdup2 (child_pipe
[PREAD
], STDIN_FILENO
, _("((child)) Pipe to stdin"));
571 xclose (child_pipe
[PWRITE
]);
572 execlp (use_compress_program_option
, use_compress_program_option
,
574 FATAL_ERROR ((0, errno
, _("Cannot exec %s"),
575 use_compress_program_option
));
578 /* The new born grandchild tar is here! */
580 program_name
= _("tar (grandchild)");
582 /* Prepare for unblocking the data from the archive into the uncompressor. */
584 xdup2 (child_pipe
[PWRITE
], STDOUT_FILENO
, _("(grandchild) Pipe to stdout"));
585 xclose (child_pipe
[PREAD
]);
587 if (strcmp (archive_name_array
[0], "-") == 0)
588 archive
= STDIN_FILENO
;
590 archive
= rmtopen (archive_name_array
[0], O_RDONLY
| O_BINARY
,
591 MODE_RW
, rsh_command_option
);
593 FATAL_ERROR ((0, errno
, _("Cannot open archive %s"),
594 archive_name_array
[0]));
596 /* Let's read the archive and pipe it into stdout. */
605 read_error_count
= 0;
608 status
= rmtread (archive
, record_start
->buffer
, record_size
);
616 cursor
= record_start
->buffer
;
620 count
= maximum
< BLOCKSIZE
? maximum
: BLOCKSIZE
;
621 status
= full_write (STDOUT_FILENO
, cursor
, count
);
623 FATAL_ERROR ((0, errno
, _("\
624 Cannot write to compression program")));
629 Write to compression program short %lu bytes"),
630 (unsigned long) (count
- status
)));
645 #endif /* not MSDOS */
647 /*--------------------------------------------------------------------------.
648 | Check the LABEL block against the volume label, seen as a globbing |
649 | pattern. Return true if the pattern matches. In case of failure, retry |
650 | matching a volume sequence number before giving up in multi-volume mode. |
651 `--------------------------------------------------------------------------*/
654 check_label_pattern (union block
*label
)
659 if (fnmatch (volume_label_option
, label
->header
.name
, 0) == 0)
662 if (!multi_volume_option
)
665 string
= xmalloc (strlen (volume_label_option
)
666 + sizeof VOLUME_LABEL_APPEND
+ 1);
667 strcpy (string
, volume_label_option
);
668 strcat (string
, VOLUME_LABEL_APPEND
);
669 result
= fnmatch (string
, label
->header
.name
, 0) == 0;
674 /*------------------------------------------------------------------------.
675 | Open an archive file. The argument specifies whether we are reading or |
676 | writing, or both. |
677 `------------------------------------------------------------------------*/
680 open_archive (enum access_mode access
)
682 int backed_up_flag
= 0;
684 stdlis
= to_stdout_option
? stderr
: stdout
;
686 if (record_size
== 0)
687 FATAL_ERROR ((0, 0, _("Invalid value for record_size")));
689 if (archive_names
== 0)
690 FATAL_ERROR ((0, 0, _("No archive name given")));
692 current_file_name
= NULL
;
693 current_link_name
= NULL
;
695 /* FIXME: According to POSIX.1, PATH_MAX may well not be a compile-time
696 constant, and the value from sysconf (_SC_PATH_MAX) may well not be any
697 size that is reasonable to allocate a buffer. In the GNU system, there
698 is no fixed limit. The only correct thing to do is to use dynamic
699 allocation. (Roland McGrath) */
702 real_s_name
= (char *) xmalloc (PATH_MAX
);
703 /* FIXME: real_s_name is never freed. */
707 if (multi_volume_option
)
710 = (union block
*) valloc (record_size
+ (2 * BLOCKSIZE
));
715 record_start
= (union block
*) valloc (record_size
);
717 FATAL_ERROR ((0, 0, _("Could not allocate memory for blocking factor %d"),
720 current_block
= record_start
;
721 record_end
= record_start
+ blocking_factor
;
722 /* When updating the archive, we start with reading. */
723 access_mode
= access
== ACCESS_UPDATE
? ACCESS_READ
: access
;
725 if (multi_volume_option
&& verify_option
)
726 FATAL_ERROR ((0, 0, _("Cannot verify multi-volume archives")));
728 if (use_compress_program_option
)
730 if (multi_volume_option
)
731 FATAL_ERROR ((0, 0, _("Cannot use multi-volume compressed archives")));
733 FATAL_ERROR ((0, 0, _("Cannot verify compressed archives")));
738 child_open_for_uncompress ();
742 child_open_for_compress ();
746 FATAL_ERROR ((0, 0, _("Cannot update compressed archives")));
750 if (access
== ACCESS_WRITE
&& strcmp (archive_name_array
[0], "-") == 0)
753 else if (strcmp (archive_name_array
[0], "-") == 0)
755 read_full_records_option
= 1; /* could be a pipe, be safe */
757 FATAL_ERROR ((0, 0, _("Cannot verify stdin/stdout archive")));
762 archive
= STDIN_FILENO
;
766 archive
= STDOUT_FILENO
;
771 archive
= STDIN_FILENO
;
773 write_archive_to_stdout
= 1;
777 else if (verify_option
)
778 archive
= rmtopen (archive_name_array
[0], O_RDWR
| O_CREAT
| O_BINARY
,
779 MODE_RW
, rsh_command_option
);
784 archive
= rmtopen (archive_name_array
[0], O_RDONLY
| O_BINARY
,
785 MODE_RW
, rsh_command_option
);
791 maybe_backup_file (archive_name_array
[0], 1);
794 archive
= rmtcreat (archive_name_array
[0], MODE_RW
,
799 archive
= rmtopen (archive_name_array
[0], O_RDWR
| O_CREAT
| O_BINARY
,
800 MODE_RW
, rsh_command_option
);
805 || (! _isrmt (archive
) && fstat (archive
, &archive_stat
) < 0))
807 int saved_errno
= errno
;
811 FATAL_ERROR ((0, saved_errno
, _("Cannot open %s"),
812 archive_name_array
[0]));
817 /* Detect if outputting to "/dev/null". */
819 static char const dev_null
[] = "/dev/null";
820 struct stat dev_null_stat
;
823 (strcmp (archive_name_array
[0], dev_null
) == 0
824 || (! _isrmt (archive
)
825 && stat (dev_null
, &dev_null_stat
) == 0
826 && S_ISCHR (archive_stat
.st_mode
)
827 && archive_stat
.st_rdev
== dev_null_stat
.st_rdev
));
830 if (!_isrmt (archive
) && S_ISREG (archive_stat
.st_mode
))
832 ar_dev
= archive_stat
.st_dev
;
833 ar_ino
= archive_stat
.st_ino
;
838 #endif /* not MSDOS */
841 setmode (archive
, O_BINARY
);
848 record_end
= record_start
; /* set up for 1st record = # 0 */
849 find_next_block (); /* read it in, check for EOF */
851 if (volume_label_option
)
853 union block
*label
= find_next_block ();
856 FATAL_ERROR ((0, 0, _("Archive not labelled to match `%s'"),
857 volume_label_option
));
858 if (!check_label_pattern (label
))
859 FATAL_ERROR ((0, 0, _("Volume `%s' does not match `%s'"),
860 label
->header
.name
, volume_label_option
));
865 if (volume_label_option
)
867 memset ((void *) record_start
, 0, BLOCKSIZE
);
868 if (multi_volume_option
)
869 sprintf (record_start
->header
.name
, "%s Volume 1",
870 volume_label_option
);
872 strcpy (record_start
->header
.name
, volume_label_option
);
874 assign_string (¤t_file_name
, record_start
->header
.name
);
876 record_start
->header
.typeflag
= GNUTYPE_VOLHDR
;
877 TIME_TO_OCT (time (0), record_start
->header
.mtime
);
878 finish_header (record_start
);
887 /*--------------------------------------.
888 | Perform a write to flush the buffer. |
889 `--------------------------------------*/
897 if (checkpoint_option
&& !(++checkpoint
% 10))
898 WARN ((0, 0, _("Write checkpoint %d"), checkpoint
));
900 if (!zerop_tarlong (tape_length_option
)
901 && !lessp_tarlong (bytes_written
, tape_length_option
))
903 errno
= ENOSPC
; /* FIXME: errno should be read-only */
906 else if (dev_null_output
)
907 status
= record_size
;
909 status
= write_archive_buffer ();
910 if (status
!= record_size
&& !multi_volume_option
)
911 write_error (status
);
912 else if (totals_option
)
913 add_to_tarlong (total_written
, record_size
);
916 add_to_tarlong (bytes_written
, status
);
918 if (status
== record_size
)
920 if (multi_volume_option
)
926 real_s_name
[0] = '\0';
934 if (cursor
[1] == ':')
937 while (*cursor
== '/')
940 strcpy (real_s_name
, cursor
);
941 real_s_totsize
= save_totsize
;
942 real_s_sizeleft
= save_sizeleft
;
947 /* We're multivol. Panic if we didn't get the right kind of response. */
949 /* ENXIO is for the UNIX PC. */
950 if (status
< 0 && errno
!= ENOSPC
&& errno
!= EIO
&& errno
!= ENXIO
)
951 write_error (status
);
953 /* If error indicates a short write, we just move to the next tape. */
955 if (!new_volume (ACCESS_WRITE
))
958 clear_tarlong (bytes_written
);
960 if (volume_label_option
&& real_s_name
[0])
965 else if (volume_label_option
|| real_s_name
[0])
973 if (volume_label_option
)
975 memset ((void *) record_start
, 0, BLOCKSIZE
);
976 sprintf (record_start
->header
.name
, "%s Volume %d", volume_label_option
, volno
);
977 TIME_TO_OCT (time (0), record_start
->header
.mtime
);
978 record_start
->header
.typeflag
= GNUTYPE_VOLHDR
;
979 finish_header (record_start
);
986 if (volume_label_option
)
989 memset ((void *) record_start
, 0, BLOCKSIZE
);
991 /* FIXME: Michael P Urban writes: [a long name file] is being written
992 when a new volume rolls around [...] Looks like the wrong value is
993 being preserved in real_s_name, though. */
995 strcpy (record_start
->header
.name
, real_s_name
);
996 record_start
->header
.typeflag
= GNUTYPE_MULTIVOL
;
997 OFF_TO_OCT (real_s_sizeleft
, record_start
->header
.size
);
998 OFF_TO_OCT (real_s_totsize
- real_s_sizeleft
,
999 record_start
->oldgnu_header
.offset
);
1000 tmp
= verbose_option
;
1002 finish_header (record_start
);
1003 verbose_option
= tmp
;
1005 if (volume_label_option
)
1009 status
= write_archive_buffer ();
1010 if (status
!= record_size
)
1011 write_error (status
);
1012 else if (totals_option
)
1013 add_to_tarlong (total_written
, record_size
);
1015 add_to_tarlong (bytes_written
, record_size
);
1018 record_start
+= copy_back
;
1019 memcpy ((void *) current_block
,
1020 (void *) (record_start
+ blocking_factor
- copy_back
),
1021 (size_t) (copy_back
* BLOCKSIZE
));
1022 current_block
+= copy_back
;
1024 if (real_s_sizeleft
>= copy_back
* BLOCKSIZE
)
1025 real_s_sizeleft
-= copy_back
* BLOCKSIZE
;
1026 else if ((real_s_sizeleft
+ BLOCKSIZE
- 1) / BLOCKSIZE
<= copy_back
)
1027 real_s_name
[0] = '\0';
1030 char *cursor
= save_name
;
1033 if (cursor
[1] == ':')
1036 while (*cursor
== '/')
1039 strcpy (real_s_name
, cursor
);
1040 real_s_sizeleft
= save_sizeleft
;
1041 real_s_totsize
= save_totsize
;
1047 /*---------------------------------------------------------------------.
1048 | Handle write errors on the archive. Write errors are always fatal. |
1049 | Hitting the end of a volume does not cause a write error unless the |
1050 | write was the first record of the volume. |
1051 `---------------------------------------------------------------------*/
1054 write_error (ssize_t status
)
1056 int saved_errno
= errno
;
1058 /* It might be useful to know how much was written before the error
1059 occured. Beware that mere printing maybe change errno value. */
1061 print_total_written ();
1064 FATAL_ERROR ((0, saved_errno
, _("Cannot write to %s"),
1065 *archive_name_cursor
));
1067 FATAL_ERROR ((0, 0, _("Only wrote %lu of %lu bytes to %s"),
1068 (unsigned long) status
, (unsigned long) record_size
,
1069 *archive_name_cursor
));
1072 /*-------------------------------------------------------------------.
1073 | Handle read errors on the archive. If the read should be retried, |
1074 | returns to the caller. |
1075 `-------------------------------------------------------------------*/
1080 WARN ((0, errno
, _("Read error on %s"), *archive_name_cursor
));
1082 if (record_start_block
== 0)
1083 FATAL_ERROR ((0, 0, _("At beginning of tape, quitting now")));
1085 /* Read error in mid archive. We retry up to READ_ERROR_MAX times and
1086 then give up on reading the archive. */
1088 if (read_error_count
++ > READ_ERROR_MAX
)
1089 FATAL_ERROR ((0, 0, _("Too many errors, quitting")));
1093 /*-------------------------------------.
1094 | Perform a read to flush the buffer. |
1095 `-------------------------------------*/
1100 ssize_t status
; /* result from system call */
1101 size_t left
; /* bytes left */
1102 char *more
; /* pointer to next byte to read */
1104 if (checkpoint_option
&& !(++checkpoint
% 10))
1105 WARN ((0, 0, _("Read checkpoint %d"), checkpoint
));
1107 /* Clear the count of errors. This only applies to a single call to
1110 read_error_count
= 0; /* clear error count */
1112 if (write_archive_to_stdout
&& record_start_block
!= 0)
1114 status
= write_archive_buffer ();
1115 if (status
!= record_size
)
1116 write_error (status
);
1118 if (multi_volume_option
)
1121 char *cursor
= save_name
;
1124 if (cursor
[1] == ':')
1127 while (*cursor
== '/')
1130 strcpy (real_s_name
, cursor
);
1131 real_s_sizeleft
= save_sizeleft
;
1132 real_s_totsize
= save_totsize
;
1136 real_s_name
[0] = '\0';
1138 real_s_sizeleft
= 0;
1142 status
= rmtread (archive
, record_start
->buffer
, record_size
);
1143 if (status
== record_size
)
1147 || (status
< 0 && errno
== ENOSPC
)
1148 || (status
> 0 && !read_full_records_option
))
1149 && multi_volume_option
)
1151 union block
*cursor
;
1154 switch (subcommand_option
)
1156 case APPEND_SUBCOMMAND
:
1157 case CAT_SUBCOMMAND
:
1158 case UPDATE_SUBCOMMAND
:
1159 if (!new_volume (ACCESS_UPDATE
))
1164 if (!new_volume (ACCESS_READ
))
1170 status
= rmtread (archive
, record_start
->buffer
, record_size
);
1176 if (status
!= record_size
)
1179 cursor
= record_start
;
1181 if (cursor
->header
.typeflag
== GNUTYPE_VOLHDR
)
1183 if (volume_label_option
)
1185 if (!check_label_pattern (cursor
))
1187 WARN ((0, 0, _("Volume `%s' does not match `%s'"),
1188 cursor
->header
.name
, volume_label_option
));
1195 fprintf (stdlis
, _("Reading %s\n"), cursor
->header
.name
);
1198 else if (volume_label_option
)
1199 WARN ((0, 0, _("WARNING: No volume header")));
1204 if (cursor
->header
.typeflag
!= GNUTYPE_MULTIVOL
1205 || strcmp (cursor
->header
.name
, real_s_name
))
1207 WARN ((0, 0, _("%s is not continued on this volume"),
1213 s1
= UINTMAX_FROM_OCT (cursor
->header
.size
);
1214 s2
= UINTMAX_FROM_OCT (cursor
->oldgnu_header
.offset
);
1215 if (real_s_totsize
!= s1
+ s2
|| s1
+ s2
< s2
)
1217 char totsizebuf
[UINTMAX_STRSIZE_BOUND
];
1218 char s1buf
[UINTMAX_STRSIZE_BOUND
];
1219 char s2buf
[UINTMAX_STRSIZE_BOUND
];
1221 WARN ((0, 0, _("%s is the wrong size (%s != %s + %s)"),
1222 cursor
->header
.name
,
1223 STRINGIFY_BIGINT (save_totsize
, totsizebuf
),
1224 STRINGIFY_BIGINT (s1
, s1buf
),
1225 STRINGIFY_BIGINT (s2
, s2buf
)));
1230 if (real_s_totsize
- real_s_sizeleft
1231 != OFF_FROM_OCT (cursor
->oldgnu_header
.offset
))
1233 WARN ((0, 0, _("This volume is out of sequence")));
1240 current_block
= cursor
;
1243 else if (status
< 0)
1246 goto error_loop
; /* try again */
1250 more
= record_start
->buffer
+ status
;
1251 left
= record_size
- status
;
1254 if (left
% BLOCKSIZE
== 0)
1256 /* FIXME: for size=0, multi-volume support. On the first record, warn
1257 about the problem. */
1259 if (!read_full_records_option
&& verbose_option
1260 && record_start_block
== 0 && status
> 0)
1261 WARN ((0, 0, _("Record size = %lu blocks"),
1262 (unsigned long) (status
/ BLOCKSIZE
)));
1264 record_end
= record_start
+ (record_size
- left
) / BLOCKSIZE
;
1268 if (read_full_records_option
)
1270 /* User warned us about this. Fix up. */
1275 status
= rmtread (archive
, more
, left
);
1279 goto error2loop
; /* try again */
1282 FATAL_ERROR ((0, 0, _("Archive %s EOF not on block boundary"),
1283 *archive_name_cursor
));
1290 FATAL_ERROR ((0, 0, _("Only read %lu bytes from archive %s"),
1291 (unsigned long) status
, *archive_name_cursor
));
1294 /*-----------------------------------------------.
1295 | Flush the current buffer to/from the archive. |
1296 `-----------------------------------------------*/
1299 flush_archive (void)
1301 record_start_block
+= record_end
- record_start
;
1302 current_block
= record_start
;
1303 record_end
= record_start
+ blocking_factor
;
1305 if (access_mode
== ACCESS_READ
&& time_to_start_writing
)
1307 access_mode
= ACCESS_WRITE
;
1308 time_to_start_writing
= 0;
1310 if (file_to_switch_to
>= 0)
1312 int status
= rmtclose (archive
);
1315 WARN ((0, errno
, _("WARNING: Cannot close %s (%d, %d)"),
1316 *archive_name_cursor
, archive
, status
));
1318 archive
= file_to_switch_to
;
1321 backspace_output ();
1324 switch (access_mode
)
1339 /*-------------------------------------------------------------------------.
1340 | Backspace the archive descriptor by one record worth. If its a tape, |
1341 | MTIOCTOP will work. If its something else, we try to seek on it. If we |
1342 | can't seek, we lose! |
1343 `-------------------------------------------------------------------------*/
1346 backspace_output (void)
1350 struct mtop operation
;
1352 operation
.mt_op
= MTBSR
;
1353 operation
.mt_count
= 1;
1354 if (rmtioctl (archive
, MTIOCTOP
, (char *) &operation
) >= 0)
1356 if (errno
== EIO
&& rmtioctl (archive
, MTIOCTOP
, (char *) &operation
) >= 0)
1362 off_t position
= rmtlseek (archive
, (off_t
) 0, SEEK_CUR
);
1364 /* Seek back to the beginning of this record and start writing there. */
1366 position
-= record_size
;
1367 if (rmtlseek (archive
, position
, SEEK_SET
) != position
)
1369 /* Lseek failed. Try a different method. */
1372 Could not backspace archive file; it may be unreadable without -i")));
1374 /* Replace the first part of the record with NULs. */
1376 if (record_start
->buffer
!= output_start
)
1377 memset (record_start
->buffer
, 0,
1378 (size_t) (output_start
- record_start
->buffer
));
1383 /*-------------------------.
1384 | Close the archive file. |
1385 `-------------------------*/
1388 close_archive (void)
1390 if (time_to_start_writing
|| access_mode
== ACCESS_WRITE
)
1395 /* Manage to fully drain a pipe we might be reading, so to not break it on
1396 the producer after the EOF block. FIXME: one of these days, GNU tar
1397 might become clever enough to just stop working, once there is no more
1398 work to do, we might have to revise this area in such time. */
1400 if (access_mode
== ACCESS_READ
1401 && ! _isrmt (archive
)
1402 && S_ISFIFO (archive_stat
.st_mode
))
1403 while (rmtread (archive
, record_start
->buffer
, record_size
) > 0)
1407 if (! _isrmt (archive
) && subcommand_option
== DELETE_SUBCOMMAND
)
1410 int status
= write (archive
, "", 0);
1412 off_t pos
= lseek (archive
, (off_t
) 0, SEEK_CUR
);
1413 int status
= pos
< 0 ? -1 : ftruncate (archive
, pos
);
1416 WARN ((0, errno
, _("WARNING: Cannot truncate %s"),
1417 *archive_name_cursor
));
1423 int status
= rmtclose (archive
);
1426 WARN ((0, errno
, _("WARNING: Cannot close %s (%d, %d)"),
1427 *archive_name_cursor
, archive
, status
));
1437 /* Loop waiting for the right child to die, or for no more kids. */
1439 while ((child
= wait (&wait_status
), child
!= child_pid
)
1444 if (WIFSIGNALED (wait_status
)
1446 && !WIFSTOPPED (wait_status
)
1450 /* SIGPIPE is OK, everything else is a problem. */
1452 if (WTERMSIG (wait_status
) != SIGPIPE
)
1453 ERROR ((0, 0, _("Child died with signal %d%s"),
1454 WTERMSIG (wait_status
),
1455 WCOREDUMP (wait_status
) ? _(" (core dumped)") : ""));
1459 /* Child voluntarily terminated -- but why? /bin/sh returns
1460 SIGPIPE + 128 if its child, then do nothing. */
1462 if (WEXITSTATUS (wait_status
) != (SIGPIPE
+ 128)
1463 && WEXITSTATUS (wait_status
))
1464 ERROR ((0, 0, _("Child returned status %d"),
1465 WEXITSTATUS (wait_status
)));
1470 if (current_file_name
)
1471 free (current_file_name
);
1472 if (current_link_name
)
1473 free (current_link_name
);
1476 free (multi_volume_option
? record_start
- 2 : record_start
);
1479 /*------------------------------------------------.
1480 | Called to initialize the global volume number. |
1481 `------------------------------------------------*/
1484 init_volume_number (void)
1486 FILE *file
= fopen (volno_file_option
, "r");
1490 fscanf (file
, "%d", &global_volno
);
1491 if (fclose (file
) == EOF
)
1492 ERROR ((0, errno
, "%s", volno_file_option
));
1494 else if (errno
!= ENOENT
)
1495 ERROR ((0, errno
, "%s", volno_file_option
));
1498 /*-------------------------------------------------------.
1499 | Called to write out the closing global volume number. |
1500 `-------------------------------------------------------*/
1503 closeout_volume_number (void)
1505 FILE *file
= fopen (volno_file_option
, "w");
1509 fprintf (file
, "%d\n", global_volno
);
1510 if (fclose (file
) == EOF
)
1511 ERROR ((0, errno
, "%s", volno_file_option
));
1514 ERROR ((0, errno
, "%s", volno_file_option
));
1517 /*-----------------------------------------------------------------------.
1518 | We've hit the end of the old volume. Close it and open the next one. |
1519 | Return nonzero on success. |
1520 `-----------------------------------------------------------------------*/
1523 new_volume (enum access_mode access
)
1525 static FILE *read_file
= NULL
;
1526 static int looped
= 0;
1530 if (!read_file
&& !info_script_option
)
1531 /* FIXME: if fopen is used, it will never be closed. */
1532 read_file
= archive
== STDIN_FILENO
? fopen (TTY_NAME
, "r") : stdin
;
1539 if (status
= rmtclose (archive
), status
< 0)
1540 WARN ((0, errno
, _("WARNING: Cannot close %s (%d, %d)"),
1541 *archive_name_cursor
, archive
, status
));
1545 archive_name_cursor
++;
1546 if (archive_name_cursor
== archive_name_array
+ archive_names
)
1548 archive_name_cursor
= archive_name_array
;
1555 /* We have to prompt from now on. */
1557 if (info_script_option
)
1559 if (volno_file_option
)
1560 closeout_volume_number ();
1561 system (info_script_option
);
1566 char input_buffer
[80];
1568 fputc ('\007', stderr
);
1570 _("Prepare volume #%d for %s and hit return: "),
1571 global_volno
, *archive_name_cursor
);
1574 if (fgets (input_buffer
, sizeof (input_buffer
), read_file
) == 0)
1576 fprintf (stderr
, _("EOF where user reply was expected"));
1578 if (subcommand_option
!= EXTRACT_SUBCOMMAND
1579 && subcommand_option
!= LIST_SUBCOMMAND
1580 && subcommand_option
!= DIFF_SUBCOMMAND
)
1581 WARN ((0, 0, _("WARNING: Archive is incomplete")));
1583 exit (TAREXIT_FAILURE
);
1585 if (input_buffer
[0] == '\n'
1586 || input_buffer
[0] == 'y'
1587 || input_buffer
[0] == 'Y')
1590 switch (input_buffer
[0])
1594 fprintf (stderr
, _("\
1595 n [name] Give a new file name for the next (and subsequent) volume(s)\n\
1597 ! Spawn a subshell\n\
1598 ? Print this list\n"));
1605 fprintf (stdlis
, _("No new volume; exiting.\n"));
1607 if (subcommand_option
!= EXTRACT_SUBCOMMAND
1608 && subcommand_option
!= LIST_SUBCOMMAND
1609 && subcommand_option
!= DIFF_SUBCOMMAND
)
1610 WARN ((0, 0, _("WARNING: Archive is incomplete")));
1612 exit (TAREXIT_FAILURE
);
1615 /* Get new file name. */
1618 char *name
= &input_buffer
[1];
1621 while (*name
== ' ' || *name
== '\t')
1624 while (*cursor
&& *cursor
!= '\n')
1628 /* FIXME: the following allocation is never reclaimed. */
1629 *archive_name_cursor
= xstrdup (name
);
1635 spawnl (P_WAIT
, getenv ("COMSPEC"), "-", 0);
1636 #else /* not MSDOS */
1640 WARN ((0, errno
, _("Cannot fork!")));
1645 const char *shell
= getenv ("SHELL");
1649 execlp (shell
, "-sh", "-i", 0);
1650 FATAL_ERROR ((0, errno
, _("Cannot exec a shell %s"),
1658 wait (&wait_status
);
1663 /* FIXME: I'm not sure if that's all that has to be done
1666 #endif /* not MSDOS */
1673 archive
= rmtopen (*archive_name_cursor
, O_RDWR
| O_CREAT
, MODE_RW
,
1674 rsh_command_option
);
1679 archive
= rmtopen (*archive_name_cursor
, O_RDONLY
, MODE_RW
,
1680 rsh_command_option
);
1685 maybe_backup_file (*archive_name_cursor
, 1);
1686 archive
= rmtcreat (*archive_name_cursor
, MODE_RW
,
1687 rsh_command_option
);
1691 archive
= rmtopen (*archive_name_cursor
, O_RDWR
| O_CREAT
, MODE_RW
,
1692 rsh_command_option
);
1698 WARN ((0, errno
, _("Cannot open %s"), *archive_name_cursor
));
1699 if (!verify_option
&& access
== ACCESS_WRITE
&& backup_option
)
1700 undo_last_backup ();
1705 setmode (archive
, O_BINARY
);