> There seems to be an inconsistency here. Can (c_start >= c_len) be > relaxed to c_start > c_len? Done. `substring' was a useful reference. > It would be nice to document if it's an open, closed or half- > open/closed range. E.g. see the documentation of 'substring': Done. > It seems a bit weird to support [start] and [end] for utf8->string but > not for utf16->string and utf32->string. I will gladly implement those too. I wanted feedback on the code before I implemented all of them, which you provided, thank you. I still want thoughts on the name of the new C function. If that is okay, then I can implement the rest following the same name pattern. >> +      c_start = scm_to_size_t (start); > > This seems suboptimal because if start > SIZE_MAX, > then this will throw an 'out-of-range' exception without attributing > it to 'utf8->string' (untested). Switched to scm_to_unsigned_integer, that does bounds checks. This is what `substring' does. The updated patch is attached. ~ Vijay