From e73ce26fb6242dd8ddbf345cbb02aaf4a60d9cf1 Mon Sep 17 00:00:00 2001 From: cedric Date: Tue, 23 Jun 2009 13:51:41 +0000 Subject: [PATCH] * evas: Reduce malloc/free done by Fribidi use in evas. Note: More could be done to improve this situation. git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@41169 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- src/lib/engines/common/evas_intl_utils.c | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/src/lib/engines/common/evas_intl_utils.c b/src/lib/engines/common/evas_intl_utils.c index cced211..1618a2c 100644 --- a/src/lib/engines/common/evas_intl_utils.c +++ b/src/lib/engines/common/evas_intl_utils.c @@ -38,7 +38,7 @@ evas_intl_utf8_to_visual(const char *text, int *ret_len, FriBidiCharType *direct byte_len = strlen(text); /* we need the actual number of bytes, not number of chars */ - unicode_in = (FriBidiChar *)malloc(sizeof(FriBidiChar) * (len + 1)); + unicode_in = (FriBidiChar *)alloca(sizeof(FriBidiChar) * (len + 1)); if (!unicode_in) { len = -1; @@ -47,18 +47,18 @@ evas_intl_utf8_to_visual(const char *text, int *ret_len, FriBidiCharType *direct len = fribidi_utf8_to_unicode(text, byte_len, unicode_in); - unicode_out = (FriBidiChar *)malloc(sizeof(FriBidiChar) * (len + 1)); + unicode_out = (FriBidiChar *)alloca(sizeof(FriBidiChar) * (len + 1)); if (!unicode_out) { len = -2; - goto error2; + goto error1; } *embedding_level_list = (FriBidiLevel *)malloc(sizeof(FriBidiLevel) * len); if (!*embedding_level_list) { len = -3; - goto error3; + goto error2; } #ifdef ARABIC_SUPPORT @@ -69,31 +69,24 @@ evas_intl_utf8_to_visual(const char *text, int *ret_len, FriBidiCharType *direct unicode_out, NULL, NULL, *embedding_level_list)) { len = -4; - goto error3; + goto error2; } text_out = malloc(UTF8_BYTES_PER_CHAR * len + 1); if (!text_out) { len = -5; - goto error4; + goto error2; } fribidi_unicode_to_utf8(unicode_out, len, text_out); - free(unicode_in); - free(unicode_out); - *ret_len = len; return text_out; /* ERROR HANDLING */ -error4: - free(unicode_out); -error3: - free(*embedding_level_list); error2: - free(unicode_in); + free(*embedding_level_list); error1: *ret_len = len; -- 2.7.4