37 lines
1.2 KiB
C++
Executable File
37 lines
1.2 KiB
C++
Executable File
#include <string.h>
|
|
|
|
#include <filesystem>
|
|
#include <fstream>
|
|
#include <iostream>
|
|
typedef struct {
|
|
int Start;
|
|
int Size;
|
|
char name[256];
|
|
} FILE_DESC;
|
|
|
|
int main(int argc, char **argv) {
|
|
if (argc == 1) {
|
|
std::cout << "Usage:mkramfs <file1> <file2> ..." << std::endl;
|
|
return -1;
|
|
}
|
|
FILE_DESC descriptor[256] = {0};
|
|
std::ofstream ramfs("ramfs.img", std::ios::binary | std::ios::ate);
|
|
for (int i = 1; i < argc; i++) {
|
|
if (!std::filesystem::exists(std::filesystem::path(argv[i]))) {
|
|
std::cout << "file does not exist! - " << argv[i] << std::endl;
|
|
continue;
|
|
}
|
|
descriptor[i].Start = descriptor[i - 1].Start + descriptor[i - 1].Size;
|
|
descriptor[i].Size =
|
|
std::filesystem::file_size(std::filesystem::path(argv[i]));
|
|
strncpy(descriptor[i].name,
|
|
std::filesystem::path(argv[i]).filename().c_str(), 255);
|
|
}
|
|
ramfs.write(reinterpret_cast<char *>(descriptor), sizeof(descriptor));
|
|
for (int i = 1; i < argc; i++) {
|
|
std::ifstream file(argv[i], std::ios::binary);
|
|
ramfs << file.rdbuf();
|
|
file.close();
|
|
}
|
|
ramfs.close();
|
|
} |