Import upstream version 1.26
[debian/tar] / src / create.c
1 /* Create a tar archive.
2
3    Copyright (C) 1985, 1992, 1993, 1994, 1996, 1997, 1999, 2000, 2001,
4    2003, 2004, 2005, 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
5
6    Written by John Gilmore, on 1985-08-25.
7
8    This program is free software; you can redistribute it and/or modify it
9    under the terms of the GNU General Public License as published by the
10    Free Software Foundation; either version 3, or (at your option) any later
11    version.
12
13    This program is distributed in the hope that it will be useful, but
14    WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
16    Public License for more details.
17
18    You should have received a copy of the GNU General Public License along
19    with this program; if not, write to the Free Software Foundation, Inc.,
20    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
21
22 #include <system.h>
23
24 #include <quotearg.h>
25
26 #include "common.h"
27 #include <hash.h>
28
29 /* Error number to use when an impostor is discovered.
30    Pretend the impostor isn't there.  */
31 enum { IMPOSTOR_ERRNO = ENOENT };
32
33 struct link
34   {
35     dev_t dev;
36     ino_t ino;
37     nlink_t nlink;
38     char name[1];
39   };
40
41 struct exclusion_tag
42 {
43   const char *name;
44   size_t length;
45   enum exclusion_tag_type type;
46   bool (*predicate) (int fd);
47   struct exclusion_tag *next;
48 };
49
50 static struct exclusion_tag *exclusion_tags;
51
52 void
53 add_exclusion_tag (const char *name, enum exclusion_tag_type type,
54                    bool (*predicate) (int fd))
55 {
56   struct exclusion_tag *tag = xmalloc (sizeof tag[0]);
57   tag->next = exclusion_tags;
58   tag->name = name;
59   tag->type = type;
60   tag->predicate = predicate;
61   tag->length = strlen (name);
62   exclusion_tags = tag;
63 }
64
65 void
66 exclusion_tag_warning (const char *dirname, const char *tagname,
67                        const char *message)
68 {
69   if (verbose_option)
70     WARNOPT (WARN_CACHEDIR,
71              (0, 0,
72               _("%s: contains a cache directory tag %s; %s"),
73               quotearg_colon (dirname),
74               quotearg_n (1, tagname),
75               message));
76 }
77
78 enum exclusion_tag_type
79 check_exclusion_tags (struct tar_stat_info const *st, char const **tag_file_name)
80 {
81   struct exclusion_tag *tag;
82
83   for (tag = exclusion_tags; tag; tag = tag->next)
84     {
85       int tagfd = subfile_open (st, tag->name, open_read_flags);
86       if (0 <= tagfd)
87         {
88           bool satisfied = !tag->predicate || tag->predicate (tagfd);
89           close (tagfd);
90           if (satisfied)
91             {
92               if (tag_file_name)
93                 *tag_file_name = tag->name;
94               return tag->type;
95             }
96         }
97     }
98
99   return exclusion_tag_none;
100 }
101
102 /* Exclusion predicate to test if the named file (usually "CACHEDIR.TAG")
103    contains a valid header, as described at:
104         http://www.brynosaurus.com/cachedir
105    Applications can write this file into directories they create
106    for use as caches containing purely regenerable, non-precious data,
107    allowing us to avoid archiving them if --exclude-caches is specified. */
108
109 #define CACHEDIR_SIGNATURE "Signature: 8a477f597d28d172789f06886806bc55"
110 #define CACHEDIR_SIGNATURE_SIZE (sizeof CACHEDIR_SIGNATURE - 1)
111
112 bool
113 cachedir_file_p (int fd)
114 {
115   char tagbuf[CACHEDIR_SIGNATURE_SIZE];
116
117   return
118     (read (fd, tagbuf, CACHEDIR_SIGNATURE_SIZE) == CACHEDIR_SIGNATURE_SIZE
119      && memcmp (tagbuf, CACHEDIR_SIGNATURE, CACHEDIR_SIGNATURE_SIZE) == 0);
120 }
121
122 \f
123 /* The maximum uintmax_t value that can be represented with DIGITS digits,
124    assuming that each digit is BITS_PER_DIGIT wide.  */
125 #define MAX_VAL_WITH_DIGITS(digits, bits_per_digit) \
126    ((digits) * (bits_per_digit) < sizeof (uintmax_t) * CHAR_BIT \
127     ? ((uintmax_t) 1 << ((digits) * (bits_per_digit))) - 1 \
128     : (uintmax_t) -1)
129
130 /* The maximum uintmax_t value that can be represented with octal
131    digits and a trailing NUL in BUFFER.  */
132 #define MAX_OCTAL_VAL(buffer) MAX_VAL_WITH_DIGITS (sizeof (buffer) - 1, LG_8)
133
134 /* Convert VALUE to an octal representation suitable for tar headers.
135    Output to buffer WHERE with size SIZE.
136    The result is undefined if SIZE is 0 or if VALUE is too large to fit.  */
137
138 static void
139 to_octal (uintmax_t value, char *where, size_t size)
140 {
141   uintmax_t v = value;
142   size_t i = size;
143
144   do
145     {
146       where[--i] = '0' + (v & ((1 << LG_8) - 1));
147       v >>= LG_8;
148     }
149   while (i);
150 }
151
152 /* Copy at most LEN bytes from the string SRC to DST.  Terminate with
153    NUL unless SRC is LEN or more bytes long.  */
154
155 static void
156 tar_copy_str (char *dst, const char *src, size_t len)
157 {
158   size_t i;
159   for (i = 0; i < len; i++)
160     if (! (dst[i] = src[i]))
161       break;
162 }
163
164 /* Same as tar_copy_str, but always terminate with NUL if using
165    is OLDGNU format */
166
167 static void
168 tar_name_copy_str (char *dst, const char *src, size_t len)
169 {
170   tar_copy_str (dst, src, len);
171   if (archive_format == OLDGNU_FORMAT)
172     dst[len-1] = 0;
173 }
174
175 /* Convert NEGATIVE VALUE to a base-256 representation suitable for
176    tar headers.  NEGATIVE is 1 if VALUE was negative before being cast
177    to uintmax_t, 0 otherwise.  Output to buffer WHERE with size SIZE.
178    The result is undefined if SIZE is 0 or if VALUE is too large to
179    fit.  */
180
181 static void
182 to_base256 (int negative, uintmax_t value, char *where, size_t size)
183 {
184   uintmax_t v = value;
185   uintmax_t propagated_sign_bits =
186     ((uintmax_t) - negative << (CHAR_BIT * sizeof v - LG_256));
187   size_t i = size;
188
189   do
190     {
191       where[--i] = v & ((1 << LG_256) - 1);
192       v = propagated_sign_bits | (v >> LG_256);
193     }
194   while (i);
195 }
196
197 #define GID_TO_CHARS(val, where) gid_to_chars (val, where, sizeof (where))
198 #define MAJOR_TO_CHARS(val, where) major_to_chars (val, where, sizeof (where))
199 #define MINOR_TO_CHARS(val, where) minor_to_chars (val, where, sizeof (where))
200 #define MODE_TO_CHARS(val, where) mode_to_chars (val, where, sizeof (where))
201 #define UID_TO_CHARS(val, where) uid_to_chars (val, where, sizeof (where))
202
203 #define UNAME_TO_CHARS(name,buf) string_to_chars (name, buf, sizeof(buf))
204 #define GNAME_TO_CHARS(name,buf) string_to_chars (name, buf, sizeof(buf))
205
206 static bool
207 to_chars (int negative, uintmax_t value, size_t valsize,
208           uintmax_t (*substitute) (int *),
209           char *where, size_t size, const char *type);
210
211 static bool
212 to_chars_subst (int negative, int gnu_format, uintmax_t value, size_t valsize,
213                 uintmax_t (*substitute) (int *),
214                 char *where, size_t size, const char *type)
215 {
216   uintmax_t maxval = (gnu_format
217                       ? MAX_VAL_WITH_DIGITS (size - 1, LG_256)
218                       : MAX_VAL_WITH_DIGITS (size - 1, LG_8));
219   char valbuf[UINTMAX_STRSIZE_BOUND + 1];
220   char maxbuf[UINTMAX_STRSIZE_BOUND];
221   char minbuf[UINTMAX_STRSIZE_BOUND + 1];
222   char const *minval_string;
223   char const *maxval_string = STRINGIFY_BIGINT (maxval, maxbuf);
224   char const *value_string;
225
226   if (gnu_format)
227     {
228       uintmax_t m = maxval + 1 ? maxval + 1 : maxval / 2 + 1;
229       char *p = STRINGIFY_BIGINT (m, minbuf + 1);
230       *--p = '-';
231       minval_string = p;
232     }
233   else
234     minval_string = "0";
235
236   if (negative)
237     {
238       char *p = STRINGIFY_BIGINT (- value, valbuf + 1);
239       *--p = '-';
240       value_string = p;
241     }
242   else
243     value_string = STRINGIFY_BIGINT (value, valbuf);
244
245   if (substitute)
246     {
247       int negsub;
248       uintmax_t sub = substitute (&negsub) & maxval;
249       /* NOTE: This is one of the few places where GNU_FORMAT differs from
250          OLDGNU_FORMAT.  The actual differences are:
251
252          1. In OLDGNU_FORMAT all strings in a tar header end in \0
253          2. Incremental archives use oldgnu_header.
254
255          Apart from this they are completely identical. */
256       uintmax_t s = (negsub &= archive_format == GNU_FORMAT) ? - sub : sub;
257       char subbuf[UINTMAX_STRSIZE_BOUND + 1];
258       char *sub_string = STRINGIFY_BIGINT (s, subbuf + 1);
259       if (negsub)
260         *--sub_string = '-';
261       WARN ((0, 0, _("value %s out of %s range %s..%s; substituting %s"),
262              value_string, type, minval_string, maxval_string,
263              sub_string));
264       return to_chars (negsub, s, valsize, 0, where, size, type);
265     }
266   else
267     ERROR ((0, 0, _("value %s out of %s range %s..%s"),
268             value_string, type, minval_string, maxval_string));
269   return false;
270 }
271
272 /* Convert NEGATIVE VALUE (which was originally of size VALSIZE) to
273    external form, using SUBSTITUTE (...) if VALUE won't fit.  Output
274    to buffer WHERE with size SIZE.  NEGATIVE is 1 iff VALUE was
275    negative before being cast to uintmax_t; its original bitpattern
276    can be deduced from VALSIZE, its original size before casting.
277    TYPE is the kind of value being output (useful for diagnostics).
278    Prefer the POSIX format of SIZE - 1 octal digits (with leading zero
279    digits), followed by '\0'.  If this won't work, and if GNU or
280    OLDGNU format is allowed, use '\200' followed by base-256, or (if
281    NEGATIVE is nonzero) '\377' followed by two's complement base-256.
282    If neither format works, use SUBSTITUTE (...)  instead.  Pass to
283    SUBSTITUTE the address of an 0-or-1 flag recording whether the
284    substitute value is negative.  */
285
286 static bool
287 to_chars (int negative, uintmax_t value, size_t valsize,
288           uintmax_t (*substitute) (int *),
289           char *where, size_t size, const char *type)
290 {
291   int gnu_format = (archive_format == GNU_FORMAT
292                     || archive_format == OLDGNU_FORMAT);
293
294   /* Generate the POSIX octal representation if the number fits.  */
295   if (! negative && value <= MAX_VAL_WITH_DIGITS (size - 1, LG_8))
296     {
297       where[size - 1] = '\0';
298       to_octal (value, where, size - 1);
299       return true;
300     }
301   else if (gnu_format)
302     {
303       /* Try to cope with the number by using traditional GNU format
304          methods */
305
306       /* Generate the base-256 representation if the number fits.  */
307       if (((negative ? -1 - value : value)
308            <= MAX_VAL_WITH_DIGITS (size - 1, LG_256)))
309         {
310           where[0] = negative ? -1 : 1 << (LG_256 - 1);
311           to_base256 (negative, value, where + 1, size - 1);
312           return true;
313         }
314
315       /* Otherwise, if the number is negative, and if it would not cause
316          ambiguity on this host by confusing positive with negative
317          values, then generate the POSIX octal representation of the value
318          modulo 2**(field bits).  The resulting tar file is
319          machine-dependent, since it depends on the host word size.  Yuck!
320          But this is the traditional behavior.  */
321       else if (negative && valsize * CHAR_BIT <= (size - 1) * LG_8)
322         {
323           static int warned_once;
324           if (! warned_once)
325             {
326               warned_once = 1;
327               WARN ((0, 0, _("Generating negative octal headers")));
328             }
329           where[size - 1] = '\0';
330           to_octal (value & MAX_VAL_WITH_DIGITS (valsize * CHAR_BIT, 1),
331                     where, size - 1);
332           return true;
333         }
334       /* Otherwise fall back to substitution, if possible: */
335     }
336   else
337     substitute = NULL; /* No substitution for formats, other than GNU */
338
339   return to_chars_subst (negative, gnu_format, value, valsize, substitute,
340                          where, size, type);
341 }
342
343 static uintmax_t
344 gid_substitute (int *negative)
345 {
346   gid_t r;
347 #ifdef GID_NOBODY
348   r = GID_NOBODY;
349 #else
350   static gid_t gid_nobody;
351   if (!gid_nobody && !gname_to_gid ("nobody", &gid_nobody))
352     gid_nobody = -2;
353   r = gid_nobody;
354 #endif
355   *negative = r < 0;
356   return r;
357 }
358
359 static bool
360 gid_to_chars (gid_t v, char *p, size_t s)
361 {
362   return to_chars (v < 0, (uintmax_t) v, sizeof v, gid_substitute, p, s, "gid_t");
363 }
364
365 static bool
366 major_to_chars (major_t v, char *p, size_t s)
367 {
368   return to_chars (v < 0, (uintmax_t) v, sizeof v, 0, p, s, "major_t");
369 }
370
371 static bool
372 minor_to_chars (minor_t v, char *p, size_t s)
373 {
374   return to_chars (v < 0, (uintmax_t) v, sizeof v, 0, p, s, "minor_t");
375 }
376
377 static bool
378 mode_to_chars (mode_t v, char *p, size_t s)
379 {
380   /* In the common case where the internal and external mode bits are the same,
381      and we are not using POSIX or GNU format,
382      propagate all unknown bits to the external mode.
383      This matches historical practice.
384      Otherwise, just copy the bits we know about.  */
385   int negative;
386   uintmax_t u;
387   if (S_ISUID == TSUID && S_ISGID == TSGID && S_ISVTX == TSVTX
388       && S_IRUSR == TUREAD && S_IWUSR == TUWRITE && S_IXUSR == TUEXEC
389       && S_IRGRP == TGREAD && S_IWGRP == TGWRITE && S_IXGRP == TGEXEC
390       && S_IROTH == TOREAD && S_IWOTH == TOWRITE && S_IXOTH == TOEXEC
391       && archive_format != POSIX_FORMAT
392       && archive_format != USTAR_FORMAT
393       && archive_format != GNU_FORMAT)
394     {
395       negative = v < 0;
396       u = v;
397     }
398   else
399     {
400       negative = 0;
401       u = ((v & S_ISUID ? TSUID : 0)
402            | (v & S_ISGID ? TSGID : 0)
403            | (v & S_ISVTX ? TSVTX : 0)
404            | (v & S_IRUSR ? TUREAD : 0)
405            | (v & S_IWUSR ? TUWRITE : 0)
406            | (v & S_IXUSR ? TUEXEC : 0)
407            | (v & S_IRGRP ? TGREAD : 0)
408            | (v & S_IWGRP ? TGWRITE : 0)
409            | (v & S_IXGRP ? TGEXEC : 0)
410            | (v & S_IROTH ? TOREAD : 0)
411            | (v & S_IWOTH ? TOWRITE : 0)
412            | (v & S_IXOTH ? TOEXEC : 0));
413     }
414   return to_chars (negative, u, sizeof v, 0, p, s, "mode_t");
415 }
416
417 bool
418 off_to_chars (off_t v, char *p, size_t s)
419 {
420   return to_chars (v < 0, (uintmax_t) v, sizeof v, 0, p, s, "off_t");
421 }
422
423 bool
424 time_to_chars (time_t v, char *p, size_t s)
425 {
426   return to_chars (v < 0, (uintmax_t) v, sizeof v, 0, p, s, "time_t");
427 }
428
429 static uintmax_t
430 uid_substitute (int *negative)
431 {
432   uid_t r;
433 #ifdef UID_NOBODY
434   r = UID_NOBODY;
435 #else
436   static uid_t uid_nobody;
437   if (!uid_nobody && !uname_to_uid ("nobody", &uid_nobody))
438     uid_nobody = -2;
439   r = uid_nobody;
440 #endif
441   *negative = r < 0;
442   return r;
443 }
444
445 static bool
446 uid_to_chars (uid_t v, char *p, size_t s)
447 {
448   return to_chars (v < 0, (uintmax_t) v, sizeof v, uid_substitute, p, s, "uid_t");
449 }
450
451 static bool
452 uintmax_to_chars (uintmax_t v, char *p, size_t s)
453 {
454   return to_chars (0, v, sizeof v, 0, p, s, "uintmax_t");
455 }
456
457 static void
458 string_to_chars (char const *str, char *p, size_t s)
459 {
460   tar_copy_str (p, str, s);
461   p[s - 1] = '\0';
462 }
463
464 \f
465 /* A directory is always considered dumpable.
466    Otherwise, only regular and contiguous files are considered dumpable.
467    Such a file is dumpable if it is sparse and both --sparse and --totals
468    are specified.
469    Otherwise, it is dumpable unless any of the following conditions occur:
470
471    a) it is empty *and* world-readable, or
472    b) current archive is /dev/null */
473
474 static bool
475 file_dumpable_p (struct stat const *st)
476 {
477   if (S_ISDIR (st->st_mode))
478     return true;
479   if (! (S_ISREG (st->st_mode) || S_ISCTG (st->st_mode)))
480     return false;
481   if (dev_null_output)
482     return totals_option && sparse_option && ST_IS_SPARSE (*st);
483   return ! (st->st_size == 0 && (st->st_mode & MODE_R) == MODE_R);
484 }
485
486 \f
487 /* Writing routines.  */
488
489 /* Write the EOT block(s).  Zero at least two blocks, through the end
490    of the record.  Old tar, as previous versions of GNU tar, writes
491    garbage after two zeroed blocks.  */
492 void
493 write_eot (void)
494 {
495   union block *pointer = find_next_block ();
496   memset (pointer->buffer, 0, BLOCKSIZE);
497   set_next_block_after (pointer);
498   pointer = find_next_block ();
499   memset (pointer->buffer, 0, available_space_after (pointer));
500   set_next_block_after (pointer);
501 }
502
503 /* Write a "private" header */
504 union block *
505 start_private_header (const char *name, size_t size, time_t t)
506 {
507   union block *header = find_next_block ();
508
509   memset (header->buffer, 0, sizeof (union block));
510
511   tar_name_copy_str (header->header.name, name, NAME_FIELD_SIZE);
512   OFF_TO_CHARS (size, header->header.size);
513
514   TIME_TO_CHARS (t, header->header.mtime);
515   MODE_TO_CHARS (S_IFREG|S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, header->header.mode);
516   UID_TO_CHARS (getuid (), header->header.uid);
517   GID_TO_CHARS (getgid (), header->header.gid);
518   MAJOR_TO_CHARS (0, header->header.devmajor);
519   MINOR_TO_CHARS (0, header->header.devminor);
520   strncpy (header->header.magic, TMAGIC, TMAGLEN);
521   strncpy (header->header.version, TVERSION, TVERSLEN);
522   return header;
523 }
524
525 /* Create a new header and store there at most NAME_FIELD_SIZE bytes of
526    the file name */
527
528 static union block *
529 write_short_name (struct tar_stat_info *st)
530 {
531   union block *header = find_next_block ();
532   memset (header->buffer, 0, sizeof (union block));
533   tar_name_copy_str (header->header.name, st->file_name, NAME_FIELD_SIZE);
534   return header;
535 }
536
537 #define FILL(field,byte) do {            \
538   memset(field, byte, sizeof(field)-1);  \
539   (field)[sizeof(field)-1] = 0;          \
540 } while (0)
541
542 /* Write a GNUTYPE_LONGLINK or GNUTYPE_LONGNAME block.  */
543 static void
544 write_gnu_long_link (struct tar_stat_info *st, const char *p, char type)
545 {
546   size_t size = strlen (p) + 1;
547   size_t bufsize;
548   union block *header;
549   char *tmpname;
550
551   header = start_private_header ("././@LongLink", size, time (NULL));
552   FILL (header->header.mtime, '0');
553   FILL (header->header.mode, '0');
554   FILL (header->header.uid, '0');
555   FILL (header->header.gid, '0');
556   FILL (header->header.devmajor, 0);
557   FILL (header->header.devminor, 0);
558   uid_to_uname (0, &tmpname);
559   UNAME_TO_CHARS (tmpname, header->header.uname);
560   free (tmpname);
561   gid_to_gname (0, &tmpname);
562   GNAME_TO_CHARS (tmpname, header->header.gname);
563   free (tmpname);
564
565   strcpy (header->buffer + offsetof (struct posix_header, magic),
566           OLDGNU_MAGIC);
567   header->header.typeflag = type;
568   finish_header (st, header, -1);
569
570   header = find_next_block ();
571
572   bufsize = available_space_after (header);
573
574   while (bufsize < size)
575     {
576       memcpy (header->buffer, p, bufsize);
577       p += bufsize;
578       size -= bufsize;
579       set_next_block_after (header + (bufsize - 1) / BLOCKSIZE);
580       header = find_next_block ();
581       bufsize = available_space_after (header);
582     }
583   memcpy (header->buffer, p, size);
584   memset (header->buffer + size, 0, bufsize - size);
585   set_next_block_after (header + (size - 1) / BLOCKSIZE);
586 }
587
588 static size_t
589 split_long_name (const char *name, size_t length)
590 {
591   size_t i;
592
593   if (length > PREFIX_FIELD_SIZE + 1)
594     length = PREFIX_FIELD_SIZE + 1;
595   else if (ISSLASH (name[length - 1]))
596     length--;
597   for (i = length - 1; i > 0; i--)
598     if (ISSLASH (name[i]))
599       break;
600   return i;
601 }
602
603 static union block *
604 write_ustar_long_name (const char *name)
605 {
606   size_t length = strlen (name);
607   size_t i, nlen;
608   union block *header;
609
610   if (length > PREFIX_FIELD_SIZE + NAME_FIELD_SIZE + 1)
611     {
612       ERROR ((0, 0, _("%s: file name is too long (max %d); not dumped"),
613               quotearg_colon (name),
614               PREFIX_FIELD_SIZE + NAME_FIELD_SIZE + 1));
615       return NULL;
616     }
617
618   i = split_long_name (name, length);
619   if (i == 0 || (nlen = length - i - 1) > NAME_FIELD_SIZE || nlen == 0)
620     {
621       ERROR ((0, 0,
622               _("%s: file name is too long (cannot be split); not dumped"),
623               quotearg_colon (name)));
624       return NULL;
625     }
626
627   header = find_next_block ();
628   memset (header->buffer, 0, sizeof (header->buffer));
629   memcpy (header->header.prefix, name, i);
630   memcpy (header->header.name, name + i + 1, length - i - 1);
631
632   return header;
633 }
634
635 /* Write a long link name, depending on the current archive format */
636 static void
637 write_long_link (struct tar_stat_info *st)
638 {
639   switch (archive_format)
640     {
641     case POSIX_FORMAT:
642       xheader_store ("linkpath", st, NULL);
643       break;
644
645     case V7_FORMAT:                     /* old V7 tar format */
646     case USTAR_FORMAT:
647     case STAR_FORMAT:
648       ERROR ((0, 0,
649               _("%s: link name is too long; not dumped"),
650               quotearg_colon (st->link_name)));
651       break;
652
653     case OLDGNU_FORMAT:
654     case GNU_FORMAT:
655       write_gnu_long_link (st, st->link_name, GNUTYPE_LONGLINK);
656       break;
657
658     default:
659       abort(); /*FIXME*/
660     }
661 }
662
663 static union block *
664 write_long_name (struct tar_stat_info *st)
665 {
666   switch (archive_format)
667     {
668     case POSIX_FORMAT:
669       xheader_store ("path", st, NULL);
670       break;
671
672     case V7_FORMAT:
673       if (strlen (st->file_name) > NAME_FIELD_SIZE-1)
674         {
675           ERROR ((0, 0, _("%s: file name is too long (max %d); not dumped"),
676                   quotearg_colon (st->file_name),
677                   NAME_FIELD_SIZE - 1));
678           return NULL;
679         }
680       break;
681
682     case USTAR_FORMAT:
683     case STAR_FORMAT:
684       return write_ustar_long_name (st->file_name);
685
686     case OLDGNU_FORMAT:
687     case GNU_FORMAT:
688       write_gnu_long_link (st, st->file_name, GNUTYPE_LONGNAME);
689       break;
690
691     default:
692       abort(); /*FIXME*/
693     }
694   return write_short_name (st);
695 }
696
697 union block *
698 write_extended (bool global, struct tar_stat_info *st, union block *old_header)
699 {
700   union block *header, hp;
701   char *p;
702   int type;
703   time_t t;
704
705   if (st->xhdr.buffer || st->xhdr.stk == NULL)
706     return old_header;
707
708   xheader_finish (&st->xhdr);
709   memcpy (hp.buffer, old_header, sizeof (hp));
710   if (global)
711     {
712       type = XGLTYPE;
713       p = xheader_ghdr_name ();
714       time (&t);
715     }
716   else
717     {
718       type = XHDTYPE;
719       p = xheader_xhdr_name (st);
720       t = st->stat.st_mtime;
721     }
722   xheader_write (type, p, t, &st->xhdr);
723   free (p);
724   header = find_next_block ();
725   memcpy (header, &hp.buffer, sizeof (hp.buffer));
726   return header;
727 }
728
729 static union block *
730 write_header_name (struct tar_stat_info *st)
731 {
732   if (archive_format == POSIX_FORMAT && !string_ascii_p (st->file_name))
733     {
734       xheader_store ("path", st, NULL);
735       return write_short_name (st);
736     }
737   else if (NAME_FIELD_SIZE - (archive_format == OLDGNU_FORMAT)
738            < strlen (st->file_name))
739     return write_long_name (st);
740   else
741     return write_short_name (st);
742 }
743
744 \f
745 /* Header handling.  */
746
747 /* Make a header block for the file whose stat info is st,
748    and return its address.  */
749
750 union block *
751 start_header (struct tar_stat_info *st)
752 {
753   union block *header;
754
755   header = write_header_name (st);
756   if (!header)
757     return NULL;
758
759   /* Override some stat fields, if requested to do so.  */
760
761   if (owner_option != (uid_t) -1)
762     st->stat.st_uid = owner_option;
763   if (group_option != (gid_t) -1)
764     st->stat.st_gid = group_option;
765   if (mode_option)
766     st->stat.st_mode =
767       ((st->stat.st_mode & ~MODE_ALL)
768        | mode_adjust (st->stat.st_mode, S_ISDIR (st->stat.st_mode) != 0,
769                       initial_umask, mode_option, NULL));
770
771   /* Paul Eggert tried the trivial test ($WRITER cf a b; $READER tvf a)
772      for a few tars and came up with the following interoperability
773      matrix:
774
775               WRITER
776         1 2 3 4 5 6 7 8 9   READER
777         . . . . . . . . .   1 = SunOS 4.2 tar
778         # . . # # . . # #   2 = NEC SVR4.0.2 tar
779         . . . # # . . # .   3 = Solaris 2.1 tar
780         . . . . . . . . .   4 = GNU tar 1.11.1
781         . . . . . . . . .   5 = HP-UX 8.07 tar
782         . . . . . . . . .   6 = Ultrix 4.1
783         . . . . . . . . .   7 = AIX 3.2
784         . . . . . . . . .   8 = Hitachi HI-UX 1.03
785         . . . . . . . . .   9 = Omron UNIOS-B 4.3BSD 1.60Beta
786
787              . = works
788              # = ``impossible file type''
789
790      The following mask for old archive removes the `#'s in column 4
791      above, thus making GNU tar both a universal donor and a universal
792      acceptor for Paul's test.  */
793
794   if (archive_format == V7_FORMAT || archive_format == USTAR_FORMAT)
795     MODE_TO_CHARS (st->stat.st_mode & MODE_ALL, header->header.mode);
796   else
797     MODE_TO_CHARS (st->stat.st_mode, header->header.mode);
798
799   {
800     uid_t uid = st->stat.st_uid;
801     if (archive_format == POSIX_FORMAT
802         && MAX_OCTAL_VAL (header->header.uid) < uid)
803       {
804         xheader_store ("uid", st, NULL);
805         uid = 0;
806       }
807     if (!UID_TO_CHARS (uid, header->header.uid))
808       return NULL;
809   }
810
811   {
812     gid_t gid = st->stat.st_gid;
813     if (archive_format == POSIX_FORMAT
814         && MAX_OCTAL_VAL (header->header.gid) < gid)
815       {
816         xheader_store ("gid", st, NULL);
817         gid = 0;
818       }
819     if (!GID_TO_CHARS (gid, header->header.gid))
820       return NULL;
821   }
822
823   {
824     off_t size = st->stat.st_size;
825     if (archive_format == POSIX_FORMAT
826         && MAX_OCTAL_VAL (header->header.size) < size)
827       {
828         xheader_store ("size", st, NULL);
829         size = 0;
830       }
831     if (!OFF_TO_CHARS (size, header->header.size))
832       return NULL;
833   }
834
835   {
836     struct timespec mtime = set_mtime_option ? mtime_option : st->mtime;
837     if (archive_format == POSIX_FORMAT)
838       {
839         if (MAX_OCTAL_VAL (header->header.mtime) < mtime.tv_sec
840             || mtime.tv_nsec != 0)
841           xheader_store ("mtime", st, &mtime);
842         if (MAX_OCTAL_VAL (header->header.mtime) < mtime.tv_sec)
843           mtime.tv_sec = 0;
844       }
845     if (!TIME_TO_CHARS (mtime.tv_sec, header->header.mtime))
846       return NULL;
847   }
848
849   /* FIXME */
850   if (S_ISCHR (st->stat.st_mode)
851       || S_ISBLK (st->stat.st_mode))
852     {
853       major_t devmajor = major (st->stat.st_rdev);
854       minor_t devminor = minor (st->stat.st_rdev);
855
856       if (archive_format == POSIX_FORMAT
857           && MAX_OCTAL_VAL (header->header.devmajor) < devmajor)
858         {
859           xheader_store ("devmajor", st, NULL);
860           devmajor = 0;
861         }
862       if (!MAJOR_TO_CHARS (devmajor, header->header.devmajor))
863         return NULL;
864
865       if (archive_format == POSIX_FORMAT
866           && MAX_OCTAL_VAL (header->header.devminor) < devminor)
867         {
868           xheader_store ("devminor", st, NULL);
869           devminor = 0;
870         }
871       if (!MINOR_TO_CHARS (devminor, header->header.devminor))
872         return NULL;
873     }
874   else if (archive_format != GNU_FORMAT && archive_format != OLDGNU_FORMAT)
875     {
876       if (!(MAJOR_TO_CHARS (0, header->header.devmajor)
877             && MINOR_TO_CHARS (0, header->header.devminor)))
878         return NULL;
879     }
880
881   if (archive_format == POSIX_FORMAT)
882     {
883       xheader_store ("atime", st, NULL);
884       xheader_store ("ctime", st, NULL);
885     }
886   else if (incremental_option)
887     if (archive_format == OLDGNU_FORMAT || archive_format == GNU_FORMAT)
888       {
889         TIME_TO_CHARS (st->atime.tv_sec, header->oldgnu_header.atime);
890         TIME_TO_CHARS (st->ctime.tv_sec, header->oldgnu_header.ctime);
891       }
892
893   header->header.typeflag = archive_format == V7_FORMAT ? AREGTYPE : REGTYPE;
894
895   switch (archive_format)
896     {
897     case V7_FORMAT:
898       break;
899
900     case OLDGNU_FORMAT:
901     case GNU_FORMAT:   /*FIXME?*/
902       /* Overwrite header->header.magic and header.version in one blow.  */
903       strcpy (header->buffer + offsetof (struct posix_header, magic),
904               OLDGNU_MAGIC);
905       break;
906
907     case POSIX_FORMAT:
908     case USTAR_FORMAT:
909       strncpy (header->header.magic, TMAGIC, TMAGLEN);
910       strncpy (header->header.version, TVERSION, TVERSLEN);
911       break;
912
913     default:
914       abort ();
915     }
916
917   if (archive_format == V7_FORMAT || numeric_owner_option)
918     {
919       /* header->header.[ug]name are left as the empty string.  */
920     }
921   else
922     {
923       uid_to_uname (st->stat.st_uid, &st->uname);
924       gid_to_gname (st->stat.st_gid, &st->gname);
925
926       if (archive_format == POSIX_FORMAT
927           && (strlen (st->uname) > UNAME_FIELD_SIZE
928               || !string_ascii_p (st->uname)))
929         xheader_store ("uname", st, NULL);
930       UNAME_TO_CHARS (st->uname, header->header.uname);
931
932       if (archive_format == POSIX_FORMAT
933           && (strlen (st->gname) > GNAME_FIELD_SIZE
934               || !string_ascii_p (st->gname)))
935         xheader_store ("gname", st, NULL);
936       GNAME_TO_CHARS (st->gname, header->header.gname);
937     }
938
939   return header;
940 }
941
942 void
943 simple_finish_header (union block *header)
944 {
945   size_t i;
946   int sum;
947   char *p;
948
949   memcpy (header->header.chksum, CHKBLANKS, sizeof header->header.chksum);
950
951   sum = 0;
952   p = header->buffer;
953   for (i = sizeof *header; i-- != 0; )
954     /* We can't use unsigned char here because of old compilers, e.g. V7.  */
955     sum += 0xFF & *p++;
956
957   /* Fill in the checksum field.  It's formatted differently from the
958      other fields: it has [6] digits, a null, then a space -- rather than
959      digits, then a null.  We use to_chars.
960      The final space is already there, from
961      checksumming, and to_chars doesn't modify it.
962
963      This is a fast way to do:
964
965      sprintf(header->header.chksum, "%6o", sum);  */
966
967   uintmax_to_chars ((uintmax_t) sum, header->header.chksum, 7);
968
969   set_next_block_after (header);
970 }
971
972 /* Finish off a filled-in header block and write it out.  We also
973    print the file name and/or full info if verbose is on.  If BLOCK_ORDINAL
974    is not negative, is the block ordinal of the first record for this
975    file, which may be a preceding long name or long link record.  */
976 void
977 finish_header (struct tar_stat_info *st,
978                union block *header, off_t block_ordinal)
979 {
980   /* Note: It is important to do this before the call to write_extended(),
981      so that the actual ustar header is printed */
982   if (verbose_option
983       && header->header.typeflag != GNUTYPE_LONGLINK
984       && header->header.typeflag != GNUTYPE_LONGNAME
985       && header->header.typeflag != XHDTYPE
986       && header->header.typeflag != XGLTYPE)
987     {
988       /* FIXME: This global is used in print_header, sigh.  */
989       current_format = archive_format;
990       print_header (st, header, block_ordinal);
991     }
992
993   header = write_extended (false, st, header);
994   simple_finish_header (header);
995 }
996 \f
997
998 void
999 pad_archive (off_t size_left)
1000 {
1001   union block *blk;
1002   while (size_left > 0)
1003     {
1004       blk = find_next_block ();
1005       memset (blk->buffer, 0, BLOCKSIZE);
1006       set_next_block_after (blk);
1007       size_left -= BLOCKSIZE;
1008     }
1009 }
1010
1011 static enum dump_status
1012 dump_regular_file (int fd, struct tar_stat_info *st)
1013 {
1014   off_t size_left = st->stat.st_size;
1015   off_t block_ordinal;
1016   union block *blk;
1017
1018   block_ordinal = current_block_ordinal ();
1019   blk = start_header (st);
1020   if (!blk)
1021     return dump_status_fail;
1022
1023   /* Mark contiguous files, if we support them.  */
1024   if (archive_format != V7_FORMAT && S_ISCTG (st->stat.st_mode))
1025     blk->header.typeflag = CONTTYPE;
1026
1027   finish_header (st, blk, block_ordinal);
1028
1029   mv_begin_write (st->file_name, st->stat.st_size, st->stat.st_size);
1030   while (size_left > 0)
1031     {
1032       size_t bufsize, count;
1033
1034       blk = find_next_block ();
1035
1036       bufsize = available_space_after (blk);
1037
1038       if (size_left < bufsize)
1039         {
1040           /* Last read -- zero out area beyond.  */
1041           bufsize = size_left;
1042           count = bufsize % BLOCKSIZE;
1043           if (count)
1044             memset (blk->buffer + size_left, 0, BLOCKSIZE - count);
1045         }
1046
1047       count = (fd <= 0) ? bufsize : safe_read (fd, blk->buffer, bufsize);
1048       if (count == SAFE_READ_ERROR)
1049         {
1050           read_diag_details (st->orig_file_name,
1051                              st->stat.st_size - size_left, bufsize);
1052           pad_archive (size_left);
1053           return dump_status_short;
1054         }
1055       size_left -= count;
1056       set_next_block_after (blk + (bufsize - 1) / BLOCKSIZE);
1057
1058       if (count != bufsize)
1059         {
1060           char buf[UINTMAX_STRSIZE_BOUND];
1061           memset (blk->buffer + count, 0, bufsize - count);
1062           WARNOPT (WARN_FILE_SHRANK,
1063                    (0, 0,
1064                     ngettext ("%s: File shrank by %s byte; padding with zeros",
1065                               "%s: File shrank by %s bytes; padding with zeros",
1066                               size_left),
1067                     quotearg_colon (st->orig_file_name),
1068                     STRINGIFY_BIGINT (size_left, buf)));
1069           if (! ignore_failed_read_option)
1070             set_exit_status (TAREXIT_DIFFERS);
1071           pad_archive (size_left - (bufsize - count));
1072           return dump_status_short;
1073         }
1074     }
1075   return dump_status_ok;
1076 }
1077
1078 \f
1079 /* Copy info from the directory identified by ST into the archive.
1080    DIRECTORY contains the directory's entries.  */
1081
1082 static void
1083 dump_dir0 (struct tar_stat_info *st, char const *directory)
1084 {
1085   bool top_level = ! st->parent;
1086   const char *tag_file_name;
1087   union block *blk = NULL;
1088   off_t block_ordinal = current_block_ordinal ();
1089
1090   st->stat.st_size = 0; /* force 0 size on dir */
1091
1092   blk = start_header (st);
1093   if (!blk)
1094     return;
1095
1096   if (incremental_option && archive_format != POSIX_FORMAT)
1097     blk->header.typeflag = GNUTYPE_DUMPDIR;
1098   else /* if (standard_option) */
1099     blk->header.typeflag = DIRTYPE;
1100
1101   /* If we're gnudumping, we aren't done yet so don't close it.  */
1102
1103   if (!incremental_option)
1104     finish_header (st, blk, block_ordinal);
1105   else if (gnu_list_name->directory)
1106     {
1107       if (archive_format == POSIX_FORMAT)
1108         {
1109           xheader_store ("GNU.dumpdir", st,
1110                          safe_directory_contents (gnu_list_name->directory));
1111           finish_header (st, blk, block_ordinal);
1112         }
1113       else
1114         {
1115           off_t size_left;
1116           off_t totsize;
1117           size_t bufsize;
1118           ssize_t count;
1119           const char *buffer, *p_buffer;
1120
1121           block_ordinal = current_block_ordinal ();
1122           buffer = safe_directory_contents (gnu_list_name->directory);
1123           totsize = dumpdir_size (buffer);
1124           OFF_TO_CHARS (totsize, blk->header.size);
1125           finish_header (st, blk, block_ordinal);
1126           p_buffer = buffer;
1127           size_left = totsize;
1128
1129           mv_begin_write (st->file_name, totsize, totsize);
1130           while (size_left > 0)
1131             {
1132               blk = find_next_block ();
1133               bufsize = available_space_after (blk);
1134               if (size_left < bufsize)
1135                 {
1136                   bufsize = size_left;
1137                   count = bufsize % BLOCKSIZE;
1138                   if (count)
1139                     memset (blk->buffer + size_left, 0, BLOCKSIZE - count);
1140                 }
1141               memcpy (blk->buffer, p_buffer, bufsize);
1142               size_left -= bufsize;
1143               p_buffer += bufsize;
1144               set_next_block_after (blk + (bufsize - 1) / BLOCKSIZE);
1145             }
1146         }
1147       return;
1148     }
1149
1150   if (!recursion_option)
1151     return;
1152
1153   if (one_file_system_option
1154       && !top_level
1155       && st->parent->stat.st_dev != st->stat.st_dev)
1156     {
1157       if (verbose_option)
1158         WARNOPT (WARN_XDEV,
1159                  (0, 0,
1160                   _("%s: file is on a different filesystem; not dumped"),
1161                   quotearg_colon (st->orig_file_name)));
1162     }
1163   else
1164     {
1165       char *name_buf;
1166       size_t name_size;
1167
1168       switch (check_exclusion_tags (st, &tag_file_name))
1169         {
1170         case exclusion_tag_all:
1171           /* Handled in dump_file0 */
1172           break;
1173
1174         case exclusion_tag_none:
1175           {
1176             char const *entry;
1177             size_t entry_len;
1178             size_t name_len;
1179
1180             name_buf = xstrdup (st->orig_file_name);
1181             name_size = name_len = strlen (name_buf);
1182
1183             /* Now output all the files in the directory.  */
1184             for (entry = directory; (entry_len = strlen (entry)) != 0;
1185                  entry += entry_len + 1)
1186               {
1187                 if (name_size < name_len + entry_len)
1188                   {
1189                     name_size = name_len + entry_len;
1190                     name_buf = xrealloc (name_buf, name_size + 1);
1191                   }
1192                 strcpy (name_buf + name_len, entry);
1193                 if (!excluded_name (name_buf))
1194                   dump_file (st, entry, name_buf);
1195               }
1196
1197             free (name_buf);
1198           }
1199           break;
1200
1201         case exclusion_tag_contents:
1202           exclusion_tag_warning (st->orig_file_name, tag_file_name,
1203                                  _("contents not dumped"));
1204           name_size = strlen (st->orig_file_name) + strlen (tag_file_name) + 1;
1205           name_buf = xmalloc (name_size);
1206           strcpy (name_buf, st->orig_file_name);
1207           strcat (name_buf, tag_file_name);
1208           dump_file (st, tag_file_name, name_buf);
1209           free (name_buf);
1210           break;
1211
1212         case exclusion_tag_under:
1213           exclusion_tag_warning (st->orig_file_name, tag_file_name,
1214                                  _("contents not dumped"));
1215           break;
1216         }
1217     }
1218 }
1219
1220 /* Ensure exactly one trailing slash.  */
1221 static void
1222 ensure_slash (char **pstr)
1223 {
1224   size_t len = strlen (*pstr);
1225   while (len >= 1 && ISSLASH ((*pstr)[len - 1]))
1226     len--;
1227   if (!ISSLASH ((*pstr)[len]))
1228     *pstr = xrealloc (*pstr, len + 2);
1229   (*pstr)[len++] = '/';
1230   (*pstr)[len] = '\0';
1231 }
1232
1233 /* If we just ran out of file descriptors, release a file descriptor
1234    in the directory chain somewhere leading from DIR->parent->parent
1235    up through the root.  Return true if successful, false (preserving
1236    errno == EMFILE) otherwise.
1237
1238    Do not release DIR's file descriptor, or DIR's parent, as other
1239    code assumes that they work.  On some operating systems, another
1240    process can claim file descriptor resources as we release them, and
1241    some calls or their emulations require multiple file descriptors,
1242    so callers should not give up if a single release doesn't work.  */
1243
1244 static bool
1245 open_failure_recover (struct tar_stat_info const *dir)
1246 {
1247   if (errno == EMFILE && dir && dir->parent)
1248     {
1249       struct tar_stat_info *p;
1250       for (p = dir->parent->parent; p; p = p->parent)
1251         if (0 < p->fd && (! p->parent || p->parent->fd <= 0))
1252           {
1253             tar_stat_close (p);
1254             return true;
1255           }
1256       errno = EMFILE;
1257     }
1258
1259   return false;
1260 }
1261
1262 /* Return the directory entries of ST, in a dynamically allocated buffer,
1263    each entry followed by '\0' and the last followed by an extra '\0'.
1264    Return null on failure, setting errno.  */
1265 char *
1266 get_directory_entries (struct tar_stat_info *st)
1267 {
1268   while (! (st->dirstream = fdopendir (st->fd)))
1269     if (! open_failure_recover (st))
1270       return 0;
1271   return streamsavedir (st->dirstream);
1272 }
1273
1274 /* Dump the directory ST.  Return true if successful, false (emitting
1275    diagnostics) otherwise.  Get ST's entries, recurse through its
1276    subdirectories, and clean up file descriptors afterwards.  */
1277 static bool
1278 dump_dir (struct tar_stat_info *st)
1279 {
1280   char *directory = get_directory_entries (st);
1281   if (! directory)
1282     {
1283       savedir_diag (st->orig_file_name);
1284       return false;
1285     }
1286
1287   dump_dir0 (st, directory);
1288
1289   restore_parent_fd (st);
1290   free (directory);
1291   return true;
1292 }
1293
1294 \f
1295 /* Number of links a file can have without having to be entered into
1296    the link table.  Typically this is 1, but in trickier circumstances
1297    it is 0.  */
1298 static nlink_t trivial_link_count;
1299
1300 \f
1301 /* Main functions of this module.  */
1302
1303 void
1304 create_archive (void)
1305 {
1306   struct name const *p;
1307
1308   trivial_link_count = name_count <= 1 && ! dereference_option;
1309
1310   open_archive (ACCESS_WRITE);
1311   buffer_write_global_xheader ();
1312
1313   if (incremental_option)
1314     {
1315       size_t buffer_size = 1000;
1316       char *buffer = xmalloc (buffer_size);
1317       const char *q;
1318
1319       collect_and_sort_names ();
1320
1321       while ((p = name_from_list ()) != NULL)
1322         if (!excluded_name (p->name))
1323           dump_file (0, p->name, p->name);
1324
1325       blank_name_list ();
1326       while ((p = name_from_list ()) != NULL)
1327         if (!excluded_name (p->name))
1328           {
1329             struct tar_stat_info st;
1330             size_t plen = strlen (p->name);
1331             if (buffer_size <= plen)
1332               {
1333                 while ((buffer_size *= 2) <= plen)
1334                   continue;
1335                 buffer = xrealloc (buffer, buffer_size);
1336               }
1337             memcpy (buffer, p->name, plen);
1338             if (! ISSLASH (buffer[plen - 1]))
1339               buffer[plen++] = DIRECTORY_SEPARATOR;
1340             tar_stat_init (&st);
1341             q = directory_contents (gnu_list_name->directory);
1342             if (q)
1343               while (*q)
1344                 {
1345                   size_t qlen = strlen (q);
1346                   if (*q == 'Y')
1347                     {
1348                       if (! st.orig_file_name)
1349                         {
1350                           int fd = openat (chdir_fd, p->name,
1351                                            open_searchdir_flags);
1352                           if (fd < 0)
1353                             {
1354                               open_diag (p->name);
1355                               break;
1356                             }
1357                           st.fd = fd;
1358                           if (fstat (fd, &st.stat) != 0)
1359                             {
1360                               stat_diag (p->name);
1361                               break;
1362                             }
1363                           st.orig_file_name = xstrdup (p->name);
1364                         }
1365                       if (buffer_size < plen + qlen)
1366                         {
1367                           while ((buffer_size *=2 ) < plen + qlen)
1368                             continue;
1369                           buffer = xrealloc (buffer, buffer_size);
1370                         }
1371                       strcpy (buffer + plen, q + 1);
1372                       dump_file (&st, q + 1, buffer);
1373                     }
1374                   q += qlen + 1;
1375                 }
1376             tar_stat_destroy (&st);
1377           }
1378       free (buffer);
1379     }
1380   else
1381     {
1382       const char *name;
1383       while ((name = name_next (1)) != NULL)
1384         if (!excluded_name (name))
1385           dump_file (0, name, name);
1386     }
1387
1388   write_eot ();
1389   close_archive ();
1390   finish_deferred_unlinks ();
1391   if (listed_incremental_option)
1392     write_directory_file ();
1393 }
1394
1395
1396 /* Calculate the hash of a link.  */
1397 static size_t
1398 hash_link (void const *entry, size_t n_buckets)
1399 {
1400   struct link const *l = entry;
1401   uintmax_t num = l->dev ^ l->ino;
1402   return num % n_buckets;
1403 }
1404
1405 /* Compare two links for equality.  */
1406 static bool
1407 compare_links (void const *entry1, void const *entry2)
1408 {
1409   struct link const *link1 = entry1;
1410   struct link const *link2 = entry2;
1411   return ((link1->dev ^ link2->dev) | (link1->ino ^ link2->ino)) == 0;
1412 }
1413
1414 static void
1415 unknown_file_error (char const *p)
1416 {
1417   WARNOPT (WARN_FILE_IGNORED,
1418            (0, 0, _("%s: Unknown file type; file ignored"),
1419             quotearg_colon (p)));
1420   if (!ignore_failed_read_option)
1421     set_exit_status (TAREXIT_FAILURE);
1422 }
1423
1424 \f
1425 /* Handling of hard links */
1426
1427 /* Table of all non-directories that we've written so far.  Any time
1428    we see another, we check the table and avoid dumping the data
1429    again if we've done it once already.  */
1430 static Hash_table *link_table;
1431
1432 /* Try to dump stat as a hard link to another file in the archive.
1433    Return true if successful.  */
1434 static bool
1435 dump_hard_link (struct tar_stat_info *st)
1436 {
1437   if (link_table
1438       && (trivial_link_count < st->stat.st_nlink || remove_files_option))
1439     {
1440       struct link lp;
1441       struct link *duplicate;
1442       off_t block_ordinal;
1443       union block *blk;
1444
1445       lp.ino = st->stat.st_ino;
1446       lp.dev = st->stat.st_dev;
1447
1448       if ((duplicate = hash_lookup (link_table, &lp)))
1449         {
1450           /* We found a link.  */
1451           char const *link_name = safer_name_suffix (duplicate->name, true,
1452                                                      absolute_names_option);
1453
1454           duplicate->nlink--;
1455
1456           block_ordinal = current_block_ordinal ();
1457           assign_string (&st->link_name, link_name);
1458           if (NAME_FIELD_SIZE - (archive_format == OLDGNU_FORMAT)
1459               < strlen (link_name))
1460             write_long_link (st);
1461
1462           st->stat.st_size = 0;
1463           blk = start_header (st);
1464           if (!blk)
1465             return false;
1466           tar_copy_str (blk->header.linkname, link_name, NAME_FIELD_SIZE);
1467
1468           blk->header.typeflag = LNKTYPE;
1469           finish_header (st, blk, block_ordinal);
1470
1471           if (remove_files_option)
1472             queue_deferred_unlink (st->orig_file_name, false);
1473
1474           return true;
1475         }
1476     }
1477   return false;
1478 }
1479
1480 static void
1481 file_count_links (struct tar_stat_info *st)
1482 {
1483   if (hard_dereference_option)
1484     return;
1485   if (trivial_link_count < st->stat.st_nlink)
1486     {
1487       struct link *duplicate;
1488       char *linkname = NULL;
1489       struct link *lp;
1490
1491       assign_string (&linkname, st->orig_file_name);
1492       transform_name (&linkname, XFORM_LINK);
1493
1494       lp = xmalloc (offsetof (struct link, name)
1495                                  + strlen (linkname) + 1);
1496       lp->ino = st->stat.st_ino;
1497       lp->dev = st->stat.st_dev;
1498       lp->nlink = st->stat.st_nlink;
1499       strcpy (lp->name, linkname);
1500       free (linkname);
1501
1502       if (! ((link_table
1503               || (link_table = hash_initialize (0, 0, hash_link,
1504                                                 compare_links, 0)))
1505              && (duplicate = hash_insert (link_table, lp))))
1506         xalloc_die ();
1507
1508       if (duplicate != lp)
1509         abort ();
1510       lp->nlink--;
1511     }
1512 }
1513
1514 /* For each dumped file, check if all its links were dumped. Emit
1515    warnings if it is not so. */
1516 void
1517 check_links (void)
1518 {
1519   struct link *lp;
1520
1521   if (!link_table)
1522     return;
1523
1524   for (lp = hash_get_first (link_table); lp;
1525        lp = hash_get_next (link_table, lp))
1526     {
1527       if (lp->nlink)
1528         {
1529           WARN ((0, 0, _("Missing links to %s."), quote (lp->name)));
1530         }
1531     }
1532 }
1533
1534 /* Assuming DIR is the working directory, open FILE, using FLAGS to
1535    control the open.  A null DIR means to use ".".  If we are low on
1536    file descriptors, try to release one or more from DIR's parents to
1537    reuse it.  */
1538 int
1539 subfile_open (struct tar_stat_info const *dir, char const *file, int flags)
1540 {
1541   int fd;
1542
1543   static bool initialized;
1544   if (! initialized)
1545     {
1546       /* Initialize any tables that might be needed when file
1547          descriptors are exhausted, and whose initialization might
1548          require a file descriptor.  This includes the system message
1549          catalog and tar's message catalog.  */
1550       initialized = true;
1551       strerror (ENOENT);
1552       gettext ("");
1553     }
1554
1555   while ((fd = openat (dir ? dir->fd : chdir_fd, file, flags)) < 0
1556          && open_failure_recover (dir))
1557     continue;
1558   return fd;
1559 }
1560
1561 /* Restore the file descriptor for ST->parent, if it was temporarily
1562    closed to conserve file descriptors.  On failure, set the file
1563    descriptor to the negative of the corresponding errno value.  Call
1564    this every time a subdirectory is ascended from.  */
1565 void
1566 restore_parent_fd (struct tar_stat_info const *st)
1567 {
1568   struct tar_stat_info *parent = st->parent;
1569   if (parent && ! parent->fd)
1570     {
1571       int parentfd = openat (st->fd, "..", open_searchdir_flags);
1572       struct stat parentstat;
1573
1574       if (parentfd < 0)
1575         parentfd = - errno;
1576       else if (! (fstat (parentfd, &parentstat) == 0
1577                   && parent->stat.st_ino == parentstat.st_ino
1578                   && parent->stat.st_dev == parentstat.st_dev))
1579         {
1580           close (parentfd);
1581           parentfd = IMPOSTOR_ERRNO;
1582         }
1583
1584       if (parentfd < 0)
1585         {
1586           int origfd = openat (chdir_fd, parent->orig_file_name,
1587                                open_searchdir_flags);
1588           if (0 <= origfd)
1589             {
1590               if (fstat (parentfd, &parentstat) == 0
1591                   && parent->stat.st_ino == parentstat.st_ino
1592                   && parent->stat.st_dev == parentstat.st_dev)
1593                 parentfd = origfd;
1594               else
1595                 close (origfd);
1596             }
1597         }
1598
1599       parent->fd = parentfd;
1600     }
1601 }
1602
1603 /* Dump a single file, recursing on directories.  ST is the file's
1604    status info, NAME its name relative to the parent directory, and P
1605    its full name (which may be relative to the working directory).  */
1606
1607 /* FIXME: One should make sure that for *every* path leading to setting
1608    exit_status to failure, a clear diagnostic has been issued.  */
1609
1610 static void
1611 dump_file0 (struct tar_stat_info *st, char const *name, char const *p)
1612 {
1613   union block *header;
1614   char type;
1615   off_t original_size;
1616   struct timespec original_ctime;
1617   off_t block_ordinal = -1;
1618   int fd = 0;
1619   bool is_dir;
1620   struct tar_stat_info const *parent = st->parent;
1621   bool top_level = ! parent;
1622   int parentfd = top_level ? chdir_fd : parent->fd;
1623   void (*diag) (char const *) = 0;
1624
1625   if (interactive_option && !confirm ("add", p))
1626     return;
1627
1628   assign_string (&st->orig_file_name, p);
1629   assign_string (&st->file_name,
1630                  safer_name_suffix (p, false, absolute_names_option));
1631
1632   transform_name (&st->file_name, XFORM_REGFILE);
1633
1634   if (parentfd < 0 && ! top_level)
1635     {
1636       errno = - parentfd;
1637       diag = open_diag;
1638     }
1639   else if (fstatat (parentfd, name, &st->stat, fstatat_flags) != 0)
1640     diag = stat_diag;
1641   else if (file_dumpable_p (&st->stat))
1642     {
1643       fd = subfile_open (parent, name, open_read_flags);
1644       if (fd < 0)
1645         diag = open_diag;
1646       else
1647         {
1648           st->fd = fd;
1649           if (fstat (fd, &st->stat) != 0)
1650             diag = stat_diag;
1651         }
1652     }
1653   if (diag)
1654     {
1655       file_removed_diag (p, top_level, diag);
1656       return;
1657     }
1658
1659   st->archive_file_size = original_size = st->stat.st_size;
1660   st->atime = get_stat_atime (&st->stat);
1661   st->mtime = get_stat_mtime (&st->stat);
1662   st->ctime = original_ctime = get_stat_ctime (&st->stat);
1663
1664 #ifdef S_ISHIDDEN
1665   if (S_ISHIDDEN (st->stat.st_mode))
1666     {
1667       char *new = (char *) alloca (strlen (p) + 2);
1668       if (new)
1669         {
1670           strcpy (new, p);
1671           strcat (new, "@");
1672           p = new;
1673         }
1674     }
1675 #endif
1676
1677   /* See if we want only new files, and check if this one is too old to
1678      put in the archive.
1679
1680      This check is omitted if incremental_option is set *and* the
1681      requested file is not explicitly listed in the command line.  */
1682
1683   if (! (incremental_option && ! top_level)
1684       && !S_ISDIR (st->stat.st_mode)
1685       && OLDER_TAR_STAT_TIME (*st, m)
1686       && (!after_date_option || OLDER_TAR_STAT_TIME (*st, c)))
1687     {
1688       if (!incremental_option && verbose_option)
1689         WARNOPT (WARN_FILE_UNCHANGED,
1690                  (0, 0, _("%s: file is unchanged; not dumped"),
1691                   quotearg_colon (p)));
1692       return;
1693     }
1694
1695   /* See if we are trying to dump the archive.  */
1696   if (sys_file_is_archive (st))
1697     {
1698       WARNOPT (WARN_IGNORE_ARCHIVE,
1699                (0, 0, _("%s: file is the archive; not dumped"),
1700                 quotearg_colon (p)));
1701       return;
1702     }
1703
1704   is_dir = S_ISDIR (st->stat.st_mode) != 0;
1705
1706   if (!is_dir && dump_hard_link (st))
1707     return;
1708
1709   if (is_dir || S_ISREG (st->stat.st_mode) || S_ISCTG (st->stat.st_mode))
1710     {
1711       bool ok;
1712       struct stat final_stat;
1713
1714       if (is_dir)
1715         {
1716           const char *tag_file_name;
1717           ensure_slash (&st->orig_file_name);
1718           ensure_slash (&st->file_name);
1719
1720           if (check_exclusion_tags (st, &tag_file_name) == exclusion_tag_all)
1721             {
1722               exclusion_tag_warning (st->orig_file_name, tag_file_name,
1723                                      _("directory not dumped"));
1724               return;
1725             }
1726
1727           ok = dump_dir (st);
1728
1729           fd = st->fd;
1730           parentfd = top_level ? chdir_fd : parent->fd;
1731         }
1732       else
1733         {
1734           enum dump_status status;
1735
1736           if (fd && sparse_option && ST_IS_SPARSE (st->stat))
1737             {
1738               status = sparse_dump_file (fd, st);
1739               if (status == dump_status_not_implemented)
1740                 status = dump_regular_file (fd, st);
1741             }
1742           else
1743             status = dump_regular_file (fd, st);
1744
1745           switch (status)
1746             {
1747             case dump_status_ok:
1748             case dump_status_short:
1749               file_count_links (st);
1750               break;
1751
1752             case dump_status_fail:
1753               break;
1754
1755             case dump_status_not_implemented:
1756               abort ();
1757             }
1758
1759           ok = status == dump_status_ok;
1760         }
1761
1762       if (ok)
1763         {
1764           if (fd < 0)
1765             {
1766               errno = - fd;
1767               ok = false;
1768             }
1769           else if (fd == 0)
1770             {
1771               if (parentfd < 0 && ! top_level)
1772                 {
1773                   errno = - parentfd;
1774                   ok = false;
1775                 }
1776               else
1777                 ok = fstatat (parentfd, name, &final_stat, fstatat_flags) == 0;
1778             }
1779           else
1780             ok = fstat (fd, &final_stat) == 0;
1781
1782           if (! ok)
1783             file_removed_diag (p, top_level, stat_diag);
1784         }
1785
1786       if (ok)
1787         {
1788           if ((timespec_cmp (get_stat_ctime (&final_stat), original_ctime) != 0
1789                /* Original ctime will change if the file is a directory and
1790                   --remove-files is given */
1791                && !(remove_files_option && is_dir))
1792               || original_size < final_stat.st_size)
1793             {
1794               WARNOPT (WARN_FILE_CHANGED,
1795                        (0, 0, _("%s: file changed as we read it"),
1796                         quotearg_colon (p)));
1797               set_exit_status (TAREXIT_DIFFERS);
1798             }
1799           else if (atime_preserve_option == replace_atime_preserve
1800                    && fd && (is_dir || original_size != 0)
1801                    && set_file_atime (fd, parentfd, name, st->atime) != 0)
1802             utime_error (p);
1803         }
1804
1805       ok &= tar_stat_close (st);
1806       if (ok && remove_files_option)
1807         queue_deferred_unlink (p, is_dir);
1808
1809       return;
1810     }
1811 #ifdef HAVE_READLINK
1812   else if (S_ISLNK (st->stat.st_mode))
1813     {
1814       char *buffer;
1815       int size;
1816       size_t linklen = st->stat.st_size;
1817       if (linklen != st->stat.st_size || linklen + 1 == 0)
1818         xalloc_die ();
1819       buffer = (char *) alloca (linklen + 1);
1820       size = readlinkat (parentfd, name, buffer, linklen + 1);
1821       if (size < 0)
1822         {
1823           file_removed_diag (p, top_level, readlink_diag);
1824           return;
1825         }
1826       buffer[size] = '\0';
1827       assign_string (&st->link_name, buffer);
1828       transform_name (&st->link_name, XFORM_SYMLINK);
1829       if (NAME_FIELD_SIZE - (archive_format == OLDGNU_FORMAT) < size)
1830         write_long_link (st);
1831
1832       block_ordinal = current_block_ordinal ();
1833       st->stat.st_size = 0;     /* force 0 size on symlink */
1834       header = start_header (st);
1835       if (!header)
1836         return;
1837       tar_copy_str (header->header.linkname, st->link_name, NAME_FIELD_SIZE);
1838       header->header.typeflag = SYMTYPE;
1839       finish_header (st, header, block_ordinal);
1840       /* nothing more to do to it */
1841
1842       if (remove_files_option)
1843         queue_deferred_unlink (p, false);
1844
1845       file_count_links (st);
1846       return;
1847     }
1848 #endif
1849   else if (S_ISCHR (st->stat.st_mode))
1850     type = CHRTYPE;
1851   else if (S_ISBLK (st->stat.st_mode))
1852     type = BLKTYPE;
1853   else if (S_ISFIFO (st->stat.st_mode))
1854     type = FIFOTYPE;
1855   else if (S_ISSOCK (st->stat.st_mode))
1856     {
1857       WARNOPT (WARN_FILE_IGNORED,
1858                (0, 0, _("%s: socket ignored"), quotearg_colon (p)));
1859       return;
1860     }
1861   else if (S_ISDOOR (st->stat.st_mode))
1862     {
1863       WARNOPT (WARN_FILE_IGNORED,
1864                (0, 0, _("%s: door ignored"), quotearg_colon (p)));
1865       return;
1866     }
1867   else
1868     {
1869       unknown_file_error (p);
1870       return;
1871     }
1872
1873   if (archive_format == V7_FORMAT)
1874     {
1875       unknown_file_error (p);
1876       return;
1877     }
1878
1879   block_ordinal = current_block_ordinal ();
1880   st->stat.st_size = 0; /* force 0 size */
1881   header = start_header (st);
1882   if (!header)
1883     return;
1884   header->header.typeflag = type;
1885
1886   if (type != FIFOTYPE)
1887     {
1888       MAJOR_TO_CHARS (major (st->stat.st_rdev),
1889                       header->header.devmajor);
1890       MINOR_TO_CHARS (minor (st->stat.st_rdev),
1891                       header->header.devminor);
1892     }
1893
1894   finish_header (st, header, block_ordinal);
1895   if (remove_files_option)
1896     queue_deferred_unlink (p, false);
1897 }
1898
1899 /* Dump a file, recursively.  PARENT describes the file's parent
1900    directory, NAME is the file's name relative to PARENT, and FULLNAME
1901    its full name, possibly relative to the working directory.  NAME
1902    may contain slashes at the top level of invocation.  */
1903
1904 void
1905 dump_file (struct tar_stat_info *parent, char const *name,
1906            char const *fullname)
1907 {
1908   struct tar_stat_info st;
1909   tar_stat_init (&st);
1910   st.parent = parent;
1911   dump_file0 (&st, name, fullname);
1912   if (parent && listed_incremental_option)
1913     update_parent_directory (parent);
1914   tar_stat_destroy (&st);
1915 }