From 560f468b21c31fc3f1f1b3777b4f56f534a816b9 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 26 Aug 2011 02:32:49 +0000 Subject: [PATCH] add AMAZING hack to work around a bug that crashes you instantly if you try to cnp in elm SVN revision: 62847 --- src/lib/elm_cnp_helper.c | 54 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 39 insertions(+), 15 deletions(-) diff --git a/src/lib/elm_cnp_helper.c b/src/lib/elm_cnp_helper.c index 594463d..4fe62ad 100644 --- a/src/lib/elm_cnp_helper.c +++ b/src/lib/elm_cnp_helper.c @@ -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; } -- 2.7.4