Fix override warning and fix buffer overflow check
This commit is contained in:
+8
-10
@@ -197,8 +197,8 @@ class FileStore {
|
||||
* @return 0 if read is a success
|
||||
*/
|
||||
int read(InodeId_t id, typename Header::FsSize_t readStart,
|
||||
typename Header::FsSize_t readSize, void *data,
|
||||
typename Header::FsSize_t *size);
|
||||
typename Header::FsSize_t readSize, void *data,
|
||||
typename Header::FsSize_t *size);
|
||||
|
||||
/**
|
||||
* Reads the stat information of the inode of the given inode id.
|
||||
@@ -265,8 +265,8 @@ class FileStore {
|
||||
* @return 0 if read is a success
|
||||
*/
|
||||
int read(Inode *inode, typename Header::FsSize_t readStart,
|
||||
typename Header::FsSize_t readSize, void *data,
|
||||
typename Header::FsSize_t *size);
|
||||
typename Header::FsSize_t readSize, void *data,
|
||||
typename Header::FsSize_t *size);
|
||||
|
||||
/**
|
||||
* Removes the inode of the given ID.
|
||||
@@ -579,17 +579,15 @@ int FileStore<Header>::read(InodeId_t id, typename Header::FsSize_t readStart,
|
||||
template<typename Header>
|
||||
int FileStore<Header>::read(Inode *inode, typename Header::FsSize_t readStart,
|
||||
typename Header::FsSize_t readSize, void *data, typename Header::FsSize_t *size) {
|
||||
int retval = 1;
|
||||
// be sure read size is not greater than what is available to read
|
||||
if (inode->getDataLen() + readStart < readSize) {
|
||||
readSize = inode->getDataLen();
|
||||
if (inode->getDataLen() - readStart < readSize) {
|
||||
readSize = inode->getDataLen() - readStart;
|
||||
}
|
||||
if (size) {
|
||||
*size = readSize;
|
||||
}
|
||||
ox_memcpy(data, inode->getData() + readStart, inode->getDataLen());
|
||||
retval = 0;
|
||||
return retval;
|
||||
ox_memcpy(data, inode->getData() + readStart, readSize);
|
||||
return 0;
|
||||
}
|
||||
|
||||
template<typename Header>
|
||||
|
||||
@@ -34,7 +34,7 @@ class FileSystem {
|
||||
public:
|
||||
virtual ~FileSystem() {};
|
||||
|
||||
virtual int read(uint64_t inode, void *buffer, size_t *size) = 0;
|
||||
virtual int read(uint64_t inode, void *buffer, size_t size) = 0;
|
||||
|
||||
virtual int read(uint64_t inode, size_t readStart, size_t readSize, void *buffer, size_t *size) = 0;
|
||||
|
||||
@@ -112,9 +112,9 @@ class FileSystemTemplate: public FileSystem {
|
||||
|
||||
int read(const char *path, void *buffer);
|
||||
|
||||
int read(uint64_t inode, void *buffer, size_t *size) override;
|
||||
int read(uint64_t inode, void *buffer, size_t buffSize) override;
|
||||
|
||||
int read(uint64_t inode, size_t readStart, size_t readSize, void *buffer, size_t *size);
|
||||
int read(uint64_t inode, size_t readStart, size_t readSize, void *buffer, size_t *size) override;
|
||||
|
||||
uint8_t *read(uint64_t inode, size_t *size) override;
|
||||
|
||||
@@ -178,12 +178,12 @@ FileStat FileSystemTemplate<FileStore, FS_TYPE>::stat(uint64_t inode) {
|
||||
#pragma warning(disable:4244)
|
||||
#endif
|
||||
template<typename FileStore, FsType FS_TYPE>
|
||||
int FileSystemTemplate<FileStore, FS_TYPE>::read(uint64_t inode, void *buffer, size_t *size) {
|
||||
if (size) {
|
||||
auto stat = store->stat(inode);
|
||||
*size = stat.size;
|
||||
int FileSystemTemplate<FileStore, FS_TYPE>::read(uint64_t inode, void *buffer, size_t buffSize) {
|
||||
auto stat = store->stat(inode);
|
||||
if (stat.size <= buffSize) {
|
||||
return store->read(inode, buffer, nullptr);
|
||||
}
|
||||
return store->read(inode, buffer, nullptr);
|
||||
return 0;
|
||||
;
|
||||
}
|
||||
#ifdef _MSC_VER
|
||||
|
||||
Reference in New Issue
Block a user