[*][entry] merged with 65225 for fixing filter problem
authorWooHyun Jung <wh0705.jung@samsung.com>
Tue, 15 Nov 2011 08:59:02 +0000 (17:59 +0900)
committerWooHyun Jung <wh0705.jung@samsung.com>
Tue, 15 Nov 2011 08:59:02 +0000 (17:59 +0900)
src/lib/elm_entry.c

index 7d6ae9c..3400dbb 100644 (file)
@@ -2682,67 +2682,72 @@ _text_append_idler(void *data)
 static void
 _add_chars_till_limit(Evas_Object *obj, char **text, int can_add, Length_Unit unit)
 {
-   int i = 0, unit_size;
-   int current_len = strlen(*text);
-   char *new_text = *text;
+   int i = 0, current_len = 0;
+   char *new_text;
+
+   if (!*text) return;
    if (unit >= LENGTH_UNIT_LAST) return;
+   new_text = *text;
+   current_len = strlen(*text);
    while (*new_text)
      {
+        int idx = 0, unit_size = 0;
+        char *markup, *utfstr;
         if (*new_text == '<')
           {
-             while (*new_text != '>')
+             while (*(new_text + idx) != '>')
                {
-                  new_text++;
-                  if (!*new_text) break;
+                  idx++;
+                  if (!*(new_text + idx)) break;
                }
-             new_text++;
           }
-        else
+        else if (*new_text == '&')
           {
-             int idx = 0;
-             if (*new_text == '&')
+             while (*(new_text + idx) != ';')
                {
-                  while (*(new_text + idx) != ';')
-                    {
-                       idx++;
-                       if (!*(new_text + idx)) break;
-                    }
+                  idx++;
+                  if (!*(new_text + idx)) break;
                }
-             char *markup;
-             idx = evas_string_char_next_get(new_text, idx, NULL);
-             markup = malloc(idx + 1);
+          }
+        idx = evas_string_char_next_get(new_text, idx, NULL);
+        markup = malloc(idx + 1);
+        if (markup)
+          {
              strncpy(markup, new_text, idx);
              markup[idx] = 0;
-             if (unit == LENGTH_UNIT_BYTE)
-               unit_size = strlen(elm_entry_markup_to_utf8(markup));
-             else if (unit == LENGTH_UNIT_CHAR)
-               unit_size = evas_string_char_len_get(elm_entry_markup_to_utf8(markup));
-             if (markup)
+             utfstr = elm_entry_markup_to_utf8(markup);
+             if (utfstr)
                {
-                  free(markup);
-                  markup = NULL;
+                  if (unit == LENGTH_UNIT_BYTE)
+                    unit_size = strlen(utfstr);
+                  else if (unit == LENGTH_UNIT_CHAR)
+                    unit_size = evas_string_char_len_get(utfstr);
+                  free(utfstr);
+                  utfstr = NULL;
                }
-             if (can_add < unit_size)
-               {
-                  if (!i)
-                    {
-                       evas_object_smart_callback_call(obj, "maxlength,reached", NULL);
-                       free(*text);
-                       *text = NULL;
-                       return;
-                    }
-                  can_add = 0;
-                  strncpy(new_text, new_text + idx, current_len - ((new_text + idx) - *text));
-                  current_len -= idx;
-                  (*text)[current_len] = 0;
-               }
-             else
+             free(markup);
+             markup = NULL;
+          }
+        if (can_add < unit_size)
+          {
+             if (!i)
                {
-                  new_text += idx;
-                  can_add -= unit_size;
+                  evas_object_smart_callback_call(obj, "maxlength,reached", NULL);
+                  free(*text);
+                  *text = NULL;
+                  return;
                }
-             i++;
+             can_add = 0;
+             strncpy(new_text, new_text + idx, current_len - ((new_text + idx) - *text));
+             current_len -= idx;
+             (*text)[current_len] = 0;
+          }
+        else
+          {
+             new_text += idx;
+             can_add -= unit_size;
           }
+        i++;
      }
    evas_object_smart_callback_call(obj, "maxlength,reached", NULL);
 }