{
char **t;
wl_array_for_each(t, &source->types)
- free(*t);
+ {
+ free(*t);
+ *t = NULL;
+ }
}
//
wl_array_release(&source->types);
char **types;
int num = 0;
+ int count = 0;
// TIZEN_ONLY(20161226): To increse buffer size to get very long text to satify html use case.
// It should be changed to allow up to unlimit value to maintain compatibility.
buffer = malloc(_MAX_SIZE_OF_COPY_DATA);
if (!buffer)
{
+ event->done = EINA_FALSE;
+ close(read_source->read_fd);
+ _ecore_wl_dnd_del(source);
free(event);
return ECORE_CALLBACK_CANCEL;
}
len = read(read_source->read_fd, buffer, _MAX_SIZE_OF_COPY_DATA);
if (len <= 0)
{
+ event->done = EINA_FALSE;
+ close(read_source->read_fd);
+ _ecore_wl_dnd_del(source);
free(buffer);
free(event);
return ECORE_CALLBACK_CANCEL;
{
// TIZEN_ONLY(20161226): To increse buffer size to get very long text to satify html use case.
// It should be changed to allow up to unlimit value to maintain compatibility.
+ event->done = EINA_FALSE;
+ close(read_source->read_fd);
+ _ecore_wl_dnd_del(source);
free(buffer);
//
free(event);
event->data[len] = '\0';
num = (source->types.size / sizeof(char *));
- types = source->types.data;
event->num_types = num;
+
+ types = (char **)calloc(num, sizeof(char *));
+ if (!types)
+ {
+ event->done = EINA_FALSE;
+ close(read_source->read_fd);
+ _ecore_wl_dnd_del(source);
+ free(event->data);
+ free(buffer);
+ free(event);
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ if (source->types.data)
+ {
+ char **t;
+ wl_array_for_each(t, &source->types)
+ {
+ types[count] = (*t) ? strdup(*t) : NULL;
+ count++;
+ }
+ }
event->types = types;
event->len = len;
event->sel_type = source->sel_type;
if (!(ev = event)) return;
// TIZEN_ONLY(20160707): To distinguish clipboard selection in cbhm
+ int i;
+ char *s;
if (ev->data) free(ev->data);
+ for (i = 0; i < ev->num_types; i++)
+ {
+ s = ev->types[i];
+ free(s);
+ }
//
free(ev);
}