add AMAZING hack to work around a bug that crashes you instantly if you try to cnp...
authordiscomfitor <discomfitor@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 26 Aug 2011 02:32:49 +0000 (02:32 +0000)
committerdiscomfitor <discomfitor@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 26 Aug 2011 02:32:49 +0000 (02:32 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@62847 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/elm_cnp_helper.c

index 594463d..4fe62ad 100644 (file)
@@ -984,14 +984,21 @@ text_converter(char *target __UNUSED__, void *data, int size __UNUSED__, void **
 }
 
 static Eina_Bool
-edje_converter(char *target __UNUSED__, void *data, int size __UNUSED__, void **data_ret, int *size_ret, Ecore_X_Atom *ttype __UNUSED__, int *typesize __UNUSED__)
+edje_converter(char *target __UNUSED__, void *data, int size, void **data_ret, int *size_ret, Ecore_X_Atom *ttype __UNUSED__, int *typesize __UNUSED__)
 {
-   Cnp_Selection *sel;
-
-   sel = selections + *((int *)data);
-   if (data_ret) *data_ret = strdup(sel->selbuf);
-   if (size_ret) *size_ret = strlen(sel->selbuf);
+   if (size == sizeof(int))
+     {
+        Cnp_Selection *sel;
 
+        sel = selections + *((int *)data);
+        if (data_ret) *data_ret = strdup(sel->selbuf);
+        if (size_ret) *size_ret = strlen(sel->selbuf);
+     }
+   else if (size)
+     {
+        if (data_ret) *data_ret = strndup(data, size - 1);
+        if (size_ret) *size_ret = size - 1;
+     }
    return EINA_TRUE;
 }
 
@@ -999,11 +1006,19 @@ edje_converter(char *target __UNUSED__, void *data, int size __UNUSED__, void **
 static Eina_Bool
 html_converter(char *target __UNUSED__, void *data, int size __UNUSED__, void **data_ret, int *size_ret, Ecore_X_Atom *ttype __UNUSED__, int *typesize __UNUSED__)
 {
-   Cnp_Selection *sel;
+   if (size == sizeof(int))
+     {
+        Cnp_Selection *sel;
 
-   sel = selections + *(int *)data;
-   if (data_ret) *data_ret = strdup(sel->selbuf);
-   if (size_ret) *size_ret = strlen(sel->selbuf);
+        sel = selections + *((int *)data);
+        if (data_ret) *data_ret = strdup(sel->selbuf);
+        if (size_ret) *size_ret = strlen(sel->selbuf);
+     }
+   else if (size)
+     {
+        if (data_ret) *data_ret = strndup(data, size - 1);
+        if (size_ret) *size_ret = size - 1;
+     }
 
    return EINA_TRUE;
 }
@@ -1011,11 +1026,20 @@ html_converter(char *target __UNUSED__, void *data, int size __UNUSED__, void **
 static Eina_Bool
 uri_converter(char *target __UNUSED__, void *data, int size __UNUSED__, void **data_ret, int *size_ret, Ecore_X_Atom *ttype __UNUSED__, int *typesize __UNUSED__)
 {
-   Cnp_Selection *sel;
-   sel = selections + *((int *)data);
-   cnp_debug("Uri converter\n");
-   if (data_ret) *data_ret = strdup(sel->selbuf);
-   if (size_ret) *size_ret = strlen(sel->selbuf);
+   if (size == sizeof(int))
+     {
+        Cnp_Selection *sel;
+
+        sel = selections + *((int *)data);
+        if (data_ret) *data_ret = strdup(sel->selbuf);
+        if (size_ret) *size_ret = strlen(sel->selbuf);
+     }
+   else if (size)
+     {
+        if (data_ret) *data_ret = strndup(data, size - 1);
+        if (size_ret) *size_ret = size - 1;
+     }
+
    return EINA_TRUE;
 }