From bd510ebb0e8c3c2cedf0240e33885ecb1bbb647a Mon Sep 17 00:00:00 2001 From: Dirk Zimoch <dirk.zimoch@psi.ch> Date: Fri, 4 Mar 2016 17:06:12 +0100 Subject: [PATCH] accept more variable names: everything except comma space open parenthesis --- runScript.c | 116 +++++++++++++++++++++++++--------------------------- 1 file changed, 56 insertions(+), 60 deletions(-) diff --git a/runScript.c b/runScript.c index dc1077b2..9a3015e0 100644 --- a/runScript.c +++ b/runScript.c @@ -183,7 +183,7 @@ int runScript(const char* filename, const char* args) if ((line_exp = malloc(line_exp_size)) == NULL) goto error; while (fgets(line_raw, line_raw_size, file)) { - char* p; + char* p, *x; long len; /* check if we have a line longer than the buffer size */ @@ -219,78 +219,74 @@ int runScript(const char* filename, const char* args) if (*p == 0 || *p == '#') continue; /* find local variable assignments */ + if ((x = strpbrk(p, "=(, \t\n")) != NULL && *x=='=') { - unsigned int vlen = 0; - while (isalnum((unsigned char)p[vlen]) || p[vlen] == '_') vlen++; - if (p[vlen] == '=') - { - const char* r; - char* w; - int val; + const char* r; + char* w; + int val; - p[vlen++] = 0; - r = p+vlen; - w = line_raw; - while (*r) + *x++ = 0; + r = x; + w = line_raw; + while (*r) + { + if (runScriptDebug > 1) printf ("expr %s\n", r); + if (*r == '%') { - if (runScriptDebug > 1) printf ("expr %s\n", r); - if (*r == '%') - { - const char* r2 = r; - const char* f; - if ((f = getFormat(&r2)) && parseExpr(&r2, &val)) - { - w += sprintf(w, f , val); - r = r2; - } - else - { - if (runScriptDebug > 1) printf ("skip %c\n", *r); - *w++ = *r++; - } - continue; - } - if (parseExpr(&r, &val)) + const char* r2 = r; + const char* f; + if ((f = getFormat(&r2)) && parseExpr(&r2, &val)) { - if (runScriptDebug > 1) printf ("val=%d, rest=%s\n", val, r); - w += sprintf(w, "%d", val); - if (runScriptDebug > 1) printf ("rest=%s\n", r); + w += sprintf(w, f , val); + r = r2; } - else if (*r == '(' || *r == '+') + else { if (runScriptDebug > 1) printf ("skip %c\n", *r); *w++ = *r++; - continue; } - while (1) + continue; + } + if (parseExpr(&r, &val)) + { + if (runScriptDebug > 1) printf ("val=%d, rest=%s\n", val, r); + w += sprintf(w, "%d", val); + if (runScriptDebug > 1) printf ("rest=%s\n", r); + } + else if (*r == '(' || *r == '+') + { + if (runScriptDebug > 1) printf ("skip %c\n", *r); + *w++ = *r++; + continue; + } + while (1) + { + if ((*r >= '0' && *r <= '9') || *r == '(' || *r == '%') break; + if (*r == '"' || *r == '\'') { - if ((*r >= '0' && *r <= '9') || *r == '(' || *r == '%') break; - if (*r == '"' || *r == '\'') + char c = *r++; + if (runScriptDebug > 1) printf ("string %c\n", c); + while (*r && *r != c) { + *w++ = *r++; + } + *w = 0; + if (*r) r++; + if (*r == '+') { - char c = *r++; - if (runScriptDebug > 1) printf ("string %c\n", c); - while (*r && *r != c) { - *w++ = *r++; - } - *w = 0; - if (*r) r++; - if (*r == '+') - { - if (runScriptDebug > 1) printf ("skip %c\n", *r); - *w++ = *r++; - } - break; + if (runScriptDebug > 1) printf ("skip %c\n", *r); + *w++ = *r++; } - if (runScriptDebug > 1) printf ("copy %c\n", *r); - if (!(*w++ = *r)) break; - r++; - }; - } - if (runScriptDebug) - printf("runScript: assign %s=%s\n", p, line_raw); - macPutValue(mac, p, line_raw); - continue; + break; + } + if (runScriptDebug > 1) printf ("copy %c\n", *r); + if (!(*w++ = *r)) break; + r++; + }; } + if (runScriptDebug) + printf("runScript: assign %s=%s\n", p, line_raw); + macPutValue(mac, p, line_raw); + continue; } #ifdef vxWorks if (strlen(line_exp) >= 120) -- GitLab