]> Dogcows Code - chaz/tar/blobdiff - src/create.c
tar: remove lint
[chaz/tar] / src / create.c
index 05af0d9062cee9e6d6102df1baa9e4a35b7cb601..745796c2b2bd253e486ed6f6bdbb4306b5351792 100644 (file)
@@ -562,7 +562,8 @@ write_gnu_long_link (struct tar_stat_info *st, const char *p, char type)
   GNAME_TO_CHARS (tmpname, header->header.gname);
   free (tmpname);
 
-  strcpy (header->header.magic, OLDGNU_MAGIC);
+  strcpy (header->buffer + offsetof (struct posix_header, magic),
+         OLDGNU_MAGIC);
   header->header.typeflag = type;
   finish_header (st, header, -1);
 
@@ -784,9 +785,9 @@ start_header (struct tar_stat_info *st)
        . . . . . . . . .   9 = Omron UNIOS-B 4.3BSD 1.60Beta
 
             . = works
-            # = ``impossible file type''
+            # = "impossible file type"
 
-     The following mask for old archive removes the `#'s in column 4
+     The following mask for old archive removes the '#'s in column 4
      above, thus making GNU tar both a universal donor and a universal
      acceptor for Paul's test.  */
 
@@ -899,7 +900,8 @@ start_header (struct tar_stat_info *st)
     case OLDGNU_FORMAT:
     case GNU_FORMAT:   /*FIXME?*/
       /* Overwrite header->header.magic and header.version in one blow.  */
-      strcpy (header->header.magic, OLDGNU_MAGIC);
+      strcpy (header->buffer + offsetof (struct posix_header, magic),
+             OLDGNU_MAGIC);
       break;
 
     case POSIX_FORMAT:
@@ -918,8 +920,15 @@ start_header (struct tar_stat_info *st)
     }
   else
     {
-      uid_to_uname (st->stat.st_uid, &st->uname);
-      gid_to_gname (st->stat.st_gid, &st->gname);
+      if (owner_name_option)
+       st->uname = xstrdup (owner_name_option);
+      else
+       uid_to_uname (st->stat.st_uid, &st->uname);
+
+      if (group_name_option)
+       st->gname = xstrdup (group_name_option);
+      else
+       gid_to_gname (st->stat.st_gid, &st->gname);
 
       if (archive_format == POSIX_FORMAT
          && (strlen (st->uname) > UNAME_FIELD_SIZE
@@ -1042,7 +1051,7 @@ dump_regular_file (int fd, struct tar_stat_info *st)
            memset (blk->buffer + size_left, 0, BLOCKSIZE - count);
        }
 
-      count = (fd <= 0) ? bufsize : safe_read (fd, blk->buffer, bufsize);
+      count = (fd <= 0) ? bufsize : blocking_read (fd, blk->buffer, bufsize);
       if (count == SAFE_READ_ERROR)
        {
          read_diag_details (st->orig_file_name,
@@ -1676,9 +1685,9 @@ dump_file0 (struct tar_stat_info *st, char const *name, char const *p)
      put in the archive.
 
      This check is omitted if incremental_option is set *and* the
-     requested file is not explicitely listed in the command line. */
+     requested file is not explicitly listed in the command line.  */
 
-  if (!(incremental_option && !is_individual_file (p))
+  if (! (incremental_option && ! top_level)
       && !S_ISDIR (st->stat.st_mode)
       && OLDER_TAR_STAT_TIME (*st, m)
       && (!after_date_option || OLDER_TAR_STAT_TIME (*st, c)))
@@ -1795,6 +1804,7 @@ dump_file0 (struct tar_stat_info *st, char const *name, char const *p)
              set_exit_status (TAREXIT_DIFFERS);
            }
          else if (atime_preserve_option == replace_atime_preserve
+                  && fd && (is_dir || original_size != 0)
                   && set_file_atime (fd, parentfd, name, st->atime) != 0)
            utime_error (p);
        }
This page took 0.023509 seconds and 4 git commands to generate.