[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19939] branches/blender2.5/blender/source /blender/blenkernel/intern/text.c: 2.50: fix crashes in the text editor due to undo buffer.
Brecht Van Lommel
brecht at blender.org
Mon Apr 27 12:00:23 CEST 2009
Revision: 19939
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19939
Author: blendix
Date: 2009-04-27 12:00:22 +0200 (Mon, 27 Apr 2009)
Log Message:
-----------
2.50: fix crashes in the text editor due to undo buffer.
Modified Paths:
--------------
branches/blender2.5/blender/source/blender/blenkernel/intern/text.c
Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/text.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/text.c 2009-04-27 07:07:22 UTC (rev 19938)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/text.c 2009-04-27 10:00:22 UTC (rev 19939)
@@ -1282,24 +1282,28 @@
/* Undo functions */
/******************/
-#define MAX_UNDO_TEST(x) \
- while (text->undo_pos+x >= text->undo_len) { \
- if(text->undo_len*2 > TXT_MAX_UNDO) { \
- error("Undo limit reached, buffer cleared\n"); \
- MEM_freeN(text->undo_buf); \
- text->undo_len= TXT_INIT_UNDO; \
- text->undo_buf= MEM_mallocN(text->undo_len, "undo buf"); \
- text->undo_pos=-1; \
- return; \
- } else { \
- void *tmp= text->undo_buf; \
- text->undo_buf= MEM_callocN(text->undo_len*2, "undo buf"); \
- memcpy(text->undo_buf, tmp, text->undo_len); \
- text->undo_len*=2; \
- MEM_freeN(tmp); \
- } \
+static int max_undo_test(Text *text, int x)
+{
+ while (text->undo_pos+x >= text->undo_len) {
+ if(text->undo_len*2 > TXT_MAX_UNDO) {
+ /* XXX error("Undo limit reached, buffer cleared\n"); */
+ MEM_freeN(text->undo_buf);
+ text->undo_len= TXT_INIT_UNDO;
+ text->undo_buf= MEM_mallocN(text->undo_len, "undo buf");
+ text->undo_pos=-1;
+ return 0;
+ } else {
+ void *tmp= text->undo_buf;
+ text->undo_buf= MEM_callocN(text->undo_len*2, "undo buf");
+ memcpy(text->undo_buf, tmp, text->undo_len);
+ text->undo_len*=2;
+ MEM_freeN(tmp);
+ }
}
+ return 1;
+}
+
static void dump_buffer(Text *text)
{
int i= 0;
@@ -1445,7 +1449,8 @@
static void txt_undo_add_op(Text *text, int op)
{
- //XXX MAX_UNDO_TEST(2);
+ if(!max_undo_test(text, 2))
+ return;
text->undo_pos++;
text->undo_buf[text->undo_pos]= op;
@@ -1458,7 +1463,8 @@
length= strlen(buf);
- //XXX MAX_UNDO_TEST(length+11);
+ if(!max_undo_test(text, length+11))
+ return;
text->undo_pos++;
text->undo_buf[text->undo_pos]= op;
@@ -1492,7 +1498,8 @@
void txt_undo_add_toop(Text *text, int op, unsigned int froml, unsigned short fromc, unsigned int tol, unsigned short toc)
{
- //XXX MAX_UNDO_TEST(15);
+ if(!max_undo_test(text, 15))
+ return;
if (froml==tol && fromc==toc) return;
@@ -1535,7 +1542,8 @@
static void txt_undo_add_charop(Text *text, int op, char c)
{
- //XXX MAX_UNDO_TEST(4);
+ if(!max_undo_test(text, 4))
+ return;
text->undo_pos++;
text->undo_buf[text->undo_pos]= op;
More information about the Bf-blender-cvs
mailing list