Enlightenment CVS committal

Author  : lok
Project : e17
Module  : libs/etk

Dir     : e17/libs/etk/src/lib


Modified Files:
        etk_entry.c etk_entry.h 


Log Message:
Do not over-allocate.
Use a size_t for the max size.

===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_entry.c,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -3 -r1.53 -r1.54
--- etk_entry.c 6 May 2008 22:17:47 -0000       1.53
+++ etk_entry.c 6 May 2008 22:44:17 -0000       1.54
@@ -138,9 +138,11 @@
       text_tmp = strdup(text);
    else
    {
-      text_tmp = malloc(entry->text_limit + 1);
-      text_tmp[entry->text_limit] = '\0';
-      strncpy(text_tmp, text, entry->text_limit);
+      size_t limit = strlen(text);
+      limit = ETK_MIN(entry->text_limit, limit);
+      text_tmp = malloc(limit + 1);
+      text_tmp[limit] = '\0';
+      strncpy(text_tmp, text, limit);
    }
 
    if (!entry->editable_object && entry->text != text)
@@ -179,7 +181,7 @@
  * @param entry an entry
  * @param limit the limit of text length, 0 means no limit
  */
-void etk_entry_text_limit_set(Etk_Entry *entry, int limit) 
+void etk_entry_text_limit_set(Etk_Entry *entry, size_t limit) 
 {
    if (!entry) 
       return;
@@ -197,7 +199,7 @@
  * @param entry an entry
  * @return Returns the limit of text entry, 0 means no limit. 
  */ 
-int etk_entry_text_limit_get(Etk_Entry *entry) 
+size_t etk_entry_text_limit_get(Etk_Entry *entry) 
 {
    if (!entry)
       return -1;
@@ -420,7 +422,7 @@
    entry->imf_ee_handler_commit = NULL;
    entry->imf_ee_handler_delete = NULL;
    entry->text = NULL;
-   entry->text_limit=0;
+   entry->text_limit = 0;
 
    entry->internal_entry = etk_widget_new(ETK_WIDGET_TYPE, 
"repeat-mouse-events", ETK_TRUE,
          "theme-group", "entry", "theme-parent", entry, "parent", entry, 
"internal", ETK_TRUE, NULL);
@@ -656,7 +658,7 @@
 
    etk_editable_theme_set(entry->editable_object, 
etk_widget_theme_file_get(internal_entry),
          etk_widget_theme_group_get(internal_entry));
-   if (entry->text_limit==0) 
+   if (entry->text_limit == 0) 
       etk_editable_text_set(entry->editable_object, entry->text);
    else 
    {
@@ -664,9 +666,11 @@
          text_tmp = NULL;
       else
       {
-         text_tmp = malloc(entry->text_limit+1);
-         text_tmp[entry->text_limit] = '\0';
-         strncpy(text_tmp, entry->text, entry->text_limit);
+         size_t limit = strlen(entry->text);
+         limit = ETK_MIN(entry->text_limit, limit);
+         text_tmp = malloc(limit+1);
+         text_tmp[limit] = '\0';
+         strncpy(text_tmp, entry->text, limit);
       }
       etk_editable_text_set(entry->editable_object, text_tmp);
       free(text_tmp);
@@ -755,9 +759,11 @@
          entry->text = strdup(text);
       else 
       {
-         entry->text = malloc(entry->text_limit+1);
-         entry->text[entry->text_limit] = '\0';
-         strncpy(entry->text, text, entry->text_limit);
+         size_t limit = strlen(text);
+         limit = ETK_MIN(entry->text_limit, limit);
+         entry->text = malloc(limit+1);
+         entry->text[limit] = '\0';
+         strncpy(entry->text, text, limit);
       }
    }
    else
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_entry.h,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -3 -r1.22 -r1.23
--- etk_entry.h 5 May 2008 13:47:04 -0000       1.22
+++ etk_entry.h 6 May 2008 22:44:17 -0000       1.23
@@ -55,7 +55,7 @@
    Ecore_IMF_Context *imf_context;
 
    char *text;
-   int text_limit;
+   size_t text_limit;
 
    Etk_Color highlight_color;
    int image_interspace;
@@ -76,8 +76,8 @@
 
 void        etk_entry_text_set(Etk_Entry *entry, const char *text);
 const char *etk_entry_text_get(Etk_Entry *entry);
-void        etk_entry_text_limit_set(Etk_Entry *entry, int limit);
-int         etk_entry_text_limit_get(Etk_Entry *entry);
+void        etk_entry_text_limit_set(Etk_Entry *entry, size_t limit);
+size_t      etk_entry_text_limit_get(Etk_Entry *entry);
 void        etk_entry_clear(Etk_Entry *entry);
 void        etk_entry_image_set(Etk_Entry *entry, Etk_Entry_Image_Position 
position, Etk_Image *image);
 Etk_Image  *etk_entry_image_get(Etk_Entry *entry, Etk_Entry_Image_Position 
position);



-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Don't miss this year's exciting event. There's still time to save $100. 
Use priority code J8TL2D2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to