×
Namespaces

Variants
Actions
Revision as of 23:13, 9 October 2008 by extkbeditor1 (Talk | contribs)

Archived:Getting trailer and header info from GZIP files using Symbian C++

From Nokia Developer Wiki
Jump to: navigation, search


Template:KBCS

Article Metadata
Tested with
Devices(s): Nokia N93
Compatibility
Platform(s): S60 3rd Edition, FP1
S60 3rd Edition FP1
Article
Keywords: RFile, EZGZipFile, TEZGZipHeader, TEZGZipTrailer, RFile::Open(),EZGZipFile::IsGzipFileL(), EZGZipFile::LocateAndReadTrailerL(), EZGZipFile::ReadHeaderL(),EZGZipFile::EFText,EZGZipFile::EFHcrc, EZGZipFile::EFExtra,EZGZipFile::EFName,EZGZipFile::EFComment
Created: (14 May 2008)
Last edited: extkbeditor1 (09 Oct 2008)

Overview

This snippet shows how to get the trailer and the header info from GZIP files.

The trailer part of GZIP file should contain the following data:

  • CRC32
  • Input size (calculated from the original uncompressed data)

The actual GZIP header is defined to contain the 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

CS000949 - Compressing and decompressing GZIP files

The GZIP format is specified in http://www.faqs.org/rfcs/rfc1952.html.

170 page views in the last 30 days.
×