Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-11-09 07:36:38 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-11-09 07:36:38 +0400
commitcf08068e10040a3f4d5548bfcb4e4940d2f75d8d (patch)
tree5c1830313452117e6b2568c9c1d72a04b1c07f79 /source/blender/blenlib/intern/string_utf8.c
parent41deb7b021126f0b9566ee1f87787ca73adc215d (diff)
fix [#33121] crashing when srolling down in text editor !
Diffstat (limited to 'source/blender/blenlib/intern/string_utf8.c')
-rw-r--r--source/blender/blenlib/intern/string_utf8.c27
1 files changed, 20 insertions, 7 deletions
diff --git a/source/blender/blenlib/intern/string_utf8.c b/source/blender/blenlib/intern/string_utf8.c
index 0b737e0eff5..e80f96ee0fe 100644
--- a/source/blender/blenlib/intern/string_utf8.c
+++ b/source/blender/blenlib/intern/string_utf8.c
@@ -317,12 +317,12 @@ size_t BLI_strncpy_wchar_from_utf8(wchar_t *dst_w, const char *src_c, const size
/* end wchar_t / utf8 functions */
/* --------------------------------------------------------------------------*/
-/* copied from glib's gutf8.c */
+/* copied from glib's gutf8.c, added 'Err' arg */
/* note, glib uses unsigned int for unicode, best we do the same,
* though we don't typedef it - campbell */
-#define UTF8_COMPUTE(Char, Mask, Len) \
+#define UTF8_COMPUTE(Char, Mask, Len, Err) \
if (Char < 128) { \
Len = 1; \
Mask = 0x7f; \
@@ -348,7 +348,7 @@ size_t BLI_strncpy_wchar_from_utf8(wchar_t *dst_w, const char *src_c, const size
Mask = 0x01; \
} \
else { \
- Len = -1; \
+ Len = Err; /* -1 is the typical error value or 1 to skip */ \
} (void)0
/* same as glib define but added an 'Err' arg */
@@ -371,7 +371,20 @@ int BLI_str_utf8_size(const char *p)
int mask = 0, len;
unsigned char c = (unsigned char) *p;
- UTF8_COMPUTE (c, mask, len);
+ UTF8_COMPUTE (c, mask, len, -1);
+
+ (void)mask; /* quiet warning */
+
+ return len;
+}
+
+/* use when we want to skip errors */
+int BLI_str_utf8_size_safe(const char *p)
+{
+ int mask = 0, len;
+ unsigned char c = (unsigned char) *p;
+
+ UTF8_COMPUTE (c, mask, len, 1);
(void)mask; /* quiet warning */
@@ -397,7 +410,7 @@ unsigned int BLI_str_utf8_as_unicode(const char *p)
unsigned int result;
unsigned char c = (unsigned char) *p;
- UTF8_COMPUTE (c, mask, len);
+ UTF8_COMPUTE (c, mask, len, -1);
if (len == -1)
return BLI_UTF8_ERR;
UTF8_GET (result, p, i, mask, len, BLI_UTF8_ERR);
@@ -412,7 +425,7 @@ unsigned int BLI_str_utf8_as_unicode_and_size(const char *p, size_t *index)
unsigned int result;
unsigned char c = (unsigned char) *p;
- UTF8_COMPUTE (c, mask, len);
+ UTF8_COMPUTE (c, mask, len, -1);
if (len == -1)
return BLI_UTF8_ERR;
UTF8_GET (result, p, i, mask, len, BLI_UTF8_ERR);
@@ -431,7 +444,7 @@ unsigned int BLI_str_utf8_as_unicode_step(const char *p, size_t *index)
p += *index;
c = (unsigned char) *p;
- UTF8_COMPUTE (c, mask, len);
+ UTF8_COMPUTE (c, mask, len, -1);
if (len == -1) {
/* when called with NULL end, result will never be NULL,
* checks for a NULL character */