[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36179] trunk/blender/source/blender/ blenkernel: possible fix [#26930] Blender 2. 57 Shuts down when trying to edit 3D text

Campbell Barton ideasman42 at gmail.com
Fri Apr 15 05:47:55 CEST 2011


Revision: 36179
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36179
Author:   campbellbarton
Date:     2011-04-15 03:47:54 +0000 (Fri, 15 Apr 2011)
Log Message:
-----------
possible fix [#26930] Blender 2.57 Shuts down when trying to edit 3D text
can't test but this avoids using strncat which is giving problems.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_font.h
    trunk/blender/source/blender/blenkernel/intern/font.c

Modified: trunk/blender/source/blender/blenkernel/BKE_font.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_font.h	2011-04-15 02:45:02 UTC (rev 36178)
+++ trunk/blender/source/blender/blenkernel/BKE_font.h	2011-04-15 03:47:54 UTC (rev 36179)
@@ -84,10 +84,10 @@
 
 int BKE_font_getselection(struct Object *ob, int *start, int *end);
 
-void chtoutf8(unsigned long c, char *o);
-void wcs2utf8s(char *dst, wchar_t *src);
-int wcsleninu8(wchar_t *src);
-int utf8towchar(wchar_t *w, char *c);
+size_t chtoutf8(const unsigned long c, char o[4]);
+void wcs2utf8s(char *dst, const wchar_t *src);
+size_t wcsleninu8(wchar_t *src);
+size_t utf8towchar(wchar_t *w, const char *c);
 
 #ifdef __cplusplus
 }

Modified: trunk/blender/source/blender/blenkernel/intern/font.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/font.c	2011-04-15 02:45:02 UTC (rev 36178)
+++ trunk/blender/source/blender/blenkernel/intern/font.c	2011-04-15 03:47:54 UTC (rev 36179)
@@ -67,69 +67,61 @@
 static ListBase ttfdata= {NULL, NULL};
 
 /* UTF-8 <-> wchar transformations */
-void
-chtoutf8(unsigned long c, char *o)
+size_t chtoutf8(const unsigned long c, char o[4])
 {
 	// Variables and initialization
-/*	memset(o, 0, 16);	*/
+/*	memset(o, 0, 4);	*/
 
 	// Create the utf-8 string
-	if (c < 0x80)
-	{
+	if (c < 0x80) {
 		o[0] = (char) c;
+		return 1;
 	}
-	else if (c < 0x800)
-	{
+	else if (c < 0x800) {
 		o[0] = (0xC0 | (c>>6));
 		o[1] = (0x80 | (c & 0x3f));
+		return 2;
 	}
-	else if (c < 0x10000)
-	{
+	else if (c < 0x10000) {
 		o[0] = (0xe0 | (c >> 12));
 		o[1] = (0x80 | (c >>6 & 0x3f));
 		o[2] = (0x80 | (c & 0x3f));
+		return 3;
 	}
-	else if (c < 0x200000)
-	{
-	o[0] = (0xf0 | (c>>18));
-	o[1] = (0x80 | (c >>12 & 0x3f));
-	o[2] = (0x80 | (c >> 6 & 0x3f));
-	o[3] = (0x80 | (c & 0x3f));
+	else if (c < 0x200000) {
+		o[0] = (0xf0 | (c>>18));
+		o[1] = (0x80 | (c >>12 & 0x3f));
+		o[2] = (0x80 | (c >> 6 & 0x3f));
+		o[3] = (0x80 | (c & 0x3f));
+		return 4;
 	}
+
+	/* should we assert here? */
+	return 0;
 }
 
-void
-wcs2utf8s(char *dst, wchar_t *src)
+void wcs2utf8s(char *dst, const wchar_t *src)
 {
-	/* NULL terminator not needed */
-	char ch[4];
-
-	while(*src)
-	{
-		memset(ch, 0, sizeof(ch));
-		chtoutf8(*src++, ch);
-		dst= strncat(dst, ch, sizeof(ch));
+	while(*src) {
+		dst += chtoutf8(*src++, dst);
 	}
+
+	*dst= '\0';
 }
 
-int
-wcsleninu8(wchar_t *src)
+size_t wcsleninu8(wchar_t *src)
 {
-	char ch[16];
-	int len = 0;
+	char ch_dummy[4];
+	size_t len = 0;
 
-	while(*src)
-	{
-		memset(ch, 0, 16);
-		chtoutf8(*src++, ch);
-		len = len + strlen(ch);
+	while(*src) {
+		len += chtoutf8(*src++, ch_dummy);
 	}
 
 	return len;
 }
 
-static int
-utf8slen(const char *strc)
+static size_t utf8slen(const char *strc)
 {
 	int len=0;
 
@@ -172,7 +164,7 @@
 
 */
 
-int utf8towchar(wchar_t *w, char *c)
+size_t utf8towchar(wchar_t *w, const char *c)
 {
 	int len=0;
 




More information about the Bf-blender-cvs mailing list