updated fuzz tests to use FileNamesTable* abstraction
This commit is contained in:
parent
31a0abbfda
commit
a7e33e3e10
@ -642,6 +642,15 @@ void UTIL_expandFNT(FileNamesTable** fnt, int followLinks)
|
|||||||
*fnt = newFNT;
|
*fnt = newFNT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FileNamesTable* UTIL_createFNT_fromROTable(const char** filenames, size_t nbFilenames)
|
||||||
|
{
|
||||||
|
size_t const sizeof_FNTable = nbFilenames * sizeof(*filenames);
|
||||||
|
const char** const newFNTable = (const char**)malloc(sizeof_FNTable);
|
||||||
|
if (newFNTable==NULL) return NULL;
|
||||||
|
memcpy(newFNTable, filenames, sizeof_FNTable);
|
||||||
|
return UTIL_createFileNamesTable(newFNTable, nbFilenames, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*-****************************************
|
/*-****************************************
|
||||||
* count the number of physical cores
|
* count the number of physical cores
|
||||||
|
@ -204,6 +204,14 @@ UTIL_mergeFileNamesTable(FileNamesTable* table1, FileNamesTable* table2);
|
|||||||
*/
|
*/
|
||||||
void UTIL_expandFNT(FileNamesTable** fnt, int followLinks);
|
void UTIL_expandFNT(FileNamesTable** fnt, int followLinks);
|
||||||
|
|
||||||
|
/*! UTIL_createFNT_fromROTable() :
|
||||||
|
* copy the @filenames pointer table inside the returned object.
|
||||||
|
* The names themselves are still stored in their original buffer, which must outlive the object.
|
||||||
|
* @return : a FileNamesTable* object,
|
||||||
|
* or NULL in case of error
|
||||||
|
*/
|
||||||
|
FileNamesTable* UTIL_createFNT_fromROTable(const char** filenames, size_t nbFilenames);
|
||||||
|
|
||||||
/*! UTIL_createExpandedFNT() :
|
/*! UTIL_createExpandedFNT() :
|
||||||
* read names from @filenames, and expand those corresponding to directories
|
* read names from @filenames, and expand those corresponding to directories
|
||||||
* @return : an expanded FileNamesTable*, where each name is a file
|
* @return : an expanded FileNamesTable*, where each name is a file
|
||||||
|
@ -18,24 +18,26 @@
|
|||||||
int main(int argc, char const **argv) {
|
int main(int argc, char const **argv) {
|
||||||
size_t const kMaxFileSize = (size_t)1 << 27;
|
size_t const kMaxFileSize = (size_t)1 << 27;
|
||||||
int const kFollowLinks = 1;
|
int const kFollowLinks = 1;
|
||||||
char *fileNamesBuf = NULL;
|
FileNamesTable* files;
|
||||||
char const **files = argv + 1;
|
const char** const fnTable = argv + 1;
|
||||||
unsigned numFiles = argc - 1;
|
unsigned numFiles = (unsigned)(argc - 1);
|
||||||
uint8_t *buffer = NULL;
|
uint8_t *buffer = NULL;
|
||||||
size_t bufferSize = 0;
|
size_t bufferSize = 0;
|
||||||
unsigned i;
|
unsigned i;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
#ifdef UTIL_HAS_CREATEFILELIST
|
#ifdef UTIL_HAS_CREATEFILELIST
|
||||||
files = UTIL_createFileList(files, numFiles, &fileNamesBuf, &numFiles,
|
files = UTIL_createExpandedFNT(fnTable, numFiles, kFollowLinks);
|
||||||
kFollowLinks);
|
if (!files) numFiles = 0;
|
||||||
if (!files)
|
#else
|
||||||
numFiles = 0;
|
files = UTIL_createFNT_fromROTable(fnTable, numFiles);
|
||||||
|
if (!files) numFiles = 0;
|
||||||
#endif
|
#endif
|
||||||
|
if (files) assert(numFiles == files->tableSize);
|
||||||
if (numFiles == 0)
|
if (numFiles == 0)
|
||||||
fprintf(stderr, "WARNING: No files passed to %s\n", argv[0]);
|
fprintf(stderr, "WARNING: No files passed to %s\n", argv[0]);
|
||||||
for (i = 0; i < numFiles; ++i) {
|
for (i = 0; i < numFiles; ++i) {
|
||||||
char const *fileName = files[i];
|
char const *fileName = files->fileNames[i];
|
||||||
DEBUGLOG(3, "Running %s", fileName);
|
DEBUGLOG(3, "Running %s", fileName);
|
||||||
size_t const fileSize = UTIL_getFileSize(fileName);
|
size_t const fileSize = UTIL_getFileSize(fileName);
|
||||||
size_t readSize;
|
size_t readSize;
|
||||||
@ -70,8 +72,6 @@ int main(int argc, char const **argv) {
|
|||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
free(buffer);
|
free(buffer);
|
||||||
#ifdef UTIL_HAS_CREATEFILELIST
|
UTIL_freeFileNamesTable(files);
|
||||||
UTIL_freeFileList(files, fileNamesBuf);
|
|
||||||
#endif
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -173,21 +173,10 @@ void data_buffer_free(data_buffer_t buffer) {
|
|||||||
* data filenames helpers.
|
* data filenames helpers.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
data_filenames_t data_filenames_get(data_t const* data) {
|
FileNamesTable* data_filenames_get(data_t const* data)
|
||||||
data_filenames_t filenames = {.buffer = NULL, .size = 0};
|
{
|
||||||
char const* path = data->data.path;
|
char const* const path = data->data.path;
|
||||||
|
return UTIL_createExpandedFNT(&path, 1, 0 /* followLinks */ );
|
||||||
filenames.filenames = UTIL_createFileList(
|
|
||||||
&path,
|
|
||||||
1,
|
|
||||||
&filenames.buffer,
|
|
||||||
&filenames.size,
|
|
||||||
/* followLinks */ 0);
|
|
||||||
return filenames;
|
|
||||||
}
|
|
||||||
|
|
||||||
void data_filenames_free(data_filenames_t filenames) {
|
|
||||||
UTIL_freeFileList(filenames.filenames, filenames.buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -196,26 +185,33 @@ void data_filenames_free(data_filenames_t filenames) {
|
|||||||
|
|
||||||
data_buffers_t data_buffers_get(data_t const* data) {
|
data_buffers_t data_buffers_get(data_t const* data) {
|
||||||
data_buffers_t buffers = {.size = 0};
|
data_buffers_t buffers = {.size = 0};
|
||||||
data_filenames_t filenames = data_filenames_get(data);
|
FileNamesTable* const filenames = data_filenames_get(data);
|
||||||
if (filenames.size == 0)
|
if (filenames == NULL) return buffers;
|
||||||
|
if (filenames->tableSize == 0) {
|
||||||
|
UTIL_freeFileNamesTable(filenames);
|
||||||
return buffers;
|
return buffers;
|
||||||
|
}
|
||||||
|
|
||||||
data_buffer_t* buffersPtr =
|
data_buffer_t* buffersPtr =
|
||||||
(data_buffer_t*)malloc(filenames.size * sizeof(data_buffer_t));
|
(data_buffer_t*)malloc(filenames->tableSize * sizeof(*buffersPtr));
|
||||||
if (buffersPtr == NULL)
|
if (buffersPtr == NULL) {
|
||||||
|
UTIL_freeFileNamesTable(filenames);
|
||||||
return buffers;
|
return buffers;
|
||||||
|
}
|
||||||
buffers.buffers = (data_buffer_t const*)buffersPtr;
|
buffers.buffers = (data_buffer_t const*)buffersPtr;
|
||||||
buffers.size = filenames.size;
|
buffers.size = filenames->tableSize;
|
||||||
|
|
||||||
for (size_t i = 0; i < filenames.size; ++i) {
|
for (size_t i = 0; i < filenames->tableSize; ++i) {
|
||||||
buffersPtr[i] = data_buffer_read(filenames.filenames[i]);
|
buffersPtr[i] = data_buffer_read(filenames->fileNames[i]);
|
||||||
if (buffersPtr[i].data == NULL) {
|
if (buffersPtr[i].data == NULL) {
|
||||||
data_buffers_t const kEmptyBuffer = {};
|
data_buffers_t const kEmptyBuffer = {};
|
||||||
data_buffers_free(buffers);
|
data_buffers_free(buffers);
|
||||||
|
UTIL_freeFileNamesTable(filenames);
|
||||||
return kEmptyBuffer;
|
return kEmptyBuffer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UTIL_freeFileNamesTable(filenames);
|
||||||
return buffers;
|
return buffers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,25 +102,6 @@ int data_buffer_compare(data_buffer_t buffer1, data_buffer_t buffer2);
|
|||||||
*/
|
*/
|
||||||
void data_buffer_free(data_buffer_t buffer);
|
void data_buffer_free(data_buffer_t buffer);
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
char* buffer;
|
|
||||||
char const** filenames;
|
|
||||||
unsigned size;
|
|
||||||
} data_filenames_t;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a recursive list of filenames in the data object. If it is a file, it
|
|
||||||
* will only contain one entry. If it is a directory, it will recursively walk
|
|
||||||
* the directory.
|
|
||||||
*
|
|
||||||
* @returns The list of filenames, which has size 0 and NULL pointers on error.
|
|
||||||
*/
|
|
||||||
data_filenames_t data_filenames_get(data_t const* data);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Frees the filenames table.
|
|
||||||
*/
|
|
||||||
void data_filenames_free(data_filenames_t filenames);
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
data_buffer_t const* buffers;
|
data_buffer_t const* buffers;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user