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;
|
||||
}
|
||||
|
||||
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
|
||||
|
@ -204,6 +204,14 @@ UTIL_mergeFileNamesTable(FileNamesTable* table1, FileNamesTable* table2);
|
||||
*/
|
||||
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() :
|
||||
* read names from @filenames, and expand those corresponding to directories
|
||||
* @return : an expanded FileNamesTable*, where each name is a file
|
||||
|
@ -18,24 +18,26 @@
|
||||
int main(int argc, char const **argv) {
|
||||
size_t const kMaxFileSize = (size_t)1 << 27;
|
||||
int const kFollowLinks = 1;
|
||||
char *fileNamesBuf = NULL;
|
||||
char const **files = argv + 1;
|
||||
unsigned numFiles = argc - 1;
|
||||
FileNamesTable* files;
|
||||
const char** const fnTable = argv + 1;
|
||||
unsigned numFiles = (unsigned)(argc - 1);
|
||||
uint8_t *buffer = NULL;
|
||||
size_t bufferSize = 0;
|
||||
unsigned i;
|
||||
int ret;
|
||||
|
||||
#ifdef UTIL_HAS_CREATEFILELIST
|
||||
files = UTIL_createFileList(files, numFiles, &fileNamesBuf, &numFiles,
|
||||
kFollowLinks);
|
||||
if (!files)
|
||||
numFiles = 0;
|
||||
files = UTIL_createExpandedFNT(fnTable, numFiles, kFollowLinks);
|
||||
if (!files) numFiles = 0;
|
||||
#else
|
||||
files = UTIL_createFNT_fromROTable(fnTable, numFiles);
|
||||
if (!files) numFiles = 0;
|
||||
#endif
|
||||
if (files) assert(numFiles == files->tableSize);
|
||||
if (numFiles == 0)
|
||||
fprintf(stderr, "WARNING: No files passed to %s\n", argv[0]);
|
||||
for (i = 0; i < numFiles; ++i) {
|
||||
char const *fileName = files[i];
|
||||
char const *fileName = files->fileNames[i];
|
||||
DEBUGLOG(3, "Running %s", fileName);
|
||||
size_t const fileSize = UTIL_getFileSize(fileName);
|
||||
size_t readSize;
|
||||
@ -70,8 +72,6 @@ int main(int argc, char const **argv) {
|
||||
|
||||
ret = 0;
|
||||
free(buffer);
|
||||
#ifdef UTIL_HAS_CREATEFILELIST
|
||||
UTIL_freeFileList(files, fileNamesBuf);
|
||||
#endif
|
||||
UTIL_freeFileNamesTable(files);
|
||||
return ret;
|
||||
}
|
||||
|
@ -173,21 +173,10 @@ void data_buffer_free(data_buffer_t buffer) {
|
||||
* data filenames helpers.
|
||||
*/
|
||||
|
||||
data_filenames_t data_filenames_get(data_t const* data) {
|
||||
data_filenames_t filenames = {.buffer = NULL, .size = 0};
|
||||
char const* path = data->data.path;
|
||||
|
||||
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);
|
||||
FileNamesTable* data_filenames_get(data_t const* data)
|
||||
{
|
||||
char const* const path = data->data.path;
|
||||
return UTIL_createExpandedFNT(&path, 1, 0 /* followLinks */ );
|
||||
}
|
||||
|
||||
/**
|
||||
@ -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 buffers = {.size = 0};
|
||||
data_filenames_t filenames = data_filenames_get(data);
|
||||
if (filenames.size == 0)
|
||||
FileNamesTable* const filenames = data_filenames_get(data);
|
||||
if (filenames == NULL) return buffers;
|
||||
if (filenames->tableSize == 0) {
|
||||
UTIL_freeFileNamesTable(filenames);
|
||||
return buffers;
|
||||
}
|
||||
|
||||
data_buffer_t* buffersPtr =
|
||||
(data_buffer_t*)malloc(filenames.size * sizeof(data_buffer_t));
|
||||
if (buffersPtr == NULL)
|
||||
(data_buffer_t*)malloc(filenames->tableSize * sizeof(*buffersPtr));
|
||||
if (buffersPtr == NULL) {
|
||||
UTIL_freeFileNamesTable(filenames);
|
||||
return buffers;
|
||||
}
|
||||
buffers.buffers = (data_buffer_t const*)buffersPtr;
|
||||
buffers.size = filenames.size;
|
||||
buffers.size = filenames->tableSize;
|
||||
|
||||
for (size_t i = 0; i < filenames.size; ++i) {
|
||||
buffersPtr[i] = data_buffer_read(filenames.filenames[i]);
|
||||
for (size_t i = 0; i < filenames->tableSize; ++i) {
|
||||
buffersPtr[i] = data_buffer_read(filenames->fileNames[i]);
|
||||
if (buffersPtr[i].data == NULL) {
|
||||
data_buffers_t const kEmptyBuffer = {};
|
||||
data_buffers_free(buffers);
|
||||
UTIL_freeFileNamesTable(filenames);
|
||||
return kEmptyBuffer;
|
||||
}
|
||||
}
|
||||
|
||||
UTIL_freeFileNamesTable(filenames);
|
||||
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);
|
||||
|
||||
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 {
|
||||
data_buffer_t const* buffers;
|
||||
|
Loading…
x
Reference in New Issue
Block a user