com.ice.tar

Class TarHeader

Implemented Interfaces:
Cloneable

public class TarHeader
extends Object
implements Cloneable

This class encapsulates the Tar Entry Header used in Tar Archives. The class also holds a number of tar constants, used mostly in headers.
Author:
Timothy Gerard Endres,

Field Summary

static int
CHKSUMLEN
The length of the checksum field in a header buffer.
static int
DEVLEN
The length of the devices field in a header buffer.
static int
GIDLEN
The length of the group id field in a header buffer.
static int
GNAMELEN
The length of the group name field in a header buffer.
static String
GNU_TMAGIC
The magic tag representing a GNU tar archive.
static byte
LF_BLK
Block device file type.
static byte
LF_CHR
Character device file type.
static byte
LF_CONTIG
Contiguous file type.
static byte
LF_DIR
Directory file type.
static byte
LF_FIFO
FIFO (pipe) file type.
static byte
LF_LINK
Link file type.
static byte
LF_NORMAL
Normal file type.
static byte
LF_OLDNORM
LF_ constants represent the "link flag" of an entry, or more commonly, the "entry type".
static byte
LF_SYMLINK
Symbolic link file type.
static int
MAGICLEN
The length of the magic field in a header buffer.
static int
MODELEN
The length of the mode field in a header buffer.
static int
MODTIMELEN
The length of the modification time field in a header buffer.
static int
NAMELEN
The length of the name field in a header buffer.
static int
NAMEOFFSET
The offset of the name field in a header buffer.
static int
PREFIXLEN
The length of the name prefix field in a header buffer.
static int
PREFIXOFFSET
The offset of the name prefix field in a header buffer.
static int
SIZELEN
The length of the size field in a header buffer.
static String
TMAGIC
The magic tag representing a POSIX tar archive.
static int
UIDLEN
The length of the user id field in a header buffer.
static int
UNAMELEN
The length of the user name field in a header buffer.
int
checkSum
The entry's checksum.
int
devMajor
The entry's major device number.
int
devMinor
The entry's minor device number.
int
groupId
The entry's group id.
StringBuffer
groupName
The entry's group name.
byte
linkFlag
The entry's link flag.
StringBuffer
linkName
The entry's link name.
StringBuffer
magic
The entry's magic tag.
long
modTime
The entry's modification time.
int
mode
The entry's permission mode.
StringBuffer
name
The entry's name.
long
size
The entry's size.
int
userId
The entry's user id.
StringBuffer
userName
The entry's user name.

Constructor Summary

TarHeader()

Method Summary

Object
clone()
TarHeaders can be cloned.
static int
getCheckSumOctalBytes(long value, byte[] buf, int offset, int length)
Parse the checksum octal integer from a header buffer.
static int
getFileNameBytes(String newName, byte[] outbuf)
This method, like getNameBytes(), is intended to place a name into a TarHeader's buffer.
static int
getLongOctalBytes(long value, byte[] buf, int offset, int length)
Parse an octal long integer from a header buffer.
String
getName()
Get the name of this entry.
static int
getNameBytes(StringBuffer name, byte[] buf, int offset, int length)
Move the bytes from the name StringBuffer into the header's buffer.
static int
getOctalBytes(long value, byte[] buf, int offset, int length)
Parse an octal integer from a header buffer.
static StringBuffer
parseFileName(byte[] header)
Parse a file name from a header buffer.
static StringBuffer
parseName(byte[] header, int offset, int length)
Parse an entry name from a header buffer.
static long
parseOctal(byte[] header, int offset, int length)
Parse an octal string from a header buffer.

Field Details

CHKSUMLEN

public static final int CHKSUMLEN
The length of the checksum field in a header buffer.
Field Value:
8

DEVLEN

public static final int DEVLEN
The length of the devices field in a header buffer.
Field Value:
8

GIDLEN

public static final int GIDLEN
The length of the group id field in a header buffer.
Field Value:
8

GNAMELEN

public static final int GNAMELEN
The length of the group name field in a header buffer.
Field Value:
32

GNU_TMAGIC

public static final String GNU_TMAGIC
The magic tag representing a GNU tar archive.

LF_BLK

public static final byte LF_BLK
Block device file type.
Field Value:
52

LF_CHR

public static final byte LF_CHR
Character device file type.
Field Value:
51

LF_CONTIG

public static final byte LF_CONTIG
Contiguous file type.
Field Value:
55

LF_DIR

public static final byte LF_DIR
Directory file type.
Field Value:
53

LF_FIFO

public static final byte LF_FIFO
FIFO (pipe) file type.
Field Value:
54

LF_LINK

public static final byte LF_LINK
Link file type.
Field Value:
49

LF_NORMAL

public static final byte LF_NORMAL
Normal file type.
Field Value:
48

LF_OLDNORM

public static final byte LF_OLDNORM
LF_ constants represent the "link flag" of an entry, or more commonly, the "entry type". This is the "old way" of indicating a normal file.
Field Value:
0

LF_SYMLINK

public static final byte LF_SYMLINK
Symbolic link file type.
Field Value:
50

MAGICLEN

public static final int MAGICLEN
The length of the magic field in a header buffer.
Field Value:
8

MODELEN

public static final int MODELEN
The length of the mode field in a header buffer.
Field Value:
8

MODTIMELEN

public static final int MODTIMELEN
The length of the modification time field in a header buffer.
Field Value:
12

NAMELEN

public static final int NAMELEN
The length of the name field in a header buffer.
Field Value:
100

NAMEOFFSET

public static final int NAMEOFFSET
The offset of the name field in a header buffer.
Field Value:
0

PREFIXLEN

public static final int PREFIXLEN
The length of the name prefix field in a header buffer.
Field Value:
155

PREFIXOFFSET

public static final int PREFIXOFFSET
The offset of the name prefix field in a header buffer.
Field Value:
345

SIZELEN

public static final int SIZELEN
The length of the size field in a header buffer.
Field Value:
12

TMAGIC

public static final String TMAGIC
The magic tag representing a POSIX tar archive.

UIDLEN

public static final int UIDLEN
The length of the user id field in a header buffer.
Field Value:
8

UNAMELEN

public static final int UNAMELEN
The length of the user name field in a header buffer.
Field Value:
32

checkSum

public int checkSum
The entry's checksum.

devMajor

public int devMajor
The entry's major device number.

devMinor

public int devMinor
The entry's minor device number.

groupId

public int groupId
The entry's group id.

groupName

public StringBuffer groupName
The entry's group name.

linkFlag

public byte linkFlag
The entry's link flag.

linkName

public StringBuffer linkName
The entry's link name.

magic

public StringBuffer magic
The entry's magic tag.

modTime

public long modTime
The entry's modification time.

mode

public int mode
The entry's permission mode.

name

public StringBuffer name
The entry's name.

size

public long size
The entry's size.

userId

public int userId
The entry's user id.

userName

public StringBuffer userName
The entry's user name.

Constructor Details

TarHeader

public TarHeader()

Method Details

clone

public Object clone()
TarHeaders can be cloned.

getCheckSumOctalBytes

public static int getCheckSumOctalBytes(long value,
                                        byte[] buf,
                                        int offset,
                                        int length)
Parse the checksum octal integer from a header buffer.
Parameters:
offset - The offset into the buffer from which to parse.
length - The number of header bytes to parse.
Returns:
The integer value of the entry's checksum.

getFileNameBytes

public static int getFileNameBytes(String newName,
                                   byte[] outbuf)
            throws InvalidHeaderException
This method, like getNameBytes(), is intended to place a name into a TarHeader's buffer. However, this method is sophisticated enough to recognize long names (name.length() > NAMELEN). In these cases, the method will break the name into a prefix and suffix and place the name in the header in 'ustar' format. It is up to the TarEntry to manage the "entry header format". This method assumes the name is valid for the type of archive being generated.
Parameters:
newName - The new name to place into the header buffer.
outbuf - The buffer containing the entry header to modify.
Returns:
The current offset in the tar header (always TarHeader.NAMELEN).
Throws:
InvalidHeaderException - If the name will not fit in the header.

getLongOctalBytes

public static int getLongOctalBytes(long value,
                                    byte[] buf,
                                    int offset,
                                    int length)
Parse an octal long integer from a header buffer.
Parameters:
offset - The offset into the buffer from which to parse.
length - The number of header bytes to parse.
Returns:
The long value of the octal bytes.

getName

public String getName()
Get the name of this entry.
Returns:
Teh entry's name.

getNameBytes

public static int getNameBytes(StringBuffer name,
                               byte[] buf,
                               int offset,
                               int length)
Move the bytes from the name StringBuffer into the header's buffer.
Parameters:
offset - The offset into the buffer at which to store.
length - The number of header bytes to store.
Returns:
The new offset (offset + length).

getOctalBytes

public static int getOctalBytes(long value,
                                byte[] buf,
                                int offset,
                                int length)
Parse an octal integer from a header buffer.
Parameters:
offset - The offset into the buffer from which to parse.
length - The number of header bytes to parse.
Returns:
The integer value of the octal bytes.

parseFileName

public static StringBuffer parseFileName(byte[] header)
Parse a file name from a header buffer. This is different from parseName() in that is recognizes 'ustar' names and will handle adding on the "prefix" field to the name. Contributed by Dmitri Tikhonov <dxt2431@yahoo.com>
Parameters:
header - The header buffer from which to parse.
Returns:
The header's entry name.

parseName

public static StringBuffer parseName(byte[] header,
                                     int offset,
                                     int length)
            throws InvalidHeaderException
Parse an entry name from a header buffer.
Parameters:
header - The header buffer from which to parse.
offset - The offset into the buffer from which to parse.
length - The number of header bytes to parse.
Returns:
The header's entry name.

parseOctal

public static long parseOctal(byte[] header,
                              int offset,
                              int length)
            throws InvalidHeaderException
Parse an octal string from a header buffer. This is used for the file permission mode value.
Parameters:
header - The header buffer from which to parse.
offset - The offset into the buffer from which to parse.
length - The number of header bytes to parse.
Returns:
The long value of the octal string.

This software has been placed into the public domain.