zip.patch

Abdelghani Omari, 05/06/2017 04:50 PM

Download (1.72 KB)

View differences:

UnZip.cpp (working copy)
40 40
	for(int i = 0; i < entries; i++) {
41 41
		if(zip->Get32le() != 0x02014b50 && zip->IsEof())
42 42
			return;
43
		File& f = file.Add();
43
		File f;
44 44
		zip->Get16le();
45 45
		zip->Get16le();
46 46
		f.bit = zip->Get16le();  // general purpose bit flag
......
58 58
		zip->Get32le(); // external file attributes
59 59
		f.offset = zip->Get32le();
60 60
		f.path = zip->Get(fnlen);
61
		file.Add(f);
61 62
		zip->SeekCur(extralen + commentlen);
62 63
		if(zip->IsEof() || zip->IsError())
63 64
			return;
......
141 142
	return ReadFile(ss, progress) ? ss.GetResult() : String::GetVoid();
142 143
}
143 144

  
145
String UnZip::ReadFile(const char* path, Gate<int, int> progress)
146
{
147
	for(int i = 0; i < file.GetCount(); i++)
148
	{
149
		if(file[i].path.IsEqual(path))
150
		{
151
			Seek(i);
152
			return ReadFile( progress );
153
		}
154
	}
155
	
156
	return String::GetVoid();
157
}
158

  
159
Vector<String> UnZip::Search(String pattern)
160
{
161
	Vector<String> v;
162
	for(const auto& f: file)
163
	{
164
		if(!f.path.EndsWith("/") && PatternMatch(pattern, f.path))
165
		{
166
			v.Add(f.path);
167
		}
168
	}
169
	
170
	return v;
171
}
172

  
173

  
144 174
void UnZip::Create(Stream& _zip)
145 175
{
146 176
	zip = &_zip;
zip.h (working copy)
50 50
	void   SkipFile()             { current++; }
51 51
	bool   ReadFile(Stream& out, Gate<int, int> progress = Null);
52 52
	String ReadFile(Gate<int, int> progress = Null);
53
	String ReadFile(const char* path, Gate<int, int> progress = Null);
54
	Vector<String> Search(String pattern);
53 55
	
54 56
	dword  GetPos() const;
55 57