summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarius Vollmer <mvo@zagadka.de>2004-09-22 15:03:17 +0000
committerMarius Vollmer <mvo@zagadka.de>2004-09-22 15:03:17 +0000
commit4a310f1c92cc8460ee477571f35c5401b482f918 (patch)
treeec8c80b797d59ebd52e59eb2499610b4fdbb5ea9
parentce7c0293cb4097d21026a024eb08aa4907cdb956 (diff)
downloadguile-4a310f1c92cc8460ee477571f35c5401b482f918.tar.gz
(scm_string_contains, scm_string_contains_ci): Reworded logic a bit so
that #f is returned immediately when s1 is too short to contain s2.
-rw-r--r--libguile/srfi-13.c68
1 files changed, 35 insertions, 33 deletions
diff --git a/libguile/srfi-13.c b/libguile/srfi-13.c
index 526e3cecc..e31a80349 100644
--- a/libguile/srfi-13.c
+++ b/libguile/srfi-13.c
@@ -2253,22 +2253,23 @@ SCM_DEFINE (scm_string_contains, "string-contains", 2, 4, 0,
5, start2, cstart2,
6, end2, cend2);
len2 = cend2 - cstart2;
- while (cstart1 <= cend1 - len2 && cend1 >= len2)
- {
- i = cstart1;
- j = cstart2;
- while (i < cend1 && j < cend2 && cs1[i] == cs2[j])
- {
- i++;
- j++;
- }
- if (j == cend2)
- {
- scm_remember_upto_here_2 (s1, s2);
- return scm_from_size_t (cstart1);
- }
- cstart1++;
- }
+ if (cend1 - cstart1 >= len2)
+ while (cstart1 <= cend1 - len2)
+ {
+ i = cstart1;
+ j = cstart2;
+ while (i < cend1 && j < cend2 && cs1[i] == cs2[j])
+ {
+ i++;
+ j++;
+ }
+ if (j == cend2)
+ {
+ scm_remember_upto_here_2 (s1, s2);
+ return scm_from_size_t (cstart1);
+ }
+ cstart1++;
+ }
scm_remember_upto_here_2 (s1, s2);
return SCM_BOOL_F;
@@ -2299,23 +2300,24 @@ SCM_DEFINE (scm_string_contains_ci, "string-contains-ci", 2, 4, 0,
5, start2, cstart2,
6, end2, cend2);
len2 = cend2 - cstart2;
- while (cstart1 <= cend1 - len2 && cend1 >= len2)
- {
- i = cstart1;
- j = cstart2;
- while (i < cend1 && j < cend2 &&
- scm_c_downcase (cs1[i]) == scm_c_downcase (cs2[j]))
- {
- i++;
- j++;
- }
- if (j == cend2)
- {
- scm_remember_upto_here_2 (s1, s2);
- return scm_from_size_t (cstart1);
- }
- cstart1++;
- }
+ if (cend1 - cstart1 >= len2)
+ while (cstart1 <= cend1 - len2)
+ {
+ i = cstart1;
+ j = cstart2;
+ while (i < cend1 && j < cend2 &&
+ scm_c_downcase (cs1[i]) == scm_c_downcase (cs2[j]))
+ {
+ i++;
+ j++;
+ }
+ if (j == cend2)
+ {
+ scm_remember_upto_here_2 (s1, s2);
+ return scm_from_size_t (cstart1);
+ }
+ cstart1++;
+ }
scm_remember_upto_here_2 (s1, s2);
return SCM_BOOL_F;