-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Larry Ploetz wrote:

> Or ripping cp's "crude heuristic" out and
> putting it here.

That's probably your best bet.  It doesn't look too complex:

  /* Even with --sparse=always, try to create holes only
     if the destination is a regular file.  */
  if (x->sparse_mode == SPARSE_ALWAYS && S_ISREG (sb.st_mode))
    make_holes = true;

#if HAVE_STRUCT_STAT_ST_BLOCKS
  if (x->sparse_mode == SPARSE_AUTO && S_ISREG (sb.st_mode))
    {
      /* Use a heuristic to determine whether SRC_NAME contains any
         sparse blocks. */

      if (fstat (source_desc, &sb))
        {
          error (0, errno, _("cannot fstat %s"), quote (src_name));
          return_val = false;
          goto close_src_and_dst_desc;
        }

      /* If the file has fewer blocks than would normally
         be needed for a file of its size, then
         at least one of the blocks in the file is a hole. */
      if (S_ISREG (sb.st_mode)
          && sb.st_size / ST_NBLOCKSIZE > ST_NBLOCKS (sb))
        make_holes = true;
    }
#endif

The loop where it does the actual file copying is a bit longer and more
complex (long enough to be annoying in an email), but can be found in
copy.c in the coreutils srpm.  Hopefully it should be possible to copy
the ideas to logrotate.

Let me know if you'd like my help.

- -- Pat

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Darwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAklpY6AACgkQNObCqA8uBswTwQCbBkQNMk7+ebbuQoTJp8D9VH7B
Fd4AnRWc/n2VoxvZV5PHz/ZPzGv6xKnl
=NRzg
-----END PGP SIGNATURE-----

----------------------------------------------------------------------
For LINUX-390 subscribe / signoff / archive access instructions,
send email to lists...@vm.marist.edu with the message: INFO LINUX-390 or visit
http://www.marist.edu/htbin/wlvindex?LINUX-390

Reply via email to