From 79f20530a0d64297552ed00f7acf8f064681a4cc Mon Sep 17 00:00:00 2001 From: "Steffen (Daode) Nurpmeso" Date: Sat, 18 Jun 2016 16:26:24 +0200 Subject: [PATCH] `if'+: support sh(1)-style comments on the line.. now that [topic/wysh] added sh(1)ell-style argument quoting including shell-style comments (for some commands already) i for one start hating not being able to use shell-style comments anywhere. A (more or less) backward-compatible step ahead is adding support for comments on `if' lines. --- cmd_cnd.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/cmd_cnd.c b/cmd_cnd.c index c2305342..cac3b037 100644 --- a/cmd_cnd.c +++ b/cmd_cnd.c @@ -33,7 +33,7 @@ struct cond_stack { struct if_cmd { char const * const *ic_argv_base; - char const * const *ic_argv_max; + char const * const *ic_argv_max; /* BUT: .ic_argv MUST be terminated! */ char const * const *ic_argv; }; @@ -410,10 +410,10 @@ FL int c_if(void *v) { struct if_cmd ic; + char const * const *argv; struct cond_stack *csp; size_t argc; - si8_t xrv, rv = 1; - char const * const *argv = v; + si8_t xrv, rv; NYD_ENTER; csp = smalloc(sizeof *csp); @@ -429,18 +429,29 @@ c_if(void *v) goto jleave; } - for (argc = 0; argv[argc] != NULL; ++argc) - ; - assert(argc > 0); /* (Minimum argument count for command) */ + /* For heaven's sake, support comments _today_ TODO wyshlist.. */ + for (argc = 0, argv = v; argv[argc] != NULL; ++argc) + if(argv[argc][0] == '#'){ + char const **nav = salloc(sizeof(char*) * (argc + 1)); + size_t i; + + for(i = 0; i < argc; ++i) + nav[i] = argv[i]; + nav[i] = NULL; + argv = nav; + break; + } ic.ic_argv_base = ic.ic_argv = argv; - ic.ic_argv_max = argv + argc; + ic.ic_argv_max = &argv[argc]; xrv = _if_group(&ic, 0, FAL0); if (xrv >= 0) { csp->c_go = (bool_t)xrv; rv = 0; - } else + } else { csp->c_error = csp->c_noop = TRU1; + rv = 1; + } jleave: NYD_LEAVE; return rv; -- 2.11.4.GIT