forked from Ocean/datum_gateway
api: Optimise datum_api_fill_vars by populating replacements in-place
This commit is contained in:
parent
f41b2b4ada
commit
15ab54dba3
@ -244,8 +244,6 @@ void datum_api_fill_vars(const char *input, char *output, size_t max_output_size
|
|||||||
size_t output_len = 0;
|
size_t output_len = 0;
|
||||||
size_t var_name_len = 0;
|
size_t var_name_len = 0;
|
||||||
char var_name[256];
|
char var_name[256];
|
||||||
char replacement[256];
|
|
||||||
size_t replacement_len;
|
|
||||||
size_t remaining;
|
size_t remaining;
|
||||||
size_t to_copy;
|
size_t to_copy;
|
||||||
const char *var_start;
|
const char *var_start;
|
||||||
@ -281,14 +279,12 @@ void datum_api_fill_vars(const char *input, char *output, size_t max_output_size
|
|||||||
if (var_name[8] == 'J' && !vardata->sjob) {
|
if (var_name[8] == 'J' && !vardata->sjob) {
|
||||||
// Leave blank for now
|
// Leave blank for now
|
||||||
} else {
|
} else {
|
||||||
|
char * const replacement = &output[output_len];
|
||||||
|
size_t replacement_max_len = max_output_size - output_len;
|
||||||
|
if (replacement_max_len > 256) replacement_max_len = 256;
|
||||||
replacement[0] = 0;
|
replacement[0] = 0;
|
||||||
func(replacement, sizeof(replacement), vardata);
|
func(replacement, replacement_max_len, vardata);
|
||||||
replacement_len = strlen(replacement);
|
output_len += strlen(replacement);
|
||||||
if (replacement_len) {
|
|
||||||
to_copy = (replacement_len < max_output_size - output_len - 1) ? replacement_len : max_output_size - output_len - 1;
|
|
||||||
strncpy(&output[output_len], replacement, to_copy);
|
|
||||||
output_len += to_copy;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
output[output_len] = 0;
|
output[output_len] = 0;
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user