diff options
-rw-r--r-- | modules/sed/transform.c | 8 | ||||
-rw-r--r-- | tests/sed.at | 9 |
2 files changed, 12 insertions, 5 deletions
diff --git a/modules/sed/transform.c b/modules/sed/transform.c index 67e0de8..ec7983f 100644 --- a/modules/sed/transform.c +++ b/modules/sed/transform.c @@ -617,37 +617,37 @@ _single_transform_name_to_slist (struct transform *tr, { size_t disp; const char *ptr; rc = regexec (&tf->regex, input, tf->regex.re_nsub + 1, rmp, 0); if (rc == 0) { struct replace_segm *segm; disp = rmp[0].rm_eo; - if (rmp[0].rm_so) - if (transform_append (tr, slist, input, rmp[0].rm_so)) - return 1; - nmatches++; if (tf->match_number && nmatches < tf->match_number) { if (transform_append (tr, slist, input, disp)) return 1; input += disp; continue; } + if (rmp[0].rm_so) + if (transform_append (tr, slist, input, rmp[0].rm_so)) + return 1; + for (segm = tf->repl_head; segm; segm = segm->next) { switch (segm->type) { case segm_literal: /* Literal segment */ if (case_ctl == ctl_stop) ptr = segm->v.literal.ptr; else { ptr = run_case_conv (tr, case_ctl, segm->v.literal.ptr, diff --git a/tests/sed.at b/tests/sed.at index 0f432c5..39dd99d 100644 --- a/tests/sed.at +++ b/tests/sed.at @@ -1,23 +1,30 @@ # This file is part of smap testsuite -*- autotest -*- # Copyright (C) 2021 Sergey Poznyakoff # License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> # This is free software: you are free to change and redistribute it. # There is NO WARRANTY, to the extent permitted by law. AT_SETUP([sed]) AT_DATA([smapd.conf], [idle-timeout 10 module sed sed database dequote sed 's/<(.*)>/\1/g' database default sed 's/ok-(.*)/\1/' +database n sed 's/s/@/2' +database g sed 's/s/@/2g' +dispatch map eq n database n +dispatch map eq g database g dispatch key like <*> transform key dequote dispatch default database default ]) -AT_CHECK([smaptest -c smapd.conf test ok-word test word test '<ok-word>' +AT_CHECK([smaptest -c smapd.conf test ok-word test word test '<ok-word>' n password g passwords ], [0], [test ok-word: OK word test word: NOTFOUND test <ok-word>: OK word +n password: OK pas@word +g passwords: OK pas@word@ ]) + AT_CLEANUP |