diff options
-rw-r--r-- | src/wordsplit.c | 39 | ||||
-rw-r--r-- | tests/wordsplit.at | 13 |
2 files changed, 36 insertions, 16 deletions
diff --git a/src/wordsplit.c b/src/wordsplit.c index f94015a..e979f27 100644 --- a/src/wordsplit.c +++ b/src/wordsplit.c @@ -802,31 +802,41 @@ wordsplit_finish (struct wordsplit *wsp) node from the remaining nodes. */ if (wsnode_tail_coalesce (wsp, p)) return wsp->ws_errno; n++; } - if (n == 0 && (wsp->ws_flags & WRDSF_INCREMENTAL)) + if (n == 0) { - /* The loop above have eliminated all nodes. Restart the - processing, if there's any input left. */ - if (wsp->ws_endp < wsp->ws_len) + /* The loop above have eliminated all nodes. */ + if (wsp->ws_flags & WRDSF_INCREMENTAL) { - int rc; - if (wsp->ws_flags & WRDSF_SHOWDBG) - wsp->ws_debug (_("Restarting")); - rc = wordsplit_process_list (wsp, skip_delim (wsp)); - if (rc) - return rc; + /* Restart the processing, if there's any input left. */ + if (wsp->ws_endp < wsp->ws_len) + { + int rc; + if (wsp->ws_flags & WRDSF_SHOWDBG) + wsp->ws_debug (_("Restarting")); + rc = wordsplit_process_list (wsp, skip_delim (wsp)); + if (rc) + return rc; + } + else + { + wsp->ws_error = WRDSE_EOF; + return WRDSE_EOF; + } + goto again; } - else + + if (wsp->ws_flags & WRDSF_NOSPLIT) { - wsp->ws_error = WRDSE_EOF; - return WRDSE_EOF; + if (wordsplit_add_segm (wsp, 0, 0, _WSNF_EMPTYOK)) + return wsp->ws_errno; + n = 1; } - goto again; } if (alloc_space (wsp, n + 1)) return wsp->ws_errno; while (wsp->ws_head) @@ -2409,12 +2419,13 @@ wordsplit_process_list (struct wordsplit *wsp, size_t start) wsp->ws_debug ("(%02d) %s", wsp->ws_lvl, _(p->descr)); wordsplit_dump_nodes (wsp); } } } } + return wsp->ws_errno; } static int wordsplit_run (const char *command, size_t length, struct wordsplit *wsp, int flags, int lvl) diff --git a/tests/wordsplit.at b/tests/wordsplit.at index 631d939..e3af703 100644 --- a/tests/wordsplit.at +++ b/tests/wordsplit.at @@ -259,30 +259,39 @@ TESTWSP([K/V environment],[wsp-env-kv wsp-env_kv], 1: aqux TOTAL: 2 ], [], [FOO=bar BAZ=qux]) -TESTWSP([nosplit with expansion],[wsp-var-nosplit],[nosplit], +TESTWSP([nosplit with variable expansion],[wsp-var-nosplit],[nosplit], [a $FOO test], [NF: 1 0: "a variable expansion test\n" TOTAL: 1 ], [], [FOO="variable expansion"]) -TESTWSP([nosplit without expansion],[],[nosplit novar], +TESTWSP([nosplit without variable expansion],[],[nosplit novar], [a $FOO test], [NF: 1 0: "a $FOO test\n" TOTAL: 1 ], [], [FOO="variable expansion"]) +TESTWSP([nosplit: empty expansion],[],[nosplit trimnl], +[$FOO], +[NF: 1 +0: "" +TOTAL: 1 +], +[], +[FOO=""]) + TESTWSP([default value (defined)],[],[], [${FOO:-bar}], [NF: 1 0: qux TOTAL: 1 ], |