Skip to content

Commit c55cc9c

Browse files
ffParsePropFileValues: only allocate storage on the heap if numQuerys > 4
1 parent 0244e5e commit c55cc9c

File tree

1 file changed

+20
-10
lines changed

1 file changed

+20
-10
lines changed

src/common/properties.c

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -90,32 +90,41 @@ bool ffParsePropLines(const char* lines, const char* start, FFstrbuf* buffer)
9090

9191
bool ffParsePropFileValues(const char* filename, uint32_t numQueries, FFpropquery* queries)
9292
{
93-
bool* searchedValues = malloc(sizeof(bool) * numQueries);
93+
bool valueStorage[4];
94+
bool* unsetValues;
95+
96+
if(numQueries > sizeof(valueStorage) / sizeof(valueStorage[0]))
97+
unsetValues = malloc(sizeof(bool) * numQueries);
98+
else
99+
unsetValues = valueStorage;
100+
94101
bool allSet = true;
95102
for(uint32_t i = 0; i < numQueries; i++)
96103
{
97-
if((searchedValues[i] = queries[i].buffer->length == 0))
104+
if((unsetValues[i] = queries[i].buffer->length == 0))
98105
allSet = false;
99106
}
100107

108+
FILE* file = fopen(filename, "r");
109+
if(file == NULL)
110+
return false;
111+
101112
if(allSet)
102113
{
103-
free(searchedValues);
114+
fclose(file);
115+
if(unsetValues != valueStorage)
116+
free(unsetValues);
104117
return true;
105118
}
106119

107-
FILE* file = fopen(filename, "r");
108-
if(file == NULL)
109-
return false;
110-
111120
char* line = NULL;
112121
size_t len = 0;
113122

114123
while (getline(&line, &len, file) != -1)
115124
{
116125
for(uint32_t i = 0; i < numQueries; i++)
117126
{
118-
if(!searchedValues[i])
127+
if(!unsetValues[i])
119128
continue;
120129

121130
uint32_t currentLength = queries[i].buffer->length;
@@ -125,13 +134,14 @@ bool ffParsePropFileValues(const char* filename, uint32_t numQueries, FFpropquer
125134
}
126135
}
127136

128-
free(searchedValues);
129-
130137
if(line != NULL)
131138
free(line);
132139

133140
fclose(file);
134141

142+
if(unsetValues != valueStorage)
143+
free(unsetValues);
144+
135145
return true;
136146
}
137147

0 commit comments

Comments
 (0)