mirror of
https://github.com/wiiu-env/RPXLoadingModule.git
synced 2024-09-28 18:08:45 +02:00
51 lines
1.3 KiB
C++
51 lines
1.3 KiB
C++
#include "FileReader.h"
|
|
#include "logger.h"
|
|
#include <cstring>
|
|
|
|
int64_t FileReader::read(uint8_t *buffer, uint32_t size) {
|
|
if (isReadFromBuffer) {
|
|
if (input_buffer == nullptr) {
|
|
return -1;
|
|
}
|
|
uint32_t toRead = size;
|
|
if (toRead > input_size - input_pos) {
|
|
toRead = input_size - input_pos;
|
|
}
|
|
if (toRead == 0) {
|
|
return 0;
|
|
}
|
|
memcpy(buffer, &input_buffer[input_pos], toRead);
|
|
input_pos += toRead;
|
|
return toRead;
|
|
} else if (isReadFromFile) {
|
|
int res = ::read(file_fd, buffer, size);
|
|
return res;
|
|
}
|
|
return -2;
|
|
}
|
|
|
|
FileReader::FileReader(std::string &path) {
|
|
int fd;
|
|
if ((fd = open(path.c_str(), O_RDONLY)) >= 0) {
|
|
this->isReadFromFile = true;
|
|
this->isReadFromBuffer = false;
|
|
this->file_fd = fd;
|
|
} else {
|
|
DEBUG_FUNCTION_LINE_ERR("Failed to open file %s", path.c_str());
|
|
}
|
|
}
|
|
|
|
FileReader::~FileReader() {
|
|
if (isReadFromFile) {
|
|
::close(this->file_fd);
|
|
}
|
|
}
|
|
|
|
FileReader::FileReader(uint8_t *buffer, uint32_t size) {
|
|
this->input_buffer = buffer;
|
|
this->input_size = size;
|
|
this->input_pos = 0;
|
|
this->isReadFromBuffer = true;
|
|
this->isReadFromFile = false;
|
|
}
|