]> Dogcows Code - chaz/tar/blobdiff - src/create.c
Count number of occurrences of each name in the
[chaz/tar] / src / create.c
index a0c76289e3cc773d33678910344c87fd7009c12d..910b4a239d684180b0ebeb4c4132495331737935 100644 (file)
@@ -402,6 +402,16 @@ write_long (const char *p, char type)
   set_next_block_after (header + (size - 1) / BLOCKSIZE);
 }
 
+/* Write a long link name, depending on the current archive format */
+static void
+write_long_link (struct tar_stat_info *st)
+{
+  if (archive_format == POSIX_FORMAT)
+    xheader_store ("linkpath", st);
+  else
+    write_long (st->link_name, GNUTYPE_LONGNAME);
+}
+
 /* NOTE: Cross recursion between start_header and write_extended  */
 
 static union block *
@@ -1245,9 +1255,9 @@ dump_file (char *p, int top_level, dev_t parent_device)
              dup->nlink--;
              
              block_ordinal = current_block_ordinal ();
-             if (NAME_FIELD_SIZE <= strlen (link_name))
-               write_long (link_name, GNUTYPE_LONGLINK);
              assign_string (&current_stat_info.link_name, link_name);
+             if (NAME_FIELD_SIZE <= strlen (link_name))
+               write_long_link (&current_stat_info);
 
              current_stat_info.stat.st_size = 0;
              header = start_header (p, &current_stat_info);
@@ -1487,7 +1497,9 @@ dump_file (char *p, int top_level, dev_t parent_device)
                    char buf[UINTMAX_STRSIZE_BOUND];
                    memset (start->buffer + count, 0, bufsize - count);
                    WARN ((0, 0,
-                          _("%s: File shrank by %s bytes; padding with zeros"),
+                          ngettext ("%s: File shrank by %s byte; padding with zeros",
+                                    "%s: File shrank by %s bytes; padding with zeros",
+                                    sizeleft),
                           quotearg_colon (p),
                           STRINGIFY_BIGINT (sizeleft, buf)));
                    if (! ignore_failed_read_option)
@@ -1572,9 +1584,9 @@ dump_file (char *p, int top_level, dev_t parent_device)
              return;
            }
          buffer[size] = '\0';
-         if (size >= NAME_FIELD_SIZE)
-           write_long (buffer, GNUTYPE_LONGLINK);
          assign_string (&current_stat_info.link_name, buffer);
+         if (size >= NAME_FIELD_SIZE)
+           write_long_link (&current_stat_info);
 
          block_ordinal = current_block_ordinal ();
          current_stat_info.stat.st_size = 0;   /* force 0 size on symlink */
This page took 0.025792 seconds and 4 git commands to generate.