| author | Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> | 
| Tue, 26 Jan 2010 13:13:38 +0200 | |
| changeset 13 | 46fffbe7b5a7 | 
| parent 9 | 96e5fb8b040d | 
| permissions | -rw-r--r-- | 
| 9 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 1 | // Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies). | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 2 | // All rights reserved. | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 3 | // This component and the accompanying materials are made available | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 4 | // under the terms of the License "Eclipse Public License v1.0" | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 5 | // which accompanies this distribution, and is available | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 6 | // at the URL "http://www.eclipse.org/legal/epl-v10.html". | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 7 | // | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 8 | // Initial Contributors: | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 9 | // Nokia Corporation - initial contribution. | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 10 | // | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 11 | // Contributors: | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 12 | // | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 13 | // Description: | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 14 | // e32test\misc\unzip.cpp | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 15 | // | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 16 | // | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 17 | |
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 18 | #include "unzip.h" | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 19 | #include "inflate.h" | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 20 | |
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 21 | //#include <e32test.h> | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 22 | //GLREF_C RTest test; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 23 | |
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 24 | const TInt INBUFSIZE=0x2000; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 25 | |
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 26 | TZipInfo* TheZipInfo; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 27 | |
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 28 | #define Z (*TheZipInfo) | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 29 | |
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 30 | extern "C" {
 | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 31 | |
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 32 | extern int inflate(); | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 33 | |
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 34 | TUint8 inbuf[INBUFSIZE]; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 35 | TUint8* volatile inptr; /* index of next byte to be processed in inbuf */ | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 36 | TUint8* volatile inbuf_end; /* pointer to last valid input byte + 1 */ | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 37 | TUint8* volatile outptr; /* pointer to output data */ | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 38 | |
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 39 | TAny* malloc(TUint aSize) | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 40 | 	{
 | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 41 | return MALLOC((TInt)aSize); | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 42 | } | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 43 | |
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 44 | void free(TAny* aPtr) | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 45 | 	{
 | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 46 | FREE(aPtr); | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 47 | } | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 48 | |
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 49 | TUint8 fill_inbuf() | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 50 | 	{
 | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 51 | WAIT_FOR_ANY_REQUEST(); // wait for a block from the file | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 52 | TUint w=Z.iFileBufW; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 53 | TInt avail=(TInt)w-(TInt)Z.iFileBufR; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 54 | TInt amount=(avail>(TInt)INBUFSIZE)?INBUFSIZE:avail; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 55 | TInt rix=(TInt)(Z.iFileBufR & (Z.iFileBufSize-1)); | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 56 | memcpy(inbuf,Z.iFileBuf+rix,amount); | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 57 | Z.iFileBufR+=amount; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 58 | inptr=inbuf; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 59 | inbuf_end=inbuf+amount; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 60 | return *inptr++; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 61 | } | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 62 | |
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 63 | void process_block(int error) | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 64 | 	{
 | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 65 | AcceptUnzippedBlock(Z, (TUint8*&)outptr, error); | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 66 | } | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 67 | } | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 68 | |
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 69 | TInt ParseZipHeader(TZipInfo& a) | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 70 | 	{
 | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 71 | TInt avail=inbuf_end-inptr; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 72 | if (avail<KZipLocalHeaderLen) | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 73 | return KErrCorrupt; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 74 | TUint sig=*(TUint*)inptr; // OK since at beginning of buffer | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 75 | inptr+=6; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 76 | if (sig!=KZipSignature) | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 77 | return KErrCorrupt; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 78 | a.iFlags=*inptr++; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 79 | ++inptr; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 80 | a.iMethod=*inptr++; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 81 | inptr+=5; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 82 | memcpy(&a.iCrc,inptr,12); // crc, comp size, uncomp size | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 83 | inptr+=12; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 84 | a.iFileNameLength=*inptr | (inptr[1]<<8); | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 85 | inptr+=2; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 86 | a.iExtraLength=*inptr | (inptr[1]<<8); | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 87 | inptr+=2; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 88 | if (a.iFlags & (CRPFLG|EXTFLG)) | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 89 | return KErrNotSupported; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 90 | if (a.iMethod!=STORED && a.iMethod!=DEFLATED) | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 91 | return KErrNotSupported; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 92 | if (avail<KZipLocalHeaderLen+a.iFileNameLength+a.iExtraLength) | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 93 | return KErrCorrupt; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 94 | a.iNameOffset=30; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 95 | a.iDataOffset=30+a.iFileNameLength+a.iExtraLength; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 96 | TInt fnamelen=Min(a.iFileNameLength,a.iName.MaxLength()); | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 97 | TPtrC8 fileNamePtr(inptr,fnamelen); | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 98 | a.iName.Copy(fileNamePtr); | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 99 | return KErrNone; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 100 | } | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 101 | |
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 102 | TInt UnzipThread(TAny* aInfo) | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 103 | 	{
 | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 104 | TheZipInfo=(TZipInfo*)aInfo; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 105 | Z.iProcessedHeader=KRequestPending; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 106 | inptr=inbuf; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 107 | inbuf_end=inbuf; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 108 | fill_inbuf(); | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 109 | inptr=inbuf; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 110 | TInt r=ParseZipHeader(Z); | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 111 | if (r!=KErrNone) | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 112 | return r; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 113 | inptr=inbuf+Z.iDataOffset; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 114 | Z.iHeaderDone=1; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 115 | WAIT_FOR_REQUEST(Z.iProcessedHeader); | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 116 | outptr=Z.iOutBuf; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 117 | r=inflate(); | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 118 | r=UnzipComplete(Z, outptr, r); | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 119 | return r; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 120 | } | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 121 | |
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 122 | TInt InitInfo(TZipInfo& a) | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 123 | 	{
 | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 124 | a.iInBufSize=INBUFSIZE; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 125 | a.iFileBufR=0; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 126 | a.iFileBufW=0; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 127 | a.iFileBuf=NULL; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 128 | a.iProcessedHeader=KRequestPending; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 129 | a.iHeaderDone=0; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 130 | a.iOutBuf=NULL; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 131 | a.iThreadHandle=0; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 132 | a.iThreadStatus=KRequestPending; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 133 | return KErrNone; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 134 | } | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 135 | |
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 136 | TInt ReadBlockToBuffer(TZipInfo& a) | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 137 | 	{
 | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 138 | TInt n; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 139 | for (n=0; n<10 && a.iFileBufW-a.iFileBufR==a.iFileBufSize; ++n) | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 140 | 		{
 | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 141 | //		test.Printf(_L("FULL!"));
 | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 142 | DELAY(20000); // buffer full so wait a bit | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 143 | } | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 144 | if (a.iFileBufW-a.iFileBufR==a.iFileBufSize) | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 145 | return KErrTimedOut; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 146 | // TInt avail=(TInt)a.iFileBufSize+(TInt)a.iFileBufR-(TInt)a.iFileBufW; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 147 | // test(avail>=(TInt)INBUFSIZE); | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 148 | TInt req_len=Min(a.iRemain,INBUFSIZE); | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 149 | TInt len=req_len; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 150 | TInt wix=(TInt)(a.iFileBufW & (a.iFileBufSize-1)); | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 151 | TInt r=ReadInputData(a.iFileBuf+wix,len); | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 152 | if (len>req_len) | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 153 | len=req_len; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 154 | if (r==KErrNone) | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 155 | 		{
 | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 156 | a.iFileBufW+=len; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 157 | a.iRemain-=len; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 158 | } | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 159 | return r; | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 160 | } | 
| 
96e5fb8b040d
Revision: 200951
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 161 |