diff options
author | Chong Yidong <cyd@stupidchicken.com> | 2007-04-07 03:37:48 +0000 |
---|---|---|
committer | Chong Yidong <cyd@stupidchicken.com> | 2007-04-07 03:37:48 +0000 |
commit | 6cd0f4784be94342b1497e5427068c29adbdba4f (patch) | |
tree | d8e706f4bc82ee76bb95ba75a40000adbf2b0600 /src/editfns.c | |
parent | b1e553b4673babd3f5fc27f7ca5c3288862ee8b3 (diff) | |
download | emacs-6cd0f4784be94342b1497e5427068c29adbdba4f.tar.gz |
(Ftranspose_regions): Validate interval before setting text
properties.
Diffstat (limited to 'src/editfns.c')
-rw-r--r-- | src/editfns.c | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/src/editfns.c b/src/editfns.c index 59ac4de4c6b..2ab852d2925 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -4119,7 +4119,7 @@ Transposing beyond buffer boundaries is an error. */) int gap, len1, len_mid, len2; unsigned char *start1_addr, *start2_addr, *temp; - INTERVAL cur_intv, tmp_interval1, tmp_interval_mid, tmp_interval2; + INTERVAL cur_intv, tmp_interval1, tmp_interval_mid, tmp_interval2, tmp_interval3; Lisp_Object buf; XSETBUFFER (buf, current_buffer); @@ -4231,8 +4231,9 @@ Transposing beyond buffer boundaries is an error. */) tmp_interval2 = copy_intervals (cur_intv, start2, len2); /* Don't use Fset_text_properties: that can cause GC, which can clobber objects stored in the tmp_intervals. */ - set_text_properties_1 (make_number (start1), make_number (end2), - Qnil, buf, NULL); + tmp_interval3 = validate_interval_range (buf, &startr1, &endr2, 0); + if (!NULL_INTERVAL_P (tmp_interval3)) + set_text_properties_1 (startr1, endr2, Qnil, buf, tmp_interval3); /* First region smaller than second. */ if (len1_byte < len2_byte) @@ -4288,10 +4289,14 @@ Transposing beyond buffer boundaries is an error. */) record_change (start2, len2); tmp_interval1 = copy_intervals (cur_intv, start1, len1); tmp_interval2 = copy_intervals (cur_intv, start2, len2); - set_text_properties_1 (make_number (start1), make_number (end1), - Qnil, buf, NULL); - set_text_properties_1 (make_number (start2), make_number (end2), - Qnil, buf, NULL); + + tmp_interval3 = validate_interval_range (buf, &startr1, &endr1, 0); + if (!NULL_INTERVAL_P (tmp_interval3)) + set_text_properties_1 (startr1, endr1, Qnil, buf, tmp_interval3); + + tmp_interval3 = validate_interval_range (buf, &startr2, &endr2, 0); + if (!NULL_INTERVAL_P (tmp_interval3)) + set_text_properties_1 (startr2, endr2, Qnil, buf, tmp_interval3); SAFE_ALLOCA (temp, unsigned char *, len1_byte); start1_addr = BYTE_POS_ADDR (start1_byte); @@ -4317,8 +4322,10 @@ Transposing beyond buffer boundaries is an error. */) tmp_interval1 = copy_intervals (cur_intv, start1, len1); tmp_interval_mid = copy_intervals (cur_intv, end1, len_mid); tmp_interval2 = copy_intervals (cur_intv, start2, len2); - set_text_properties_1 (make_number (start1), make_number (end2), - Qnil, buf, NULL); + + tmp_interval3 = validate_interval_range (buf, &startr1, &endr2, 0); + if (!NULL_INTERVAL_P (tmp_interval3)) + set_text_properties_1 (startr1, endr2, Qnil, buf, tmp_interval3); /* holds region 2 */ SAFE_ALLOCA (temp, unsigned char *, len2_byte); @@ -4348,8 +4355,10 @@ Transposing beyond buffer boundaries is an error. */) tmp_interval1 = copy_intervals (cur_intv, start1, len1); tmp_interval_mid = copy_intervals (cur_intv, end1, len_mid); tmp_interval2 = copy_intervals (cur_intv, start2, len2); - set_text_properties_1 (make_number (start1), make_number (end2), - Qnil, buf, NULL); + + tmp_interval3 = validate_interval_range (buf, &startr1, &endr2, 0); + if (!NULL_INTERVAL_P (tmp_interval3)) + set_text_properties_1 (startr1, endr2, Qnil, buf, tmp_interval3); /* holds region 1 */ SAFE_ALLOCA (temp, unsigned char *, len1_byte); |