summaryrefslogtreecommitdiff
path: root/libguile/srfi-13.c
diff options
context:
space:
mode:
authorMark H Weaver <mhw@netris.org>2014-01-09 01:32:32 -0500
committerMark H Weaver <mhw@netris.org>2014-01-09 02:52:34 -0500
commit1df515a077f26d59510e48fad3d45a33d2c90e0f (patch)
tree05991bb4b3d527390d036fbb17617d6905097bda /libguile/srfi-13.c
parent61989c705359c50c61d7f52392f244d386218298 (diff)
parent306cc01d3981feaa11aa0d866ff1d99128f0ace3 (diff)
downloadguile-1df515a077f26d59510e48fad3d45a33d2c90e0f.tar.gz
Merge branch 'stable-2.0'
Conflicts: module/system/vm/traps.scm test-suite/tests/peval.test
Diffstat (limited to 'libguile/srfi-13.c')
-rw-r--r--libguile/srfi-13.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/libguile/srfi-13.c b/libguile/srfi-13.c
index 4e5d5725f..5c30dfe20 100644
--- a/libguile/srfi-13.c
+++ b/libguile/srfi-13.c
@@ -546,10 +546,17 @@ SCM_DEFINE (scm_string_copy_x, "string-copy!", 3, 2, 0,
SCM_ASSERT_RANGE (3, s, len <= scm_i_string_length (target) - ctstart);
target = scm_i_string_start_writing (target);
- for (i = 0; i < cend - cstart; i++)
+ if (ctstart < cstart)
{
- scm_i_string_set_x (target, ctstart + i,
- scm_i_string_ref (s, cstart + i));
+ for (i = 0; i < len; i++)
+ scm_i_string_set_x (target, ctstart + i,
+ scm_i_string_ref (s, cstart + i));
+ }
+ else
+ {
+ for (i = len; i--;)
+ scm_i_string_set_x (target, ctstart + i,
+ scm_i_string_ref (s, cstart + i));
}
scm_i_string_stop_writing ();
scm_remember_upto_here_1 (target);