Evas textblock: Added some NULL checks that shouldn't happen.

SVN revision: 71708
This commit is contained in:
Tom Hacohen 2012-06-05 11:35:58 +00:00
parent 06bce244aa
commit 01c10de3f5
1 changed files with 55 additions and 19 deletions

View File

@ -93,6 +93,42 @@ static const char o_type[] = "textblock";
((ch) == _TAB) || \
((ch) == _PARAGRAPH_SEPARATOR))
#ifdef CRITICAL
#undef CRITICAL
#endif
#define CRITICAL(...) EINA_LOG_DOM_CRIT(EINA_LOG_DOMAIN_DEFAULT, __VA_ARGS__)
#ifdef ERR
#undef ERR
#endif
#define ERR(...) EINA_LOG_DOM_ERR(EINA_LOG_DOMAIN_DEFAULT, __VA_ARGS__)
#ifdef WRN
#undef WRN
#endif
#define WRN(...) EINA_LOG_DOM_WARN(EINA_LOG_DOMAIN_DEFAULT, __VA_ARGS__)
#ifdef INF
#undef INF
#endif
#define INF(...) EINA_LOG_DOM_INFO(EINA_LOG_DOMAIN_DEFAULT, __VA_ARGS__)
#ifdef DBG
#undef DBG
#endif
#define DBG(...) EINA_LOG_DOM_DBG(EINA_LOG_DOMAIN_DEFAULT, __VA_ARGS__)
#define TB_NULL_CHECK(null_check, ...) \
do \
{ \
if (!null_check) \
{ \
ERR("%s is NULL while it shouldn't be, please notify developers.", #null_check); \
return __VA_ARGS__; \
} \
} \
while(0)
/* private struct for textblock object internal data */
/**
* @internal
@ -5540,7 +5576,7 @@ _evas_textblock_cursor_node_format_at_pos_get(const Evas_Textblock_Cursor *cur)
Evas_Object_Textblock_Node_Format *itr;
int position = 0;
if (!cur->node) return NULL;
TB_NULL_CHECK(cur->node, NULL);
node = cur->node->format_node;
if (!node) return NULL;
@ -5631,7 +5667,7 @@ _evas_textblock_cursor_node_format_before_or_at_pos_get(const Evas_Textblock_Cur
Evas_Object_Textblock_Node_Format *itr;
size_t position = 0;
if (!cur->node) return NULL;
TB_NULL_CHECK(cur->node, NULL);
node = cur->node->format_node;
if (!node) return NULL;
@ -5934,7 +5970,7 @@ EAPI Eina_Bool
evas_textblock_cursor_paragraph_next(Evas_Textblock_Cursor *cur)
{
if (!cur) return EINA_FALSE;
if (!cur->node) return EINA_FALSE;
TB_NULL_CHECK(cur->node, EINA_FALSE);
/* If there is a current text node, return the next text node (if exists)
* otherwise, just return False. */
if (cur->node)
@ -5957,7 +5993,7 @@ evas_textblock_cursor_paragraph_prev(Evas_Textblock_Cursor *cur)
{
Evas_Object_Textblock_Node_Text *node;
if (!cur) return EINA_FALSE;
if (!cur->node) return EINA_FALSE;
TB_NULL_CHECK(cur->node, EINA_FALSE);
/* If the current node is a text node, just get the prev if any,
* if it's a format, get the current text node out of the format and return
* the prev text node if any. */
@ -5990,7 +6026,7 @@ evas_textblock_cursor_format_next(Evas_Textblock_Cursor *cur)
Evas_Object_Textblock_Node_Format *node;
if (!cur) return EINA_FALSE;
if (!cur->node) return EINA_FALSE;
TB_NULL_CHECK(cur->node, EINA_FALSE);
/* If the current node is a format node, just get the next if any,
* if it's a text, get the current format node out of the text and return
* the next format node if any. */
@ -6026,7 +6062,7 @@ evas_textblock_cursor_format_prev(Evas_Textblock_Cursor *cur)
{
const Evas_Object_Textblock_Node_Format *node;
if (!cur) return EINA_FALSE;
if (!cur->node) return EINA_FALSE;
TB_NULL_CHECK(cur->node, EINA_FALSE);
node = evas_textblock_cursor_format_get(cur);
if (!node)
{
@ -6082,7 +6118,7 @@ evas_textblock_cursor_word_start(Evas_Textblock_Cursor *cur)
#endif
if (!cur) return EINA_FALSE;
if (!cur->node) return EINA_FALSE;
TB_NULL_CHECK(cur->node, EINA_FALSE);
text = eina_ustrbuf_string_get(cur->node->unicode);
@ -6129,7 +6165,7 @@ evas_textblock_cursor_word_end(Evas_Textblock_Cursor *cur)
#endif
if (!cur) return EINA_FALSE;
if (!cur->node) return EINA_FALSE;
TB_NULL_CHECK(cur->node, EINA_FALSE);
text = eina_ustrbuf_string_get(cur->node->unicode);
@ -6168,7 +6204,7 @@ evas_textblock_cursor_char_next(Evas_Textblock_Cursor *cur)
const Eina_Unicode *text;
if (!cur) return EINA_FALSE;
if (!cur->node) return EINA_FALSE;
TB_NULL_CHECK(cur->node, EINA_FALSE);
ind = cur->pos;
text = eina_ustrbuf_string_get(cur->node->unicode);
@ -6203,7 +6239,7 @@ EAPI Eina_Bool
evas_textblock_cursor_char_prev(Evas_Textblock_Cursor *cur)
{
if (!cur) return EINA_FALSE;
if (!cur->node) return EINA_FALSE;
TB_NULL_CHECK(cur->node, EINA_FALSE);
if (cur->pos != 0)
{
@ -6227,7 +6263,7 @@ evas_textblock_cursor_paragraph_char_last(Evas_Textblock_Cursor *cur)
int ind;
if (!cur) return;
if (!cur->node) return;
TB_NULL_CHECK(cur->node);
ind = eina_ustrbuf_length_get(cur->node->unicode);
/* If it's not the last paragraph, go back one, because we want to point
* to the PS, not the NULL */
@ -6249,7 +6285,7 @@ evas_textblock_cursor_line_char_first(Evas_Textblock_Cursor *cur)
Evas_Object_Textblock_Item *it = NULL;
if (!cur) return;
if (!cur->node) return;
TB_NULL_CHECK(cur->node);
o = (Evas_Object_Textblock *)(cur->obj->object_data);
if (!o->formatted.valid) _relayout(cur->obj);
@ -6283,7 +6319,7 @@ evas_textblock_cursor_line_char_last(Evas_Textblock_Cursor *cur)
Evas_Object_Textblock_Item *it = NULL;
if (!cur) return;
if (!cur->node) return;
TB_NULL_CHECK(cur->node);
o = (Evas_Object_Textblock *)(cur->obj->object_data);
if (!o->formatted.valid) _relayout(cur->obj);
@ -6771,7 +6807,7 @@ evas_textblock_cursor_pos_get(const Evas_Textblock_Cursor *cur)
size_t npos = 0;
if (!cur) return -1;
if (!cur->node) return 0;
TB_NULL_CHECK(cur->node, 0);
o = (Evas_Object_Textblock *)(cur->obj->object_data);
n = o->text_nodes;
while (n != cur->node)
@ -7366,7 +7402,7 @@ _evas_textblock_cursor_is_at_the_end(const Evas_Textblock_Cursor *cur)
const Eina_Unicode *text;
if (!cur) return EINA_FALSE;
if (!cur->node) return EINA_FALSE;
TB_NULL_CHECK(cur->node, EINA_FALSE);
text = eina_ustrbuf_string_get(cur->node->unicode);
if ((cur->pos - 1) > eina_ustrbuf_length_get(cur->node->unicode)) return EINA_FALSE;
return ((text[cur->pos] == 0) && (!EINA_INLIST_GET(cur->node)->next)) ?
@ -8022,7 +8058,7 @@ evas_textblock_cursor_paragraph_text_get(const Evas_Textblock_Cursor *cur)
{
Evas_Textblock_Cursor cur1, cur2;
if (!cur) return NULL;
if (!cur->node) return NULL;
TB_NULL_CHECK(cur->node, NULL);
if (cur->node->utf8)
{
free(cur->node->utf8);
@ -8042,7 +8078,7 @@ evas_textblock_cursor_paragraph_text_length_get(const Evas_Textblock_Cursor *cur
{
int len;
if (!cur) return -1;
if (!cur->node) return -1;
TB_NULL_CHECK(cur->node, -1);
len = eina_ustrbuf_length_get(cur->node->unicode);
if (EINA_INLIST_GET(cur->node)->next)
@ -8055,7 +8091,7 @@ EAPI const Evas_Object_Textblock_Node_Format *
evas_textblock_cursor_format_get(const Evas_Textblock_Cursor *cur)
{
if (!cur) return NULL;
if (!cur->node) return NULL;
TB_NULL_CHECK(cur->node, NULL);
return _evas_textblock_cursor_node_format_at_pos_get(cur);
}
@ -8099,7 +8135,7 @@ evas_textblock_cursor_format_is_visible_get(const Evas_Textblock_Cursor *cur)
const Eina_Unicode *text;
if (!cur) return EINA_FALSE;
if (!cur->node) return EINA_FALSE;
TB_NULL_CHECK(cur->node, EINA_FALSE);
if (!evas_textblock_cursor_is_format(cur)) return EINA_FALSE;
text = eina_ustrbuf_string_get(cur->node->unicode);
return EVAS_TEXTBLOCK_IS_VISIBLE_FORMAT_CHAR(text[cur->pos]);