commit 29fae81fb76c854f41b493ab6c8a67e2ae834a58 from: Igor Burago via: Dan Cross date: Wed Sep 07 13:31:36 2022 UTC plumber: allow underscores in variable names in plumbing rules Fixes #561. commit - 4f801be05521d52e3e5a43b3ed4b4a1206ed871e commit + 29fae81fb76c854f41b493ab6c8a67e2ae834a58 blob - 2cb4afe9a569d13281b34918bb9e9a4a08078079 blob + e1687d43217b74e66a7cc8a3dc0c868ffb8956a7 --- src/cmd/plumb/rules.c +++ src/cmd/plumb/rules.c @@ -216,6 +216,16 @@ setvariable(char *s, int n, char *val, char *qval) } static char* +scanvarname(char *s) +{ + if(isalpha((uchar)*s) || *s=='_') + do + s++; + while(isalnum((uchar)*s) || *s=='_'); + return s; +} + +static char* nonnil(char *s) { if(s == nil) @@ -249,16 +259,15 @@ dollar(Exec *e, char *s, int *namelen) { int n; static char *abuf; - char *t; *namelen = 1; if(e!=nil && '0'<=s[0] && s[0]<='9') return nonnil(e->match[s[0]-'0']); - for(t=s; isalnum((uchar)*t); t++) - ; - n = t-s; + n = scanvarname(s)-s; *namelen = n; + if(n == 0) + return nil; if(e != nil){ if(n == 3){ @@ -391,17 +400,17 @@ assignment(char *p) char *var, *qval; int n; - if(!isalpha((uchar)p[0])) - return 0; - for(var=p; isalnum((uchar)*p); p++) - ; + var = p; + p = scanvarname(p); n = p-var; + if(n == 0) + return 0; while(*p==' ' || *p=='\t') - p++; + p++; if(*p++ != '=') return 0; while(*p==' ' || *p=='\t') - p++; + p++; qval = expand(nil, p, nil); setvariable(var, n, p, qval); return 1;