cprover
jar_file.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: JAR File Reading
4 
5 Author: Daniel Kroening, kroening@kroening.com
6 
7 \*******************************************************************/
8 
11 
12 #ifndef CPROVER_JAVA_BYTECODE_JAR_FILE_H
13 #define CPROVER_JAVA_BYTECODE_JAR_FILE_H
14 
15 #define _LARGEFILE64_SOURCE 1
16 #include "miniz/miniz.h"
17 
18 #include <string>
19 #include <vector>
20 #include <map>
21 #include <regex>
22 #include <util/message.h>
23 
25 
26 class jar_filet:public messaget
27 {
28 public:
29  jar_filet():mz_ok(false) { }
30 
31  ~jar_filet();
32 
33  void open(java_class_loader_limitt &, const std::string &);
34 
35  // Test for error; 'true' means we are good.
36  explicit operator bool() const { return mz_ok; }
37 
38  // map internal index to real index in jar central directory
39  typedef std::map<irep_idt, size_t> filtered_jart;
40  filtered_jart filtered_jar;
41 
42  std::string get_entry(const irep_idt &);
43 
44  typedef std::map<std::string, std::string> manifestt;
45  manifestt get_manifest();
46 
47 protected:
49  bool mz_ok;
50 };
51 
52 class jar_poolt:public messaget
53 {
54 public:
56  java_class_loader_limitt &class_loader_limit,
57  const std::string &file_name)
58  {
59  file_mapt::iterator it=file_map.find(file_name);
60  if(it==file_map.end())
61  {
62  jar_filet &jar_file=file_map[file_name];
64  jar_file.open(class_loader_limit, file_name);
65  return jar_file;
66  }
67  else
68  return file_map[file_name];
69  }
70 
71 protected:
72  typedef std::map<std::string, jar_filet> file_mapt;
73  file_mapt file_map;
74  std::string java_cp_include_files;
75 };
76 
77 #endif // CPROVER_JAVA_BYTECODE_JAR_FILE_H
void open(java_class_loader_limitt &, const std::string &)
Definition: jar_file.cpp:18
filtered_jart filtered_jar
Definition: jar_file.h:40
std::map< irep_idt, size_t > filtered_jart
Definition: jar_file.h:39
file_mapt file_map
Definition: jar_file.h:73
mz_zip_archive zip
Definition: jar_file.h:48
jar_filet & operator()(java_class_loader_limitt &class_loader_limit, const std::string &file_name)
Definition: jar_file.h:55
~jar_filet()
Definition: jar_file.cpp:59
manifestt get_manifest()
Definition: jar_file.cpp:97
std::string get_entry(const irep_idt &)
Definition: jar_file.cpp:68
virtual void set_message_handler(message_handlert &_message_handler)
Definition: message.h:122
jar_filet()
Definition: jar_file.h:29
std::map< std::string, jar_filet > file_mapt
Definition: jar_file.h:72
message_handlert & get_message_handler()
Definition: message.h:127
std::map< std::string, std::string > manifestt
Definition: jar_file.h:44
bool mz_ok
Definition: jar_file.h:49
limit class path loading
std::string java_cp_include_files
Definition: jar_file.h:74