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