~ubuntu-branches/ubuntu/feisty/clamav/feisty

« back to all changes in this revision

Viewing changes to libclamav/7z/Archive/7z/7zItem.c

  • Committer: Bazaar Package Importer
  • Author(s): Kees Cook
  • Date: 2007-02-20 10:33:44 UTC
  • mto: This revision was merged to the branch mainline in revision 16.
  • Revision ID: james.westby@ubuntu.com-20070220103344-zgcu2psnx9d98fpa
Tags: upstream-0.90
ImportĀ upstreamĀ versionĀ 0.90

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* 7zItem.c -- 7z Items
2
 
2008-10-04 : Igor Pavlov : Public domain */
3
 
 
4
 
#include "7zItem.h"
5
 
 
6
 
void SzCoderInfo_Init(CSzCoderInfo *p)
7
 
{
8
 
  Buf_Init(&p->Props);
9
 
}
10
 
 
11
 
void SzCoderInfo_Free(CSzCoderInfo *p, ISzAlloc *alloc)
12
 
{
13
 
  Buf_Free(&p->Props, alloc);
14
 
  SzCoderInfo_Init(p);
15
 
}
16
 
 
17
 
void SzFolder_Init(CSzFolder *p)
18
 
{
19
 
  p->Coders = 0;
20
 
  p->BindPairs = 0;
21
 
  p->PackStreams = 0;
22
 
  p->UnpackSizes = 0;
23
 
  p->NumCoders = 0;
24
 
  p->NumBindPairs = 0;
25
 
  p->NumPackStreams = 0;
26
 
  p->UnpackCRCDefined = 0;
27
 
  p->UnpackCRC = 0;
28
 
  p->NumUnpackStreams = 0;
29
 
}
30
 
 
31
 
void SzFolder_Free(CSzFolder *p, ISzAlloc *alloc)
32
 
{
33
 
  UInt32 i;
34
 
  if (p->Coders)
35
 
    for (i = 0; i < p->NumCoders; i++)
36
 
      SzCoderInfo_Free(&p->Coders[i], alloc);
37
 
  IAlloc_Free(alloc, p->Coders);
38
 
  IAlloc_Free(alloc, p->BindPairs);
39
 
  IAlloc_Free(alloc, p->PackStreams);
40
 
  IAlloc_Free(alloc, p->UnpackSizes);
41
 
  SzFolder_Init(p);
42
 
}
43
 
 
44
 
UInt32 SzFolder_GetNumOutStreams(CSzFolder *p)
45
 
{
46
 
  UInt32 result = 0;
47
 
  UInt32 i;
48
 
  for (i = 0; i < p->NumCoders; i++)
49
 
    result += p->Coders[i].NumOutStreams;
50
 
  return result;
51
 
}
52
 
 
53
 
int SzFolder_FindBindPairForInStream(CSzFolder *p, UInt32 inStreamIndex)
54
 
{
55
 
  UInt32 i;
56
 
  for (i = 0; i < p->NumBindPairs; i++)
57
 
    if (p->BindPairs[i].InIndex == inStreamIndex)
58
 
      return i;
59
 
  return -1;
60
 
}
61
 
 
62
 
 
63
 
int SzFolder_FindBindPairForOutStream(CSzFolder *p, UInt32 outStreamIndex)
64
 
{
65
 
  UInt32 i;
66
 
  for (i = 0; i < p->NumBindPairs; i++)
67
 
    if (p->BindPairs[i].OutIndex == outStreamIndex)
68
 
      return i;
69
 
  return -1;
70
 
}
71
 
 
72
 
UInt64 SzFolder_GetUnpackSize(CSzFolder *p)
73
 
{
74
 
  int i = (int)SzFolder_GetNumOutStreams(p);
75
 
  if (i == 0)
76
 
    return 0;
77
 
  for (i--; i >= 0; i--)
78
 
    if (SzFolder_FindBindPairForOutStream(p, i) < 0)
79
 
      return p->UnpackSizes[i];
80
 
  /* throw 1; */
81
 
  return 0;
82
 
}
83
 
 
84
 
void SzFile_Init(CSzFileItem *p)
85
 
{
86
 
  p->HasStream = 1;
87
 
  p->IsDir = 0;
88
 
  p->IsAnti = 0;
89
 
  p->FileCRCDefined = 0;
90
 
  p->MTimeDefined = 0;
91
 
  p->Name = 0;
92
 
}
93
 
 
94
 
static void SzFile_Free(CSzFileItem *p, ISzAlloc *alloc)
95
 
{
96
 
  IAlloc_Free(alloc, p->Name);
97
 
  SzFile_Init(p);
98
 
}
99
 
 
100
 
void SzAr_Init(CSzAr *p)
101
 
{
102
 
  p->PackSizes = 0;
103
 
  p->PackCRCsDefined = 0;
104
 
  p->PackCRCs = 0;
105
 
  p->Folders = 0;
106
 
  p->Files = 0;
107
 
  p->NumPackStreams = 0;
108
 
  p->NumFolders = 0;
109
 
  p->NumFiles = 0;
110
 
}
111
 
 
112
 
void SzAr_Free(CSzAr *p, ISzAlloc *alloc)
113
 
{
114
 
  UInt32 i;
115
 
  if (p->Folders)
116
 
    for (i = 0; i < p->NumFolders; i++)
117
 
      SzFolder_Free(&p->Folders[i], alloc);
118
 
  if (p->Files)
119
 
    for (i = 0; i < p->NumFiles; i++)
120
 
      SzFile_Free(&p->Files[i], alloc);
121
 
  IAlloc_Free(alloc, p->PackSizes);
122
 
  IAlloc_Free(alloc, p->PackCRCsDefined);
123
 
  IAlloc_Free(alloc, p->PackCRCs);
124
 
  IAlloc_Free(alloc, p->Folders);
125
 
  IAlloc_Free(alloc, p->Files);
126
 
  SzAr_Init(p);
127
 
}