Correct VdS when operating on a selected region

- only accept \0 terminated strings
- unify code mostly with style of Vds. Not strictly needed
  when only \0 terminated strings are accepted.
- don't care about block boundary. Upper code already defines
  the region for us which may or may not be a block.
Another piece of #1621.