From: Michael Tremer Date: Fri, 31 May 2019 04:30:27 +0000 (+0100) Subject: libpakfire: parser: Handle scripts X-Git-Tag: 0.9.28~1285^2~1017 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=596f9ba1492a046d339151718b7281a4fd7166a0;p=pakfire.git libpakfire: parser: Handle scripts Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/parser/scanner.l b/src/libpakfire/parser/scanner.l index 90250a214..6b0c573ea 100644 --- a/src/libpakfire/parser/scanner.l +++ b/src/libpakfire/parser/scanner.l @@ -48,6 +48,7 @@ word ({quoted_string}|({digit}|{letter}|{special})+) */ keywords (description|{whitespace}(build(_cmds)?|files|install(_cmds)?|prepare_cmds|provides|(pre)?requires|_posttrans)) template {whitespace}template.*$ +script {whitespace}script.*$ %s DEFINE @@ -80,6 +81,29 @@ template {whitespace}template.*$ pakfire_free(buffer); } +^{script} { + // Find the name of the template + char* name = NULL; + for (unsigned int i = yyleng; i > 0; i--) { + if (isspace(yytext[i])) + break; + + name = yytext + i; + } + + size_t length = strlen("define script:") + strlen(name); + + char* buffer = pakfire_malloc(length + 1); + snprintf(buffer, length + 1, "define script:%s", name); + + // Put the whole string back onto the stack (backwards) + for (int i = length - 1; i >= 0; i--) { + unput(buffer[i]); + } + + pakfire_free(buffer); + } + ^{keywords}$ { // Determine the length of the string size_t length = strlen("define ") + yyleng;