Uudecode Binary Data
Usage: uudecode [-h-] [ file1 file2 ... ]
Uuencode and Uudecode are used to encode arbitrary binary
data into a sequence consisting solely of printable ASCII
characters, thus allowing the data to be sent over mail
systems, etc., that cannot handle binary data.
Uuencode reads from the source file (or stdin if no source
file is specified), writing the encoded version to stdout.
Uudecode reads the encoded file (or stdin), strips off any
leading and trailing lines and recreates the original file,
giving it the name that had been specified to uuencode as
the decode_pathname parameter.
Uuencode format:
The encoded form consists of a header line followed by a
number of body lines and a trailer line. The header is
of the form:
begin <mode> <decode_pathname>
where the <mode> field indicates the read/write permissions
to be given to the file. The file ends with a line of the
form:
end
Both these lines shall have no preceding or trailing
text or white space.
The POSIX standard specifies that the "end" line should
be the only indicator of the end of data. Most existing
uudecode implementations do not adhere to this specification,
however. Instead, they require that there be an immediately
preceding line marked as containing 0 bytes of data. To
ensure compatibility with these flawed uudecodes, this
uuencode/uudecode pair will write that dummy line when
encoding and ignore it when decoding.
Data is encoded three bytes at a time into four printable
ASCII characters by splitting the input at 6 bit intervals
into 4 bytes, each containing data in only the lower 6 bits.
The hex value 0x20 is then added to each byte, producing
a value in the range 0x20 to 0x5f, which are all printable
ASCII characters. Thus, three bytes A, B and C of raw data
are converted to the four ASCII characters:
0x20 + (( A >> 2 ) & 0x3f)
0x20 + (((A << 4) | ((B >> 4) & 0xf)) & 0x3f)
0x20 + (((B << 2) | ((C >> 6) & 0x3)) & 0x3f)
0x20 + (( C ) & 0x3f)
The encoded data is arranged into lines of no more than
60 characters (representing at most 45 bytes of raw data)
preceded by a length character, equal to the number of
raw characters encoded plus 0x20.
Some existing uuencode implementations do not correctly
follow this specification. If the resulting character
is a space, they'll write a backquote instead. Their
decoding procedure is to extract only the low 7 bits
after subtracting 0x20. This extra step is, fortunately,
innocuous on correctly encoded data, so for compatibility
with existing uuencodes, this version of uudecode performs
that mask operation also.
Although not required by the POSIX standard, this version
of uudecode has a number of enhancements:
1. It will accept input streams containing any number of
uuencoded files concatenated together. Each will be
properly extracted as a separate file.
2. If any directory levels in the output are missing,
an attempt will be made to create them.
3. The tilde is recognized as a home directory reference
in the decode pathname.
Options:
-h Help. (This screen.)
-- End of options.
|