From 4790ba40f154a93ab5826458997c0b16f4641c94 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Fri, 17 Aug 2001 00:05:12 +0000 Subject: [PATCH] ewwwww.. i forgot to free the font string.... and forgot to cleanup clip lists on objects when the evas gets deleteded and all objectsin it get nuked! woop! fix fix fix :) SVN revision: 5185 --- legacy/evas/src/evas_gl_routines.c | 27 +++++++++++++++++++++----- legacy/evas/src/evas_image.c | 6 ++++-- legacy/evas/src/evas_imlib_routines.c | 3 ++- legacy/evas/src/evas_misc.c | 11 ++++++----- legacy/evas/src/evas_object.c | 6 +++++- legacy/evas/src/evas_render_routines.c | 3 ++- legacy/evas/src/evas_text.c | 20 ++++++++++++++----- legacy/evas/src/evas_x11_routines.c | 27 +++++++++++++++++++++----- 8 files changed, 78 insertions(+), 25 deletions(-) diff --git a/legacy/evas/src/evas_gl_routines.c b/legacy/evas/src/evas_gl_routines.c index 95cdf1fe45..236b97c197 100644 --- a/legacy/evas/src/evas_gl_routines.c +++ b/legacy/evas/src/evas_gl_routines.c @@ -759,7 +759,8 @@ __evas_gl_image_alloc(char *file) im = imlib_load_image(file); if (!im) return NULL; image = malloc(sizeof(Evas_GL_Image)); - image->file = strdup(file); + image->file = malloc(strlen(file) + 1); + strcpy(image->file, file); image->im = im; prev_im = imlib_context_get_image(); imlib_context_set_image(im); @@ -1107,14 +1108,28 @@ __evas_gl_font_find(char *font) for (i = 0; i < 3; i++) { sprintf(buf, "%s%s", font, ext[i]); - if (__evas_gl_is_file(buf)) return strdup(buf); + if (__evas_gl_is_file(buf)) + { + char *f; + + f = malloc(strlen(buf) + 1); + strcpy(f, buf); + return f; + } } for (j = 0; j < __evas_fpath_num; j++) { for (i = 0; i < 3; i++) { sprintf(buf, "%s/%s%s", __evas_fpath[j], font, ext[i]); - if (__evas_gl_is_file(buf)) return strdup(buf); + if (__evas_gl_is_file(buf)) + { + char *f; + + f = malloc(strlen(buf) + 1); + strcpy(f, buf); + return f; + } } } return NULL; @@ -1138,7 +1153,8 @@ __evas_gl_font_load(char *font, int size) __evas_have_tt_engine = 1; } fn = malloc(sizeof(Evas_GL_Font)); - fn->font = strdup(font); + fn->font = malloc(strlen(font) + 1); + strcpy(fn->font, font); fn->size = size; fn->engine = __evas_tt_engine; error = TT_Open_Face(fn->engine, file, &fn->face); @@ -1876,7 +1892,8 @@ __evas_gl_text_font_add_path(char *path) if (!__evas_fpath) __evas_fpath = malloc(sizeof(char *)); else __evas_fpath = realloc(__evas_fpath, (__evas_fpath_num * sizeof(char *))); - __evas_fpath[__evas_fpath_num - 1] = strdup(path); + __evas_fpath[__evas_fpath_num - 1] = malloc(strlen(path) + 1); + strcpy(__evas_fpath[__evas_fpath_num - 1], path); } void diff --git a/legacy/evas/src/evas_image.c b/legacy/evas/src/evas_image.c index 511788e720..a48aa89178 100644 --- a/legacy/evas/src/evas_image.c +++ b/legacy/evas/src/evas_image.c @@ -67,7 +67,8 @@ evas_add_image_from_file(Evas e, char *file) if (file) { - oo->current.file = strdup(file); + oo->current.file = malloc(strlen(file) + 1); + strcpy(oo->current.file, file); { Imlib_Image im; @@ -144,7 +145,8 @@ evas_set_image_file(Evas e, Evas_Object o, char *file) if (oo->current.file) free(oo->current.file); oo->previous.file = NULL; - oo->current.file = strdup(file); + oo->current.file = malloc(strlen(file) + 1); + strcpy(oo->current.file, file); { Imlib_Image im; diff --git a/legacy/evas/src/evas_imlib_routines.c b/legacy/evas/src/evas_imlib_routines.c index 22d851dca4..dc5ba9c8f8 100644 --- a/legacy/evas/src/evas_imlib_routines.c +++ b/legacy/evas/src/evas_imlib_routines.c @@ -116,7 +116,8 @@ __evas_imlib_image_new_from_file(Display *disp, char *file) image = imlib_load_image(file); if (!image) return NULL; im = malloc(sizeof(Evas_Imlib_Image)); - im->file = strdup(file); + im->file = malloc(strlen(file) + 1); + strcpy(im->file, file); im->image = image; im->scaled.aa = 0; im->scaled.w = 0; diff --git a/legacy/evas/src/evas_misc.c b/legacy/evas/src/evas_misc.c index 33bd94a5ce..6e1edf535f 100644 --- a/legacy/evas/src/evas_misc.c +++ b/legacy/evas/src/evas_misc.c @@ -26,7 +26,6 @@ evas_new_all(Display *display, Window parent_window, Colormap colormap; e = evas_new(); - e->current.created_window = 1; evas_set_output_method(e, render_method); evas_set_output_colors(e, colors); visual = evas_get_optimal_visual(e, display); @@ -43,6 +42,7 @@ evas_new_all(Display *display, Window parent_window, visual, CWColormap | CWBorderPixel | CWEventMask | CWBackPixmap, &att); + e->current.created_window = window; if (font_dir) evas_font_add_path(e, font_dir); evas_set_output(e, display, window, visual, colormap); evas_set_output_size(e, w, h); @@ -140,13 +140,12 @@ evas_free(Evas e) if (!e) return; if ((e->current.display) && - (e->current.created_window) && - (e->current.drawable)) + (e->current.created_window)) { XErrorHandler prev_handler; prev_handler = XSetErrorHandler((XErrorHandler)_evas_x_err); - XDestroyWindow(e->current.display, e->current.drawable); + XDestroyWindow(e->current.display, e->current.created_window); XSync(e->current.display, False); XSetErrorHandler(prev_handler); } @@ -159,6 +158,7 @@ evas_free(Evas e) } if (e->layers) evas_list_free(e->layers); if (e->updates) imlib_updates_free(e->updates); + if (e->obscures) imlib_updates_free(e->obscures); free(e); } @@ -563,7 +563,8 @@ evas_put_data(Evas e, Evas_Object o, char *key, void *data) } } d = malloc(sizeof(struct _Evas_Data)); - d->key = strdup(key); + d->key = malloc(strlen(key) + 1); + strcpy(d->key, key); d->data = data; o->data = evas_list_prepend(o->data, d); } diff --git a/legacy/evas/src/evas_object.c b/legacy/evas/src/evas_object.c index 5d5c3aa612..c7faf34dab 100644 --- a/legacy/evas/src/evas_object.c +++ b/legacy/evas/src/evas_object.c @@ -102,6 +102,7 @@ _evas_layer_free(Evas e, Evas_Layer layer) o = l->data; _evas_callback_call(e, o, CALLBACK_FREE, 0, 0, 0); + _evas_cleanup_clip(e, o); if (e->mouse.object == o) e->mouse.object = NULL; if (e->mouse.button_object == o) e->mouse.button_object = NULL; _evas_remove_callbacks(e, o); @@ -696,7 +697,10 @@ evas_object_set_name(Evas e, Evas_Object o, char *name) if (o->name) free(o->name); o->name = NULL; if (name) - o->name = strdup(name); + { + o->name = malloc(strlen(name) + 1); + strcpy(o->name, name); + } } char * diff --git a/legacy/evas/src/evas_render_routines.c b/legacy/evas/src/evas_render_routines.c index 04fd247ac1..91b1f02311 100644 --- a/legacy/evas/src/evas_render_routines.c +++ b/legacy/evas/src/evas_render_routines.c @@ -59,7 +59,8 @@ __evas_render_image_new_from_file(Display *disp, char *file) fmt.type = PictTypeDirect; format_color = XRenderFindFormat(disp, PictFormatType | PictFormatDepth, &fmt, 0); - im->file = strdup(file); + im->file = malloc(strlen(file) + 1); + strcpy(im->file, file); im->references = 1; im->disp = disp; im->has_alpha = imlib_image_has_alpha(); diff --git a/legacy/evas/src/evas_text.c b/legacy/evas/src/evas_text.c index c67767f963..8fe2db2fa8 100644 --- a/legacy/evas/src/evas_text.c +++ b/legacy/evas/src/evas_text.c @@ -18,6 +18,7 @@ _evas_free_text(Evas_Object o) IF_OBJ(o, OBJECT_TEXT) return; oo = o; if (oo->current.text) free(oo->current.text); + if (oo->current.font) free(oo->current.font); free(o); } @@ -67,8 +68,10 @@ evas_add_text(Evas e, char *font, int size, char *text) o->object_free = _evas_free_text; o->object_renderer_data_free = _evas_free_text_renderer_data; - oo->current.text = strdup(text); - oo->current.font = strdup(font); + oo->current.text = malloc(strlen(text) + 1); + strcpy(oo->current.text, text); + oo->current.font = malloc(strlen(font) + 1); + strcpy(oo->current.font, font); oo->current.size = size; { @@ -829,9 +832,15 @@ evas_set_text(Evas e, Evas_Object o, char *text) if (oo->current.text) free(oo->current.text); oo->current.text = NULL; if (text) - oo->current.text = strdup(text); + { + oo->current.text = malloc(strlen(text) + 1); + strcpy(oo->current.text, text); + } else - oo->current.text = strdup(""); + { + oo->current.text = malloc(strlen("") + 1); + strcpy(oo->current.text, ""); + } oo->previous.text = NULL; { switch (e->current.render_method) @@ -965,7 +974,8 @@ evas_set_font(Evas e, Evas_Object o, char *font, int size) return; _evas_free_text_renderer_data(e, o); if (oo->current.font) free(oo->current.font); - oo->current.font = strdup(font); + oo->current.font = malloc(strlen(font) + 1); + strcpy(oo->current.font, font); oo->previous.font = NULL; oo->current.size = size; { diff --git a/legacy/evas/src/evas_x11_routines.c b/legacy/evas/src/evas_x11_routines.c index 5d6254d584..9f756010ed 100644 --- a/legacy/evas/src/evas_x11_routines.c +++ b/legacy/evas/src/evas_x11_routines.c @@ -141,7 +141,8 @@ __evas_x11_image_new_from_file(Display *disp, char *file) return NULL; } im->disp = disp; - im->file = strdup(file); + im->file = malloc(strlen(file) + 1); + strcpy(im->file, file); im->references = 1; imlib_context_set_image(im->image); im->w = imlib_image_get_width(); @@ -573,14 +574,28 @@ __evas_x11_font_find(char *font) for (i = 0; i < 3; i++) { sprintf(buf, "%s%s", font, ext[i]); - if (__evas_x11_is_file(buf)) return strdup(buf); + if (__evas_x11_is_file(buf)) + { + char *f; + + f = malloc(strlen(buf) + 1); + strcpy(f, buf); + return f; + } } for (j = 0; j < __evas_fpath_num; j++) { for (i = 0; i < 3; i++) { sprintf(buf, "%s/%s%s", __evas_fpath[j], font, ext[i]); - if (__evas_x11_is_file(buf)) return strdup(buf); + if (__evas_x11_is_file(buf)) + { + char *f; + + f = malloc(strlen(buf) + 1); + strcpy(f, buf); + return f; + } } } return NULL; @@ -604,7 +619,8 @@ __evas_x11_font_load(char *font, int size) __evas_have_tt_engine = 1; } fn = malloc(sizeof(Evas_X11_Font)); - fn->font = strdup(font); + fn->font = malloc(strlen(font) + 1); + strcpy(fn->font, font); fn->size = size; fn->engine = __evas_tt_engine; fn->mem_use = 0; @@ -877,7 +893,8 @@ __evas_x11_text_font_add_path(char *path) if (!__evas_fpath) __evas_fpath = malloc(sizeof(char *)); else __evas_fpath = realloc(__evas_fpath, (__evas_fpath_num * sizeof(char *))); - __evas_fpath[__evas_fpath_num - 1] = strdup(path); + __evas_fpath[__evas_fpath_num - 1] = malloc(strlen(path) + 1); + strcpy(__evas_fpath[__evas_fpath_num - 1], path); } void