#define LEFT_CURLY '{'
#define RIGHT_CURLY '}'
+/*
+ * expansion result items on the stack to save some cycles
+ *
+ * (5 == about 2 variables like "foo%{var}bar%{var}baz")
+ */
+#define SMALL_EXPANSION 5
+
/*
* check that a subrequest won't cause infinite recursion
*
backrefinfo *briRR, backrefinfo *briRC)
{
result_list *result, *current;
+ result_list sresult[SMALL_EXPANSION];
+ unsigned spc = 0;
apr_size_t span, inputlen, outlen;
char *p, *c;
}
/* well, actually something to do */
- result = current = apr_palloc(r->pool, sizeof(result_list));
+ result = current = &(sresult[spc++]);
p = input + span;
current->next = NULL;
do {
/* prepare next entry */
if (current->len) {
- current->next = apr_palloc(r->pool, sizeof(result_list));
+ current->next = (spc < SMALL_EXPANSION)
+ ? &(sresult[spc++])
+ : apr_palloc(r->pool, sizeof(result_list));
current = current->next;
current->next = NULL;
current->len = 0;
/* check the remainder */
if (*p && (span = strcspn(p, "\\$%")) > 0) {
if (current->len) {
- current->next = apr_palloc(r->pool, sizeof(result_list));
+ current->next = (spc < SMALL_EXPANSION)
+ ? &(sresult[spc++])
+ : apr_palloc(r->pool, sizeof(result_list));
current = current->next;
current->next = NULL;
}