summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2015-04-12 14:31:42 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2015-04-12 14:31:42 +0200
commit41c147f40ef5d1fad211e2473fa47a47e45dfc2d (patch)
tree964824fb1adaf0184669e090c68f1a370385990e
parentcda663ab96252d0208078c0c61d3a71c1d3945da (diff)
downloadbiruda-41c147f40ef5d1fad211e2473fa47a47e45dfc2d.tar.gz
biruda-41c147f40ef5d1fad211e2473fa47a47e45dfc2d.tar.bz2
better variable parser for worker commands (I think)
-rw-r--r--src/worker.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/src/worker.c b/src/worker.c
index c73eb7e..17c7f5e 100644
--- a/src/worker.c
+++ b/src/worker.c
@@ -362,11 +362,26 @@ static char *expand_system_variables( const char *s )
fprintf( stderr, "ERROR: out of memory while substituting variables in '%s'\n", s );
state = ERROR;
}
-
- if( state == ERROR ) {
- return NULL;
+
+ switch( state ) {
+ case COPYING:
+ // fine
+ break;
+
+ case DOLLAR:
+ case OPEN_BRACE:
+ case VARIABLE:
+ fprintf( stderr, "ERROR: unterminated variable reference in '%s'\n", s );
+ break;
+
+ case CLOSE_BRACE:
+ fprintf( stderr, "ERROR: illegal state while parsing command '%s'\n", s );
+ break;
+
+ case ERROR:
+ return NULL;
}
-
+
return r;
}