ffParsePropFileValues: only allocate storage on the heap if numQuerys > 4

This commit is contained in:
Linus Dierheimer
2022-06-03 00:24:53 +02:00
parent 0244e5ebd7
commit c55cc9c732
+21 -11
View File
@@ -90,24 +90,33 @@ bool ffParsePropLines(const char* lines, const char* start, FFstrbuf* buffer)
bool ffParsePropFileValues(const char* filename, uint32_t numQueries, FFpropquery* queries)
{
bool* searchedValues = malloc(sizeof(bool) * numQueries);
bool valueStorage[4];
bool* unsetValues;
if(numQueries > sizeof(valueStorage) / sizeof(valueStorage[0]))
unsetValues = malloc(sizeof(bool) * numQueries);
else
unsetValues = valueStorage;
bool allSet = true;
for(uint32_t i = 0; i < numQueries; i++)
{
if((searchedValues[i] = queries[i].buffer->length == 0))
if((unsetValues[i] = queries[i].buffer->length == 0))
allSet = false;
}
if(allSet)
{
free(searchedValues);
return true;
}
FILE* file = fopen(filename, "r");
if(file == NULL)
return false;
if(allSet)
{
fclose(file);
if(unsetValues != valueStorage)
free(unsetValues);
return true;
}
char* line = NULL;
size_t len = 0;
@@ -115,7 +124,7 @@ bool ffParsePropFileValues(const char* filename, uint32_t numQueries, FFpropquer
{
for(uint32_t i = 0; i < numQueries; i++)
{
if(!searchedValues[i])
if(!unsetValues[i])
continue;
uint32_t currentLength = queries[i].buffer->length;
@@ -125,13 +134,14 @@ bool ffParsePropFileValues(const char* filename, uint32_t numQueries, FFpropquer
}
}
free(searchedValues);
if(line != NULL)
free(line);
fclose(file);
if(unsetValues != valueStorage)
free(unsetValues);
return true;
}