Join Now
Quality Rating:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)
Expertise Level:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)

This page was last modified 11:25, 14 May 2008.

CS000948 - Getting trailer and header info from GZIP files

From Forum Nokia Wiki


ID CS000948 Creation date May 14, 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 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.

Related Discussions
Thread Thread Starter Forum Replies Last Post
PCM to wav gpalvia Symbian Media (Graphics & Sounds) 2 2008-02-04 14:08
How can activate the Thumb build configuration in vc.Net2003 manjunaths Symbian User Interface 0 2006-12-13 12:27
cell id ......error in compiling vvsnaresh General Symbian C++ 6 2005-03-15 12:00
css related bug in 7610 dr.seltsam Browsing and Mark-ups 1 2004-07-09 15:40
Removal of header from JPEG vinay_singh General Symbian C++ 4 2008-02-08 18:06
 
Powered by MediaWiki
     
     RDF Facets:
     
     
     qfnZtypeQUqfnTypeZCommunityContentQ
     qfnZtypeQUqfnTypeZWebpageQ
     qfnZtypeQUqfnTypeZWikiContentQ
     qmarsZlanguageQUxhttpE3aE2fE2fswE2enokiaE2ecomE2flanguageE2d1E2fenX