Skip to content

Commit 53fad70

Browse files
author
Matthias Güdemann
committed
change from vector indices to map
1 parent b473638 commit 53fad70

File tree

4 files changed

+20
-35
lines changed

4 files changed

+20
-35
lines changed

src/java_bytecode/jar_file.cpp

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ void jar_filet::open(
6969
std::size_t number_of_files=
7070
mz_zip_reader_get_num_files(&zip);
7171

72-
size_t filtered_index=0;
7372
for(std::size_t i=0; i<number_of_files; i++)
7473
{
7574
mz_uint filename_length=mz_zip_reader_get_filename(&zip, i, nullptr, 0);
@@ -89,9 +88,10 @@ void jar_filet::open(
8988
add_file|=set_matcher.find(file_name)!=set_matcher.end();
9089
if(add_file)
9190
{
92-
index.push_back(file_name);
93-
filtered_jar[filtered_index]=i;
94-
filtered_index++;
91+
if(has_suffix(file_name, ".class"))
92+
status() << "read class file " << file_name
93+
<< " from " << filename << eom;
94+
filtered_jar[file_name]=i;
9595
}
9696
delete[] filename_char;
9797
}
@@ -131,16 +131,17 @@ Function: jar_filet::get_entry
131131
132132
\*******************************************************************/
133133

134-
std::string jar_filet::get_entry(std::size_t i)
134+
std::string jar_filet::get_entry(const irep_idt &name)
135135
{
136136
if(!mz_ok)
137137
return std::string("");
138138

139-
assert(i<index.size());
140-
141139
std::string dest;
142140

143-
size_t real_index=filtered_jar[i];
141+
auto entry=filtered_jar.find(name);
142+
assert(entry!=filtered_jar.end());
143+
144+
size_t real_index=entry->second;
144145
mz_zip_archive_file_stat file_stat;
145146
memset(&file_stat, 0, sizeof(file_stat));
146147
mz_bool stat_ok=mz_zip_reader_file_stat(&zip, real_index, &file_stat);
@@ -173,24 +174,11 @@ Function: jar_filet::get_manifest
173174

174175
jar_filet::manifestt jar_filet::get_manifest()
175176
{
176-
std::size_t i=0;
177-
bool found=false;
178-
179-
for(const auto &e : index)
180-
{
181-
if(e=="META-INF/MANIFEST.MF")
182-
{
183-
found=true;
184-
break;
185-
}
186-
187-
i++;
188-
}
189-
190-
if(!found)
177+
auto entry=filtered_jar.find("META-INF/MANIFEST.MF");
178+
if(entry==filtered_jar.end())
191179
return manifestt();
192180

193-
std::string dest=get_entry(i);
181+
std::string dest=get_entry(entry->first);
194182
std::istringstream in(dest);
195183

196184
manifestt manifest;

src/java_bytecode/jar_file.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,11 @@ class jar_filet:public messaget
3030
// Test for error; 'true' means we are good.
3131
explicit operator bool() const { return mz_ok; }
3232

33-
typedef std::vector<std::string> indext;
34-
indext index;
3533
// map internal index to real index in jar central directory
36-
typedef std::map<int, int> filtered_jart;
34+
typedef std::map<irep_idt, size_t> filtered_jart;
3735
filtered_jart filtered_jar;
3836

39-
std::string get_entry(std::size_t i);
37+
std::string get_entry(const irep_idt &);
4038

4139
typedef std::map<std::string, std::string> manifestt;
4240
manifestt get_manifest();

src/java_bytecode/java_class_loader.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ java_bytecode_parse_treet &java_class_loadert::get_parse_tree(
9898
debug() << "Getting class `" << class_name << "' from JAR "
9999
<< jf << eom;
100100

101-
std::string data=jar_pool(jf).get_entry(jm_it->second.index);
101+
std::string data=jar_pool(jf).get_entry(jm_it->second.class_file_name);
102102

103103
std::istringstream istream(data);
104104

@@ -129,7 +129,7 @@ java_bytecode_parse_treet &java_class_loadert::get_parse_tree(
129129
debug() << "Getting class `" << class_name << "' from JAR "
130130
<< cp << eom;
131131

132-
std::string data=jar_pool(cp).get_entry(jm_it->second.index);
132+
std::string data=jar_pool(cp).get_entry(jm_it->second.class_file_name);
133133

134134
std::istringstream istream(data);
135135

@@ -223,19 +223,18 @@ void java_class_loadert::read_jar_file(const irep_idt &file)
223223
debug() << "adding JAR file `" << file << "'" << eom;
224224

225225
auto &jm=jar_map[file];
226-
std::size_t number_of_files=jar_file.index.size();
227226

228-
for(std::size_t i=0; i<number_of_files; i++)
227+
for(auto &jar_entry : jar_file.filtered_jar)
229228
{
230-
std::string file_name=jar_file.index[i];
229+
std::string file_name=id2string(jar_entry.first);
231230

232231
// does it end on .class?
233232
if(has_suffix(file_name, ".class"))
234233
{
235234
irep_idt class_name=file_to_class_name(file_name);
236235

237236
// record
238-
jm.entries[class_name].index=i;
237+
jm.entries[class_name].class_file_name=file_name;
239238
}
240239
}
241240
}

src/java_bytecode/java_class_loader.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class java_class_loadert:public messaget
4848
public:
4949
struct entryt
5050
{
51-
std::size_t index;
51+
std::string class_file_name;
5252
};
5353

5454
// class name to index map

0 commit comments

Comments
 (0)