Some substitutions require pretty expensive operations. So it make sense to find out which are needed to begin with. Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx> --- interpolate.c | 20 ++++++++++++++++++++ interpolate.h | 2 ++ 2 files changed, 22 insertions(+), 0 deletions(-) diff --git a/interpolate.c b/interpolate.c index 6ef53f2..80eeb36 100644 --- a/interpolate.c +++ b/interpolate.c @@ -102,3 +102,23 @@ unsigned long interpolate(char *result, unsigned long reslen, *dest = '\0'; return newlen; } + +char *interp_find_active(const char *orig, + const struct interp *interps, int ninterps) +{ + char *result = xcalloc(1, ninterps); + char c; + int i; + + while ((c = *(orig++))) + if (c == '%') + /* Try to match an interpolation string. */ + for (i = 0; i < ninterps; i++) + if (!prefixcmp(orig, interps[i].name + 1)) { + result[i] = 1; + orig += strlen(interps[i].name + 1); + break; + } + + return result; +} diff --git a/interpolate.h b/interpolate.h index 77407e6..2d197c5 100644 --- a/interpolate.h +++ b/interpolate.h @@ -22,5 +22,7 @@ extern void interp_clear_table(struct interp *table, int ninterps); extern unsigned long interpolate(char *result, unsigned long reslen, const char *orig, const struct interp *interps, int ninterps); +extern char *interp_find_active(const char *orig, + const struct interp *interps, int ninterps); #endif /* INTERPOLATE_H */ -- 1.5.3.5.1549.g91a3 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html