]> Dogcows Code - chaz/tar/blobdiff - src/create.c
Updated
[chaz/tar] / src / create.c
index cc75bb8bf059d90906ff365d6188db687faea592..065e6fafd511fcb454b891cef56c43a91b4d7bba 100644 (file)
@@ -1,7 +1,7 @@
 /* Create a tar archive.
 
    Copyright (C) 1985, 1992, 1993, 1994, 1996, 1997, 1999, 2000, 2001,
-   2003 Free Software Foundation, Inc.
+   2003, 2004 Free Software Foundation, Inc.
 
    Written by John Gilmore, on 1985-08-25.
 
@@ -558,7 +558,12 @@ write_extended (struct tar_stat_info *st, union block *old_header)
 static union block * 
 write_header_name (struct tar_stat_info *st)
 {
-  if (NAME_FIELD_SIZE < strlen (st->file_name))
+  if (archive_format == POSIX_FORMAT && !string_ascii_p (st->file_name))
+    {
+      xheader_store ("path", st, NULL);
+      return write_short_name (st);
+    }
+  else if (NAME_FIELD_SIZE < strlen (st->file_name))
     return write_long_name (st);
   else
     return write_short_name (st);
@@ -702,13 +707,15 @@ start_header (struct tar_stat_info *st)
       gid_to_gname (st->stat.st_gid, &st->gname);
       
       if (archive_format == POSIX_FORMAT
-         && strlen (st->uname) > UNAME_FIELD_SIZE)
+         && (strlen (st->uname) > UNAME_FIELD_SIZE
+             || !string_ascii_p (st->uname)))
        xheader_store ("uname", st, NULL);
       else
        UNAME_TO_CHARS (st->uname, header->header.uname);
 
       if (archive_format == POSIX_FORMAT
-         && strlen (st->gname) > GNAME_FIELD_SIZE)
+         && (strlen (st->gname) > GNAME_FIELD_SIZE
+             || !string_ascii_p (st->gname)))
        xheader_store ("gname", st, NULL);
       else
        GNAME_TO_CHARS (st->gname, header->header.gname);
@@ -972,8 +979,8 @@ dump_dir0 (char *directory,
     return;
 
   if (one_file_system_option
-          && !top_level
-          && parent_device != stat->stat.st_dev)
+      && !top_level
+      && parent_device != stat->stat.st_dev)
     {
       if (verbose_option)
        WARN ((0, 0,
@@ -1293,12 +1300,11 @@ dump_file0 (struct tar_stat_info *stat, char *p,
   /* See if we want only new files, and check if this one is too old to
      put in the archive.  */
 
-  if ((0 < top_level || !incremental_option)
-      && !S_ISDIR (stat->stat.st_mode)
+  if (!S_ISDIR (stat->stat.st_mode)
       && stat->stat.st_mtime < newer_mtime_option
       && (!after_date_option || stat->stat.st_ctime < newer_ctime_option))
     {
-      if (0 < top_level)
+      if (0 < top_level) /* equivalent to !incremental_option */
        WARN ((0, 0, _("%s: file is unchanged; not dumped"),
               quotearg_colon (p)));
       /* FIXME: recheck this return.  */
This page took 0.021215 seconds and 4 git commands to generate.