84 lines
2.1 KiB
C++
84 lines
2.1 KiB
C++
#include "fileinfo.h"
|
|
#include <unistd.h>
|
|
#include <sys/stat.h>
|
|
#include <fcntl.h>
|
|
|
|
FileInfo::FileInfo(QFile &file) {
|
|
QFileInfo info(file);
|
|
struct stat st_stat;
|
|
int fd;
|
|
int length;
|
|
|
|
if (!info.exists()){
|
|
return;
|
|
}
|
|
|
|
m_sizeFile = info.size();
|
|
m_path = info.absolutePath();
|
|
m_filename = info.fileName();
|
|
QString fullPath = m_path + "/" + m_filename;
|
|
m_rawData = NULL;
|
|
|
|
/* Get signature of the file */
|
|
//QByteArray b = file.readAll();
|
|
//m_rawData = b.data();
|
|
//m_rawData = (char *)malloc(m_sizeFile);
|
|
//qDebug() << "FOOO: " << b.size();
|
|
//memcpy(m_rawData, b.data(), b.size());
|
|
//m_rawData = b.constData();
|
|
//m_rawData = b.data();
|
|
//qDebug() << b[0] << b[1] << b[2] << b[3];
|
|
//QByteArray b1 = b + 1;
|
|
//qDebug() << b1[0] << b1[1] << b1[2] << b1[3];
|
|
|
|
|
|
/*QDataStream in(&file);
|
|
qint64 len = in.readRawData(m_rawData, m_sizeFile);
|
|
qDebug() << len;*/
|
|
|
|
/*
|
|
* I need to read the file in the old way, because with Qt functions, my buffer is corrupted
|
|
* i do not have the full data
|
|
*/
|
|
fd = open(fullPath.toLatin1().constData(), O_RDONLY);
|
|
if (fd < 0){
|
|
qDebug() << "Failed to read the file";
|
|
}
|
|
fstat(fd, &st_stat);
|
|
m_rawData = (char *)malloc(st_stat.st_size);
|
|
|
|
length = read(fd, m_rawData, st_stat.st_size);
|
|
|
|
close(fd);
|
|
|
|
this->_getSignature();
|
|
}
|
|
size_t FileInfo::getSizeFile(){
|
|
return m_sizeFile;
|
|
}
|
|
QString FileInfo::getFilename(){
|
|
return m_filename;
|
|
}
|
|
QString FileInfo::getPath(){
|
|
return m_path;
|
|
}
|
|
int FileInfo::getFileType(){
|
|
return m_fileType;
|
|
}
|
|
void FileInfo::_getSignature(){
|
|
// ELF file
|
|
/*char signature[4];
|
|
sprintf(signature, "%c%c%c%c", m_rawData[0], m_rawData[1], m_rawData[2], m_rawData[3]);
|
|
qDebug() << signature;*/
|
|
if (m_rawData[0] == 0x7f && m_rawData[1] == 0x45 && m_rawData[2] == 0x4c && m_rawData[3] == 0x46)
|
|
m_fileType = SIGNATURE_ELF;
|
|
else
|
|
m_fileType = SIGNATURE_UNKNOWN;
|
|
}
|
|
char *FileInfo::getRawData(){
|
|
return m_rawData;
|
|
}
|
|
FileInfo::~FileInfo(){
|
|
free(m_rawData);
|
|
}
|