diff --git a/srfi-13.scm b/srfi-13.scm index 7b16153..f45ebed 100644 --- a/srfi-13.scm +++ b/srfi-13.scm @@ -1066,7 +1066,7 @@ (let-optionals* criteria+start+end ((criteria char-set:whitespace) rest) (let-string-start+end (start end) string-trim-right s rest (cond ((string-skip-right s criteria start end) => - (lambda (i) (%substring/shared s 0 (+ 1 i)))) + (lambda (i) (%substring/shared s (min start (+ i 1)) (+ 1 i)))) (else ""))))) (define (string-trim-both s . criteria+start+end) @@ -1208,17 +1208,17 @@ (let-string-start+end (start end) string-index-right str maybe-start+end (cond ((char? criteria) (let lp ((i (- end 1))) - (and (>= i 0) + (and (>= i start) (if (char=? criteria (string-ref str i)) i (lp (- i 1)))))) ((char-set? criteria) (let lp ((i (- end 1))) - (and (>= i 0) + (and (>= i start) (if (char-set-contains? criteria (string-ref str i)) i (lp (- i 1)))))) ((procedure? criteria) (let lp ((i (- end 1))) - (and (>= i 0) + (and (>= i start) (if (criteria (string-ref str i)) i (lp (- i 1)))))) (else (##sys#error 'string-index-right "Second param is neither char-set, char, or predicate procedure." @@ -1250,19 +1250,19 @@ (let-string-start+end (start end) string-skip-right str maybe-start+end (cond ((char? criteria) (let lp ((i (- end 1))) - (and (>= i 0) + (and (>= i start) (if (char=? criteria (string-ref str i)) (lp (- i 1)) i)))) ((char-set? criteria) (let lp ((i (- end 1))) - (and (>= i 0) + (and (>= i start) (if (char-set-contains? criteria (string-ref str i)) (lp (- i 1)) i)))) ((procedure? criteria) (let lp ((i (- end 1))) - (and (>= i 0) + (and (>= i start) (if (criteria (string-ref str i)) (lp (- i 1)) i)))) (else (##sys#error 'string-skip-right "CRITERIA param is neither char-set or char."