I'm sponsoring this case for Cynthia Eastham.

Since this case follows the same general practices used when sparse
file support was added to the pax archiving utility, I'm marking this
case as close approved automatic.  If any members believe this needs to
be promoted to a fast track let me know.

This case seeks a patch binding.

 - Don

Template Version: @(#)sac_nextcase %I% %G% SMI
This information is Copyright 2008 Sun Microsystems
1. Introduction
    1.1. Project/Component Working Name:
         Add sparse file support to cpio
    1.2. Name of Document Author/Supplier:
         Author:  Cynthia Eastham
    1.3  Date of This Document:
        21 November, 2008
4. Technical Description
        4.1 Details

        PSARC case 2006/331 (Add holey file support to pax) created
        extended headers to maintain information about sparse files in
        some archive formats written by pax.  Holes are not expunged
        from the file in the archive, but are recreated when the file
        is extracted from the archive.

        This case adds similar sparse file support to the cpio utility.

        In pass mode, (cpio -p), sparse files will be recreated at the
        destination with the same holes that were present in the source
        file, as long as the source file system supports reporting
        holes (as described by PSARC case 2004/770) and the destination
        file is seekable.  Otherwise, holes in sparse files will be
        filled with '\0' btyes in corresponding destination files as
        they are now.

        In copy out mode (-o) the following new option arguments to the
        cpio -H option will be added to provide sparse file support:
                ascii_sparse    - assumes -c is specified.  Only available
                                in copy out (-o) mode.
                odc_sparse      - assumes -H odc is specified  Only available
                                in copy out (-o) mode.

        When sparse files are archived using one of the above archive
        formats, and the underlying file system supports the detection
        of holes as reported by pathconf(2), it will be compressed
        (holes will not be stored in the archive), and hole and data
        offsets as returned by lseek(2) will be saved at the start of
        the file data.  Otherwise, sparse files will be archived as
        they are now.

        When a compressed sparse file is extracted from an archive
        (cpio -i), if the destination file is seekable, holes will be
        restored using the saved hole and data offsets.  Otherwise
        holes in the source file will be filled with '\0' bytes in the
        destination file.

        The following will apply when either '-H ascii_sparse' or
        '-H odc_sparse' is specified with -o: 
                - The c_mode field will in the archive header will
                  indicate that the file is a sparse file. In the old
                  stat structure, the mode field is an unsigned short
                  (16 bit) field.  To avoid conflicts with other file
                  types, a high order bit (17) in the c_mode field of
                  the header will be set.
                - the file size field of the header will be the size of
                  the compressed sparse file (i.e., the size of the
                  header below plus the size of the file contents after
                  removing the holes).
                - A string of the following format will be prepended to
                  the compressed file data:
                        "%lu %llu%s", prepended_info_size,
                                expanded_file_size, data/hole_offsets
                where data/hole_offsets contains 2 or more entries of the
                following format:
                        " %llu %llu", data_offset, hole_offset

                The following is an example of the string that would be
                prepended to the compressed file:
          "64 16777223 0 8192 65536 73728 1048576 1056768 16777216 16777223"
                for a file that is (after expansion) 16,777,223 bytes
                long with file data starting at offset 0 followed by a
                hole starting at offset 8,192, more data starting at
                offset 65,536 followed by another hole starting at
                offset 1,048,576, ..., followed by data starting at
                offset 26,777,216 and ending at offset 16,777,223 (the
                file size).  The compressed file is all of the data in
                the file, except that the holes in the file have been
                removed from the archive.

        When the c_mode field is set, cpio will detect the sparse file
        upon file extraction, and use the prepended sparse file
        information to restore the holes in the file if the
        destiination file is seekable.  If the destination file is not
        seekable, the sparse file information will be used to fill the
        holes with '\0' bytes.  Archivers that do not recognize the
        sparse file mode bit will restore the compressed file and its
        prepended data as a regular file.

        4.3 Exported Interfaces
            ______________________________________
            |     Interface       |Classification|
            |_____________________|______________|
            |/usr/bin/cpio        |   Committed  |
            |_____________________|______________|

5. Reference Documents:
    5.1 CR 4480319 cpio does not properly copy files that are
        sparse (have holes in them)
    5.2 PSARC/2004/770: Holey file knowledge
    5.3 PSARC/2006/361: Add holey file support to pax
    5.4 PSARC/2008/727/materials/cpio.1: Updated cpio.1 man page

6. Resources and Schedule
    6.4. Steering Committee requested information
        6.4.1. Consolidation C-team Name:
                ON
    6.5. ARC review type: Automatic
    6.6. ARC Exposure: open


Reply via email to