Top Description Inners Fields Constructors Methods
org.apache.commons.compress.archivers.dump

public Class DumpArchiveEntry

extends Object
implements ArchiveEntry
Class Inheritance
All Implemented Interfaces
org.apache.commons.compress.archivers.ArchiveEntry
Imports
java.util.Collections, .Date, .EnumSet, .HashSet, .Set, org.apache.commons.compress.archivers.ArchiveEntry

This class represents an entry in a Dump archive. It consists of the entry's header, the entry's File and any extended attributes.

DumpEntries that are created from the header bytes read from an archive are instantiated with the DumpArchiveEntry( byte[] ) constructor. These entries will be used when extracting from or listing the contents of an archive. These entries have their header filled in using the header bytes. They also set the File to null, since they reference an archive entry not a file.

DumpEntries can also be constructed from nothing but a name. This allows the programmer to construct the entry by hand, for instance when only an InputStream is available for writing to the archive, and the header information is constructed from other information. In this case the header fields are set to defaults and the File is set to null.

The C structure for a Dump Entry's header is:

#define TP_BSIZE    1024          // size of each file block
#define NTREC       10            // number of blocks to write at once
#define HIGHDENSITYTREC 32        // number of blocks to write on high-density tapes
#define TP_NINDIR   (TP_BSIZE/2)  // number if indirect inodes in record
#define TP_NINOS    (TP_NINDIR / sizeof (int32_t))
#define LBLSIZE     16
#define NAMELEN     64

#define OFS_MAGIC     (int) 60011  // old format magic value
#define NFS_MAGIC     (int) 60012  // new format magic value
#define FS_UFS2_MAGIC (int) 0x19540119
#define CHECKSUM      (int) 84446  // constant used in checksum algorithm

struct  s_spcl {
  int32_t c_type;             // record type (see below)
  int32_t c_date;             // date of this dump
  int32_t c_ddate;            // date of previous dump
  int32_t c_volume;           // dump volume number
  u_int32_t c_tapea;          // logical block of this record
  dump_ino_t c_ino;           // number of inode
  int32_t c_magic;            // magic number (see above)
  int32_t c_checksum;         // record checksum
#ifdef  __linux__
  struct  new_bsd_inode c_dinode;
#else
#ifdef sunos
  struct  new_bsd_inode c_dinode;
#else
  struct  dinode  c_dinode;   // ownership and mode of inode
#endif
#endif
  int32_t c_count;            // number of valid c_addr entries
  union u_data c_data;        // see above
  char    c_label[LBLSIZE];   // dump label
  int32_t c_level;            // level of this dump
  char    c_filesys[NAMELEN]; // name of dumpped file system
  char    c_dev[NAMELEN];     // name of dumpped device
  char    c_host[NAMELEN];    // name of dumpped host
  int32_t c_flags;            // additional information (see below)
  int32_t c_firstrec;         // first record on volume
  int32_t c_ntrec;            // blocksize on volume
  int32_t c_extattributes;    // additional inode info (see below)
  int32_t c_spare[30];        // reserved for future uses
} s_spcl;

//
// flag values
//
#define DR_NEWHEADER     0x0001  // new format tape header
#define DR_NEWINODEFMT   0x0002  // new format inodes on tape
#define DR_COMPRESSED    0x0080  // dump tape is compressed
#define DR_METAONLY      0x0100  // only the metadata of the inode has been dumped
#define DR_INODEINFO     0x0002  // [SIC] TS_END header contains c_inos information
#define DR_EXTATTRIBUTES 0x8000

//
// extattributes inode info
//
#define EXT_REGULAR         0
#define EXT_MACOSFNDRINFO   1
#define EXT_MACOSRESFORK    2
#define EXT_XATTR           3

// used for EA on tape
#define EXT2_GOOD_OLD_INODE_SIZE    128
#define EXT2_XATTR_MAGIC        0xEA020000  // block EA
#define EXT2_XATTR_MAGIC2       0xEA020001  // in inode EA

The fields in bold are the same for all blocks. (This permitted multiple dumps to be written to a single tape.)

The C structure for the inode (file) information is:

struct bsdtimeval {           //  **** alpha-*-linux is deviant
  __u32   tv_sec;
  __u32   tv_usec;
};

#define NDADDR      12
#define NIADDR       3

//
// This is the new (4.4) BSD inode structure
// copied from the FreeBSD 2.0 <ufs/ufs/dinode.h> include file
//
struct new_bsd_inode {
  __u16       di_mode;           // file type, standard Unix permissions
  __s16       di_nlink;          // number of hard links to file.
  union {
     __u16       oldids[2];
     __u32       inumber;
  }           di_u;
  u_quad_t    di_size;           // file size
  struct bsdtimeval   di_atime;  // time file was last accessed
  struct bsdtimeval   di_mtime;  // time file was last modified
  struct bsdtimeval   di_ctime;  // time file was created
  __u32       di_db[NDADDR];
  __u32       di_ib[NIADDR];
  __u32       di_flags;          //
  __s32       di_blocks;         // number of disk blocks
  __s32       di_gen;            // generation number
  __u32       di_uid;            // user id (see /etc/passwd)
  __u32       di_gid;            // group id (see /etc/group)
  __s32       di_spare[2];       // unused
};

It is important to note that the header DOES NOT have the name of the file. It can't since hard links mean that you may have multiple file names for a single physical file. You must read the contents of the directory entries to learn the mapping(s) from file name to inode.

The C structure that indicates if a specific block is a real block that contains data or is a sparse block that is not persisted to the disk is:

#define TP_BSIZE    1024
#define TP_NINDIR   (TP_BSIZE/2)

union u_data {
  char    s_addrs[TP_NINDIR]; // 1 => data; 0 => hole in inode
  int32_t s_inos[TP_NINOS];   // table of first inode on each volume
} u_data;

Nested and Inner Type Summary

Modifier and TypeClass and Description
public static enum
pack-priv static class
DumpArchiveEntry.TapeSegmentHeader

Archive entry as stored on tape.

public static enum

Field Summary

Modifier and TypeField and Description
private long
private long
private int
private int
private final DumpArchiveEntry.TapeSegmentHeader
private int
private boolean
private int
private long
private String
private int
private long
private String
private Set<DumpArchiveEntry.PERMISSION>
private String
private long
private final DumpArchiveSummary
summary

Currently unused

private DumpArchiveEntry.TYPE
private int
private int

Constructor Summary

AccessConstructor and Description
public
DumpArchiveEntry()

Default constructor.

public
DumpArchiveEntry(final String
path name
name
,
final String
actual file name.
simpleName
)

Constructor taking only file name.

protected
DumpArchiveEntry(final String
the name
name
,
final String
the simple name
simpleName
,
final int
the ino
ino
,
final DumpArchiveEntry.TYPE
the type
type
)

Constructor taking name, inode and type.

Method Summary

Modifier and TypeMethod and Description
public boolean
equals(final Object
the reference object with which to compare.
o
)

Overrides java.lang.Object.equals.

Indicates whether some other object is "equal to" this one.
public Date

Returns:

the access time
getAccessTime
()

Returns the time the file was last accessed.

public Date

Returns:

the creation time
getCreationTime
()

Gets file creation time.

pack-priv long
getEntrySize()

Returns the size of the entry as read from the archive.

public int

Returns:

the generation
getGeneration
()

Gets the generation of the file.

public int

Returns:

the group id
getGroupId
()

Gets the group id

public int

Returns:

the number of records
getHeaderCount
()

Gets the number of records in this segment.

public int

Returns:

the number of sparse records
getHeaderHoles
()

Gets the number of sparse records in this segment.

public DumpArchiveConstants.SEGMENT_TYPE

Returns:

the segment header
getHeaderType
()

Gets the type of the tape segment header.

public int

Returns:

the ino
getIno
()

Returns the ino of the entry.

public Date

Returns:

the last modified date
getLastModifiedDate
()

Implements org.apache.commons.compress.archivers.ArchiveEntry.getLastModifiedDate.

The last modified date.
public int

Returns:

the access permissions
getMode
()

Gets the access permissions on the entry.

public String

Returns:

the name of the entry.
getName
()

Implements org.apache.commons.compress.archivers.ArchiveEntry.getName.

Returns the name of the entry.
public long

Returns:

the offset
getOffset
()

Gets the offset within the archive

pack-priv String

Returns:

the name of the entry.
getOriginalName
()

Returns the unmodified name of the entry.

public Set<DumpArchiveEntry.PERMISSION>

Returns:

the permissions
getPermissions
()

Returns the permissions on the entry.

public String

Returns:

the path of the entry.
getSimpleName
()

Returns the path of the entry.

public long

Returns:

the size
getSize
()

Implements org.apache.commons.compress.archivers.ArchiveEntry.getSize.

Returns the size of the entry.
public DumpArchiveEntry.TYPE

Returns:

the type
getType
()

Gets the type of the entry.

public int

Returns:

the user id
getUserId
()

Gets the user id.

public int

Returns:

the volume
getVolume
()

Gets the tape volume where this file is located.

public int
hashCode()

Overrides java.lang.Object.hashCode.

Returns a hash code value for the object.
public boolean

Returns:

whether this is a block device
isBlkDev
()

Is this a block device?

public boolean

Returns:

whether this is a character device
isChrDev
()

Is this a character device?

public boolean

Returns:

whether the file has been deleted
isDeleted
()

Has this file been deleted?

public boolean

Returns:

whether this is a directory
isDirectory
()

Implements org.apache.commons.compress.archivers.ArchiveEntry.isDirectory.

Is this a directory?
public boolean

Returns:

whether this is a fifo
isFifo
()

Is this a fifo/pipe?

public boolean

Returns:

whether this is a regular file
isFile
()

Is this a regular file?

public boolean

Returns:

whether this is a socket
isSocket
()

Is this a network device?

public boolean

Returns:

whether this is a sparse record
isSparseRecord
(final int
index of the record to check
idx
)

Is this a sparse record?

pack-priv static DumpArchiveEntry
parse(final byte[]
buffer to read content from
buffer
)

Populate the dump archive entry and tape segment header with the contents of the buffer.

public void
setAccessTime(final Date
the access time
atime
)

Sets the time the file was last accessed.

public void
setCreationTime(final Date
the creation time
ctime
)

Sets the file creation time.

public void
setDeleted(final boolean
whether the file has been deleted
isDeleted
)

Sets whether this file has been deleted.

public void
setGeneration(final int
the generation
generation
)

Sets the generation of the file.

public void
setGroupId(final int
the group id
gid
)

Sets the group id.

public void
setLastModifiedDate(final Date
the last modified time
mtime
)

Sets the time the file was last modified.

public void
setMode(final int
the access permissions
mode
)

Sets the access permissions on the entry.

public final void
setName(String
the name
name
)

Sets the name of the entry.

public void
setOffset(final long
the offset
offset
)

Sets the offset within the archive.

protected void
setSimpleName(final String
the simple name
simpleName
)

Sets the path of the entry.

public void
setSize(final long
the size
size
)

Sets the size of the entry.

public void
setType(final DumpArchiveEntry.TYPE
the type
type
)

Sets the type of the entry.

public void
setUserId(final int
the user id
uid
)

Sets the user id.

public void
setVolume(final int
the volume
volume
)

Sets the tape volume.

public String
toString()

Overrides java.lang.Object.toString.

Returns a string representation of the object.
pack-priv void
update(final byte[] buffer)

Update entry with information from next tape segment header.

Inherited from java.lang.Object:
clonefinalizegetClassnotifynotifyAllwaitwaitwait