Archived:Getting trailer and header info from GZIP files using Symbian C++
| ID | Creation date | May 6, 2008 | |
| Platform | S60 3rd Edition, FP1 | Tested on devices | Nokia N93 |
| Category | Symbian C++ | Subcategory | Files/Data |
| Keywords (APIs, classes, methods, functions): RFile, EZGZipFile, TEZGZipHeader, TEZGZipTrailer, RFile::Open(),EZGZipFile::IsGzipFileL(), EZGZipFile::LocateAndReadTrailerL(), EZGZipFile::ReadHeaderL(),EZGZipFile::EFText,EZGZipFile::EFHcrc, EZGZipFile::EFExtra,EZGZipFile::EFName,EZGZipFile::EFComment |
Overview
This snippet shows how to get the trailer and the header info from gzip files.
The trailer part of gzip file should contain following data:
- CRC32
- input size (calculated from the original uncompressed data)
The actual gzip header is defined to contain following fields:
- fixed value for ID1 = 31
- fixed value for ID2 = 139
- compression method (8 is the standard)
- flags (0 = no flags are set)
- modification time (time stamp in Unix format)
- extra flags (maximum compression - fastest algorithm)
- Operating System
This snippet can be self-signed.
MMP file
The following libraries are required:
LIBRARY efsrv.lib
LIBRARY ezlib.lib
Header file
Source file
#include <ezgzip.h>
#include <f32file.h>
void GetGZipFileTrailerAndHeaderInfoL(RFs& aRfs, const TDesC& aFileName)
{
RFile file;
TEZGZipHeader header;
TEZGZipTrailer trailer;
if (!EZGZipFile::IsGzipFileL(aRfs,aFileName))
{
_LIT(KIsNotGZipFile,"File:%S is not in GZip format\n");
console->Printf(KIsNotGZipFile,&aFileName);
console->Getch();
User::Leave(KErrGeneral);
}
EZGZipFile::LocateAndReadTrailerL(aRfs, aFileName, trailer);
_LIT(KTrailer,"CRC32 = %d size = %d\n");
console->Printf(KTrailer,trailer.iCrc32,trailer.iSize);
User::LeaveIfError(file.Open(aRfs,aFileName,EFileStream | EFileRead | EFileShareAny));
EZGZipFile::ReadHeaderL(file, header);
_LIT(KFileId1,"ID1 = %d\n");
console->Printf(KFileId1,header.iId1);
_LIT(KFileId2,"ID2 = %d\n");
console->Printf(KFileId2,header.iId2);
_LIT(KCompressionMethod,"compression method = %d\n");
console->Printf(KCompressionMethod,header.iCompressionMethod);
_LIT(KFlags,"flags = %d\n");
console->Printf(KFlags,header.iFlags);
_LIT(KTimeStamp,"time stamp = %d\n");
console->Printf(KTimeStamp,header.iTime);
_LIT(KExtraFlags,"extra flags %d\n");
console->Printf(KExtraFlags,header.iExtraFlags);
_LIT(KOS,"OS %d\n");
console->Printf(KOS,header.iOs);
if (header.iFlags & EZGZipFile::EFText)
{
_LIT(KText,"text flag set\n");
console->Printf(KText);
}
if (header.iFlags & EZGZipFile::EFHcrc)
{
_LIT(KCrc16,"CRC16 = %d\n");
console->Printf(KCrc16,header.iCrc);
}
if (header.iFlags & EZGZipFile::EFExtra)
{
_LIT(KExtraLength,"extra length %d\n");
console->Printf(KExtraLength,header.iXlen);
HBufC *buf = HBufC::NewLC(header.iExtra->Length());
buf->Des().Copy(*header.iExtra);
console->Printf(*buf);
CleanupStack::PopAndDestroy(); //buf
}
if (header.iFlags & EZGZipFile::EFName)
{
_LIT(KFName,"fname: %S\n");
HBufC *buf = HBufC::NewLC(header.iFname->Length());
buf->Des().Copy(*header.iFname);
console->Printf(KFName,buf);
CleanupStack::PopAndDestroy(); //buf
}
if (header.iFlags & EZGZipFile::EFComment)
{
_LIT(KComment,"comment: %S\n");
HBufC *buf = HBufC::NewLC(header.iComment->Length());
buf->Des().Copy(*header.iComment);
console->Printf(KComment,buf);
CleanupStack::PopAndDestroy(); //buf
}
}
Postconditions
The trailer and header info from the given gzip file is printed to the console.
See also
Compressing_and_decompressing_gzip_files
The gzip format is specified in the page http://www.faqs.org/rfcs/rfc1952.html.

