RetroLinker
Linker for several 8-bit, 16-bit and 32-bit formats
Loading...
Searching...
No Matches
arch.h
1#ifndef ARCH_H
2#define ARCH_H
3
4#include <array>
5#include "../common.h"
6#include "../dumper/dumper.h"
7#include "../linker/buffer.h"
8#include "../linker/format.h"
9#include "../linker/reader.h"
10#include "../linker/writer.h"
11
12/* TODO: not fully implemented */
13
14namespace Archive
15{
19 class ArchiveFormat : public virtual Linker::InputFormat, public virtual Linker::OutputFormat
20 {
21 public:
23 {
24 public:
25 virtual ~FileReader();
26 virtual std::shared_ptr<Linker::Image> ReadFile(Linker::Reader& rd, offset_t size) = 0;
27 };
28
29 offset_t file_offset = 0;
30 offset_t file_size = offset_t(-1);
31 std::shared_ptr<FileReader> file_reader = nullptr;
32
33 typedef std::shared_ptr<Linker::Image> file_reader_type(Linker::Reader& rd, offset_t size);
34 typedef std::shared_ptr<Linker::Image> file_reader1_type(Linker::Reader& rd);
35
36 void SetFileReader(std::shared_ptr<FileReader> file_reader);
37 void SetFileReader(std::shared_ptr<Linker::Image> (* file_reader)(Linker::Reader& rd, offset_t size));
38 void SetFileReader(std::shared_ptr<Linker::Image> (* file_reader)(Linker::Reader& rd));
39
40 ArchiveFormat(std::shared_ptr<FileReader> file_reader = nullptr)
41 : file_reader(file_reader)
42 {
43 }
44
45 ArchiveFormat(std::shared_ptr<Linker::Image> (* file_reader)(Linker::Reader& rd, offset_t size));
46 ArchiveFormat(std::shared_ptr<Linker::Image> (* file_reader)(Linker::Reader& rd));
47
48 class File
49 {
50 public:
51 std::string name;
52 bool sysv_filename = false;
53 offset_t extended_name_offset = 0;
54 uint64_t modification = 0;
55 uint32_t owner_id = 0, group_id = 0;
56 uint32_t mode = 0;
57 uint64_t size = 0;
58 std::shared_ptr<Linker::Image> contents;
59 };
60
61 std::vector<File> files;
62
63 void ReadFile(Linker::Reader& rd) override;
65 offset_t WriteFile(Linker::Writer& wr) const override;
66 offset_t ImageSize() const override;
67 void Dump(Dumper::Dumper& dump) const override;
69 void GenerateModule(Linker::ModuleCollector& linker, std::string file_name, bool is_library = false) const override;
70 void CalculateValues() override;
71 // TODO
72 };
73}
74
75#endif /* ARCH_H */
Definition arch.h:49
UNIX archive format.
Definition arch.h:20
offset_t ImageSize() const override
Retrieves size of stored data.
Definition arch.cc:174
void CalculateValues() override
Intermediate step between processing module and generating output file to set up headers and manageme...
Definition arch.cc:233
offset_t WriteFile(Linker::Writer &wr) const override
Stores data in memory to file.
Definition arch.cc:156
void GenerateModule(Linker::ModuleCollector &linker, std::string file_name, bool is_library=false) const override
Loads the information into a module object.
Definition arch.cc:214
void ReadFile(Linker::Reader &rd) override
Loads file into memory.
Definition arch.cc:67
void Dump(Dumper::Dumper &dump) const override
Display file contents in a nice manner.
Definition arch.cc:179
An abstract interface that separates structure and presentation of the data inside a file.
Definition dumper.h:586
offset_t WriteFile(Writer &wr) const override=0
Stores data in memory to file.
A class that provides a general interface to loading a module.
Definition format.h:166
virtual void GenerateModule(ModuleCollector &linker, std::string file_name, bool is_library=false) const
Loads the information into a module object.
Definition format.cc:180
Helper class that collects object files and libraries, and includes library objects for required symb...
Definition module_collector.h:19
A class that provides a general interface to setting up generation for a format.
Definition format.h:61
A helper class, encapsulating functionality needed to import binary data.
Definition reader.h:16
A helper class, encapsulating functionality needed to export binary data.
Definition writer.h:15