disable stringshare... something fishy.

SVN revision: 18698
This commit is contained in:
Carsten Haitzler 2005-11-29 09:02:51 +00:00
parent a976ce3d4e
commit 7ea7bdf610
10 changed files with 144 additions and 111 deletions

View File

@ -94,7 +94,7 @@ evas_font_set_get(const char *name)
p = strchr(name, ','); p = strchr(name, ',');
if (!p) if (!p)
{ {
fonts = evas_list_append(fonts, evas_stringshare_add(name)); fonts = evas_list_append(fonts, strdup(name));
} }
else else
{ {
@ -110,7 +110,7 @@ evas_font_set_get(const char *name)
fonts = evas_list_append(fonts, nm); fonts = evas_list_append(fonts, nm);
pp = p + 1; pp = p + 1;
p = strchr(pp, ','); p = strchr(pp, ',');
if (!p) fonts = evas_list_append(fonts, evas_stringshare_add(pp)); if (!p) fonts = evas_list_append(fonts, strdup(pp));
} }
} }
return fonts; return fonts;
@ -145,8 +145,8 @@ evas_font_free(Evas *evas, void *font)
fd = evas_list_data(fonts_zero); fd = evas_list_data(fonts_zero);
if (fd->ref != 0) break; if (fd->ref != 0) break;
fonts_zero = evas_list_remove_list(fonts_zero, fonts_zero); fonts_zero = evas_list_remove_list(fonts_zero, fonts_zero);
if (fd->name) evas_stringshare_del(fd->name); if (fd->name) free(fd->name);
if (fd->source) evas_stringshare_del(fd->source); if (fd->source) free(fd->source);
evas->engine.func->font_free(evas->engine.data.output, fd->font); evas->engine.func->font_free(evas->engine.data.output, fd->font);
free(fd); free(fd);
} }
@ -323,14 +323,14 @@ evas_font_load(Evas *evas, const char *name, const char *source, int size)
} }
#endif #endif
} }
evas_stringshare_del(nm); free(nm);
} }
evas_list_free(fonts); evas_list_free(fonts);
fd = calloc(1, sizeof(Fndat)); fd = calloc(1, sizeof(Fndat));
if (fd) if (fd)
{ {
fd->name = evas_stringshare_add(name); fd->name = strdup(name);
if (source) fd->source = evas_stringshare_add(source); if (source) fd->source = strdup(source);
fd->size = size; fd->size = size;
fd->font = font; fd->font = font;
fd->ref = 1; fd->ref = 1;
@ -525,7 +525,7 @@ object_text_font_cache_dir_add(char *dir)
fn->type = 1; fn->type = 1;
for (i = 0; i < 14; i++) for (i = 0; i < 14; i++)
{ {
fn->x.prop[i] = evas_stringshare_add(font_prop[i]); fn->x.prop[i] = strdup(font_prop[i]);
/* FIXME: what if strdup fails! */ /* FIXME: what if strdup fails! */
} }
fn->path = evas_file_path_join(dir, fname); fn->path = evas_file_path_join(dir, fname);
@ -553,7 +553,7 @@ object_text_font_cache_dir_add(char *dir)
if (fn) if (fn)
{ {
fn->type = 0; fn->type = 0;
fn->simple.name = evas_stringshare_add(fdir->data); fn->simple.name = strdup(fdir->data);
if (fn->simple.name) if (fn->simple.name)
{ {
char *p; char *p;
@ -591,11 +591,11 @@ object_text_font_cache_dir_add(char *dir)
fa = calloc(1, sizeof(Evas_Font_Alias)); fa = calloc(1, sizeof(Evas_Font_Alias));
if (fa) if (fa)
{ {
fa->alias = evas_stringshare_add(fname); fa->alias = strdup(fname);
fa->fn = object_text_font_cache_font_find_x(fd, fdef); fa->fn = object_text_font_cache_font_find_x(fd, fdef);
if ((!fa->alias) || (!fa->fn)) if ((!fa->alias) || (!fa->fn))
{ {
if (fa->alias) evas_stringshare_del(fa->alias); if (fa->alias) free(fa->alias);
free(fa); free(fa);
} }
else else
@ -637,10 +637,10 @@ object_text_font_cache_dir_del(char *dir, Evas_Font_Dir *fd)
fd->fonts = evas_list_remove(fd->fonts, fn); fd->fonts = evas_list_remove(fd->fonts, fn);
for (i = 0; i < 14; i++) for (i = 0; i < 14; i++)
{ {
if (fn->x.prop[i]) evas_stringshare_del(fn->x.prop[i]); if (fn->x.prop[i]) free(fn->x.prop[i]);
} }
if (fn->simple.name) evas_stringshare_del(fn->simple.name); if (fn->simple.name) free(fn->simple.name);
if (fn->path) evas_stringshare_del(fn->path); if (fn->path) free(fn->path);
free(fn); free(fn);
} }
while (fd->aliases) while (fd->aliases)
@ -649,7 +649,7 @@ object_text_font_cache_dir_del(char *dir, Evas_Font_Dir *fd)
fa = fd->aliases->data; fa = fd->aliases->data;
fd->aliases = evas_list_remove(fd->aliases, fa); fd->aliases = evas_list_remove(fd->aliases, fa);
if (fa->alias) evas_stringshare_del(fa->alias); if (fa->alias) free(fa->alias);
free(fa); free(fa);
} }
free(fd); free(fd);

View File

@ -22,13 +22,13 @@ evas_object_name_set(Evas_Object *obj, const char *name)
if (obj->name) if (obj->name)
{ {
obj->layer->evas->name_hash = evas_hash_del(obj->layer->evas->name_hash, obj->name, obj); obj->layer->evas->name_hash = evas_hash_del(obj->layer->evas->name_hash, obj->name, obj);
evas_stringshare_del(obj->name); free(obj->name);
} }
if (!name) obj->name = NULL; if (!name) obj->name = NULL;
else else
{ {
obj->name = evas_stringshare_add(name); obj->name = strdup(name);
obj->layer->evas->name_hash = evas_hash_direct_add(obj->layer->evas->name_hash, obj->name, obj); obj->layer->evas->name_hash = evas_hash_add(obj->layer->evas->name_hash, obj->name, obj);
} }
} }

View File

@ -138,11 +138,11 @@ evas_object_image_file_set(Evas_Object *obj, const char *file, const char *key)
if ((o->cur.key) && (key) && (!strcmp(o->cur.key, key))) if ((o->cur.key) && (key) && (!strcmp(o->cur.key, key)))
return; return;
} }
if (o->cur.file) evas_stringshare_del(o->cur.file); if (o->cur.file) free(o->cur.file);
if (o->cur.key) evas_stringshare_del(o->cur.key); if (o->cur.key) free(o->cur.key);
if (file) o->cur.file = evas_stringshare_add(file); if (file) o->cur.file = strdup(file);
else o->cur.file = NULL; else o->cur.file = NULL;
if (key) o->cur.key = evas_stringshare_add(key); if (key) o->cur.key = strdup(key);
else o->cur.key = NULL; else o->cur.key = NULL;
o->prev.file = NULL; o->prev.file = NULL;
o->prev.key = NULL; o->prev.key = NULL;
@ -1330,8 +1330,8 @@ evas_object_image_free(Evas_Object *obj)
return; return;
MAGIC_CHECK_END(); MAGIC_CHECK_END();
/* free obj */ /* free obj */
if (o->cur.file) evas_stringshare_del(o->cur.file); if (o->cur.file) free(o->cur.file);
if (o->cur.key) evas_stringshare_del(o->cur.key); if (o->cur.key) free(o->cur.key);
if (o->engine_data) if (o->engine_data)
obj->layer->evas->engine.func->image_free(obj->layer->evas->engine.data.output, obj->layer->evas->engine.func->image_free(obj->layer->evas->engine.data.output,
o->engine_data); o->engine_data);

View File

@ -225,7 +225,7 @@ evas_object_smart_callback_add(Evas_Object *obj, const char *event, void (*func)
if (!event) return; if (!event) return;
if (!func) return; if (!func) return;
cb = calloc(1, sizeof(Evas_Smart_Callback)); cb = calloc(1, sizeof(Evas_Smart_Callback));
cb->event = evas_stringshare_add(event); cb->event = strdup(event);
cb->func = func; cb->func = func;
cb->func_data = (void *)data; cb->func_data = (void *)data;
obj->smart.callbacks = evas_list_prepend(obj->smart.callbacks, cb); obj->smart.callbacks = evas_list_prepend(obj->smart.callbacks, cb);
@ -326,7 +326,7 @@ evas_object_smart_callbacks_clear(Evas_Object *obj)
if (cb->delete_me) if (cb->delete_me)
{ {
obj->smart.callbacks = evas_list_remove(obj->smart.callbacks, cb); obj->smart.callbacks = evas_list_remove(obj->smart.callbacks, cb);
if (cb->event) evas_stringshare_add(cb->event); if (cb->event) free(cb->event);
free(cb); free(cb);
} }
} }
@ -359,7 +359,7 @@ evas_object_smart_cleanup(Evas_Object *obj)
cb = obj->smart.callbacks->data; cb = obj->smart.callbacks->data;
obj->smart.callbacks = evas_list_remove(obj->smart.callbacks, cb); obj->smart.callbacks = evas_list_remove(obj->smart.callbacks, cb);
if (cb->event) evas_stringshare_add(cb->event); if (cb->event) free(cb->event);
free(cb); free(cb);
} }
obj->smart.parent = NULL; obj->smart.parent = NULL;

View File

@ -108,8 +108,8 @@ evas_object_text_font_source_set(Evas_Object *obj, const char *font_source)
if ((o->cur.source) && (font_source) && if ((o->cur.source) && (font_source) &&
(!strcmp(o->cur.source, font_source))) (!strcmp(o->cur.source, font_source)))
return; return;
if (o->cur.source) evas_stringshare_del(o->cur.source); if (o->cur.source) free(o->cur.source);
if (font_source) o->cur.source = evas_stringshare_add(font_source); if (font_source) o->cur.source = strdup(font_source);
else o->cur.source = NULL; else o->cur.source = NULL;
} }
@ -179,8 +179,8 @@ evas_object_text_font_set(Evas_Object *obj, const char *font, Evas_Font_Size siz
o->engine_data = evas_font_load(obj->layer->evas, font, o->cur.source, size); o->engine_data = evas_font_load(obj->layer->evas, font, o->cur.source, size);
if (!same_font) if (!same_font)
{ {
if (o->cur.font) evas_stringshare_del(o->cur.font); if (o->cur.font) free(o->cur.font);
if (font) o->cur.font = evas_stringshare_add(font); if (font) o->cur.font = strdup(font);
else o->cur.font = NULL; else o->cur.font = NULL;
o->prev.font = NULL; o->prev.font = NULL;
} }
@ -293,8 +293,8 @@ evas_object_text_text_set(Evas_Object *obj, const char *text)
obj->layer->evas->pointer.x, obj->layer->evas->pointer.x,
obj->layer->evas->pointer.y, 1, 1); obj->layer->evas->pointer.y, 1, 1);
/* DO II */ /* DO II */
if (o->cur.text) evas_stringshare_del(o->cur.text); if (o->cur.text) free(o->cur.text);
if (text && *text) o->cur.text = evas_stringshare_add(text); if (text && *text) o->cur.text = strdup(text);
else o->cur.text = NULL; else o->cur.text = NULL;
o->prev.text = NULL; o->prev.text = NULL;
if ((o->engine_data) && (o->cur.text)) if ((o->engine_data) && (o->cur.text))
@ -917,7 +917,7 @@ evas_font_path_clear(Evas *e)
MAGIC_CHECK_END(); MAGIC_CHECK_END();
while (e->font_path) while (e->font_path)
{ {
evas_stringshare_del(e->font_path->data); free(e->font_path->data);
e->font_path = evas_list_remove(e->font_path, e->font_path->data); e->font_path = evas_list_remove(e->font_path, e->font_path->data);
} }
} }
@ -935,7 +935,7 @@ evas_font_path_append(Evas *e, const char *path)
return; return;
MAGIC_CHECK_END(); MAGIC_CHECK_END();
if (!path) return; if (!path) return;
e->font_path = evas_list_append(e->font_path, evas_stringshare_add(path)); e->font_path = evas_list_append(e->font_path, strdup(path));
} }
/** /**
@ -951,7 +951,7 @@ evas_font_path_prepend(Evas *e, const char *path)
return; return;
MAGIC_CHECK_END(); MAGIC_CHECK_END();
if (!path) return; if (!path) return;
e->font_path = evas_list_prepend(e->font_path, evas_stringshare_add(path)); e->font_path = evas_list_prepend(e->font_path, strdup(path));
} }
/** /**
@ -1197,9 +1197,9 @@ evas_object_text_free(Evas_Object *obj)
return; return;
MAGIC_CHECK_END(); MAGIC_CHECK_END();
/* free obj */ /* free obj */
if (o->cur.text) evas_stringshare_del(o->cur.text); if (o->cur.text) free(o->cur.text);
if (o->cur.font) evas_stringshare_del(o->cur.font); if (o->cur.font) free(o->cur.font);
if (o->cur.source) evas_stringshare_del(o->cur.source); if (o->cur.source) free(o->cur.source);
if (o->engine_data) evas_font_free(obj->layer->evas, o->engine_data); if (o->engine_data) evas_font_free(obj->layer->evas, o->engine_data);
o->magic = 0; o->magic = 0;
free(o); free(o);

View File

@ -329,10 +329,14 @@ _strbuf_insert(char *s, char *s2, int pos, int *len, int *alloc)
s = ts; s = ts;
*alloc = talloc; *alloc = talloc;
} }
tbuf = alloca(*len - pos); tbuf = malloc(*len - pos);
strncpy(tbuf, s + pos, *len - pos); if (tbuf)
strncpy(s + pos, s2, l2); {
strncpy(s + pos + l2, tbuf, *len - pos); strncpy(tbuf, s + pos, *len - pos);
strncpy(s + pos, s2, l2);
strncpy(s + pos + l2, tbuf, *len - pos);
free(tbuf);
}
*len = tlen; *len = tlen;
s[tlen] = 0; s[tlen] = 0;
return s; return s;
@ -351,9 +355,10 @@ _strbuf_remove(char *s, int p, int p2, int *len, int *alloc)
*alloc = 0; *alloc = 0;
return NULL; return NULL;
} }
tbuf = alloca(*len - p2 + 1); tbuf = malloc(*len - p2 + 1);
strcpy(tbuf, s + p2); strcpy(tbuf, s + p2);
strcpy(s + p, tbuf); strcpy(s + p, tbuf);
free(tbuf);
tlen = *len - (p2 - p); tlen = *len - (p2 - p);
if (tlen < ((*alloc >> 5) << 15)) if (tlen < ((*alloc >> 5) << 15))
{ {
@ -392,9 +397,9 @@ _format_free(Evas_Object *obj, Evas_Object_Textblock_Format *fmt)
{ {
fmt->ref--; fmt->ref--;
if (fmt->ref > 0) return; if (fmt->ref > 0) return;
if (fmt->font.name) evas_stringshare_del(fmt->font.name); if (fmt->font.name) free(fmt->font.name);
if (fmt->font.fallbacks) evas_stringshare_del(fmt->font.fallbacks); if (fmt->font.fallbacks) free(fmt->font.fallbacks);
if (fmt->font.source) evas_stringshare_del(fmt->font.source); if (fmt->font.source) free(fmt->font.source);
evas_font_free(obj->layer->evas, fmt->font.font); evas_font_free(obj->layer->evas, fmt->font.font);
free(fmt); free(fmt);
} }
@ -418,7 +423,7 @@ _line_free(Evas_Object *obj, Evas_Object_Textblock_Line *ln)
fi = (Evas_Object_Textblock_Format_Item *)ln->format_items; fi = (Evas_Object_Textblock_Format_Item *)ln->format_items;
ln->format_items = evas_object_list_remove(ln->format_items, ln->format_items); ln->format_items = evas_object_list_remove(ln->format_items, ln->format_items);
if (fi->item) evas_stringshare_del(fi->item); if (fi->item) free(fi->item);
free(fi); free(fi);
} }
free(ln); free(ln);
@ -700,11 +705,15 @@ _append_text_run(Evas_Object_Textblock *o, char *s, char *p)
{ {
char *ts; char *ts;
ts = alloca(p - s + 1); ts = malloc(p - s + 1);
strncpy(ts, s, p - s); if (ts)
ts[p - s] = 0; {
ts = _clean_white(0, 0, ts); strncpy(ts, s, p - s);
evas_textblock_cursor_text_append(o->cursor, ts); ts[p - s] = 0;
ts = _clean_white(0, 0, ts);
evas_textblock_cursor_text_append(o->cursor, ts);
free(ts);
}
} }
} }
@ -773,8 +782,8 @@ _format_command(Evas_Object *obj, Evas_Object_Textblock_Format *fmt, char *cmd,
if ((!fmt->font.name) || if ((!fmt->font.name) ||
((fmt->font.name) && (strcmp(fmt->font.name, param)))) ((fmt->font.name) && (strcmp(fmt->font.name, param))))
{ {
if (fmt->font.name) evas_stringshare_del(fmt->font.name); if (fmt->font.name) free(fmt->font.name);
fmt->font.name = evas_stringshare_add(param); fmt->font.name = strdup(param);
new_font = 1; new_font = 1;
} }
} }
@ -786,8 +795,8 @@ _format_command(Evas_Object *obj, Evas_Object_Textblock_Format *fmt, char *cmd,
/* policy - when we say "fallbacks" do we prepend and use prior /* policy - when we say "fallbacks" do we prepend and use prior
* fallbacks... or shoudl we replace. for nwo we replace * fallbacks... or shoudl we replace. for nwo we replace
*/ */
if (fmt->font.fallbacks) evas_stringshare_del(fmt->font.fallbacks); if (fmt->font.fallbacks) free(fmt->font.fallbacks);
fmt->font.fallbacks = evas_stringshare_add(param); fmt->font.fallbacks = strdup(param);
new_font = 1; new_font = 1;
} }
} }
@ -807,8 +816,8 @@ _format_command(Evas_Object *obj, Evas_Object_Textblock_Format *fmt, char *cmd,
if ((!fmt->font.source) || if ((!fmt->font.source) ||
((fmt->font.source) && (strcmp(fmt->font.source, param)))) ((fmt->font.source) && (strcmp(fmt->font.source, param))))
{ {
if (fmt->font.source) evas_stringshare_del(fmt->font.source); if (fmt->font.source) free(fmt->font.source);
fmt->font.source = evas_stringshare_add(param); fmt->font.source = strdup(param);
new_font = 1; new_font = 1;
} }
} }
@ -858,11 +867,14 @@ _format_command(Evas_Object *obj, Evas_Object_Textblock_Format *fmt, char *cmd,
{ {
char *ts, *p; char *ts, *p;
ts = alloca(strlen(param)); ts = strdup(param);
strcpy(ts, param); if (ts)
p = strchr(ts, '%'); {
*p = 0; p = strchr(ts, '%');
fmt->halign = ((double)atoi(ts)) / 100.0; *p = 0;
fmt->halign = ((double)atoi(ts)) / 100.0;
free(ts);
}
if (fmt->halign < 0.0) fmt->halign = 0.0; if (fmt->halign < 0.0) fmt->halign = 0.0;
else if (fmt->halign > 1.0) fmt->halign = 1.0; else if (fmt->halign > 1.0) fmt->halign = 1.0;
} }
@ -885,11 +897,14 @@ _format_command(Evas_Object *obj, Evas_Object_Textblock_Format *fmt, char *cmd,
{ {
char *ts, *p; char *ts, *p;
ts = alloca(strlen(param)); ts = strdup(param);
strcpy(ts, param); if (ts)
p = strchr(ts, '%'); {
*p = 0; p = strchr(ts, '%');
fmt->valign = ((double)atoi(ts)) / 100.0; *p = 0;
fmt->valign = ((double)atoi(ts)) / 100.0;
free(ts);
}
if (fmt->valign < 0.0) fmt->valign = 0.0; if (fmt->valign < 0.0) fmt->valign = 0.0;
else if (fmt->valign > 1.0) fmt->valign = 1.0; else if (fmt->valign > 1.0) fmt->valign = 1.0;
} }
@ -1133,9 +1148,9 @@ _format_dup(Evas_Object *obj, Evas_Object_Textblock_Format *fmt)
fmt2 = calloc(1, sizeof(Evas_Object_Textblock_Format)); fmt2 = calloc(1, sizeof(Evas_Object_Textblock_Format));
memcpy(fmt2, fmt, sizeof(Evas_Object_Textblock_Format)); memcpy(fmt2, fmt, sizeof(Evas_Object_Textblock_Format));
fmt2->ref = 1; fmt2->ref = 1;
if (fmt->font.name) fmt2->font.name = evas_stringshare_add(fmt->font.name); if (fmt->font.name) fmt2->font.name = strdup(fmt->font.name);
if (fmt->font.fallbacks) fmt2->font.fallbacks = evas_stringshare_add(fmt->font.fallbacks); if (fmt->font.fallbacks) fmt2->font.fallbacks = strdup(fmt->font.fallbacks);
if (fmt->font.source) fmt2->font.source = evas_stringshare_add(fmt->font.source); if (fmt->font.source) fmt2->font.source = strdup(fmt->font.source);
if ((fmt2->font.name) && (fmt2->font.fallbacks)) if ((fmt2->font.name) && (fmt2->font.fallbacks))
{ {
@ -1808,7 +1823,7 @@ _layout_format_item_add(Ctxt *c, Evas_Object_Textblock_Node *n, char *item)
Evas_Object_Textblock_Format_Item *fi; Evas_Object_Textblock_Format_Item *fi;
fi = calloc(1, sizeof(Evas_Object_Textblock_Format_Item)); fi = calloc(1, sizeof(Evas_Object_Textblock_Format_Item));
fi->item = evas_stringshare_add(item); fi->item = strdup(item);
fi->source_node = n; fi->source_node = n;
c->ln->format_items = evas_object_list_append(c->ln->format_items, fi); c->ln->format_items = evas_object_list_append(c->ln->format_items, fi);
return fi; return fi;

View File

@ -13,21 +13,22 @@ static Evas_Bool font_flush_free_glyph_cb(Evas_Hash *hash, const char *key, void
RGBA_Font_Source * RGBA_Font_Source *
evas_common_font_source_memory_load(const char *name, const void *data, int data_size) evas_common_font_source_memory_load(const char *name, const void *data, int data_size)
{ {
int error; int error, len;
RGBA_Font_Source *fs; RGBA_Font_Source *fs;
fs = calloc(1, sizeof(RGBA_Font_Source) + data_size); len = strlen(name);
fs = calloc(1, sizeof(RGBA_Font_Source) + len + 1 + data_size);
if (!fs) return NULL; if (!fs) return NULL;
fs->name = evas_stringshare_add(name); fs->name = ((char *)fs) + sizeof(RGBA_Font_Source);
strcpy(fs->name, name);
fs->file = NULL; fs->file = NULL;
fs->data = ((unsigned char *)fs) + sizeof(RGBA_Font_Source); fs->data = fs->name + len + 1;
fs->current_size = 0; fs->current_size = 0;
memcpy(fs->data, data, data_size); memcpy(fs->data, data, data_size);
fs->data_size = data_size; fs->data_size = data_size;
error = FT_New_Memory_Face(evas_ft_lib, fs->data, fs->data_size, 0, &(fs->ft.face)); error = FT_New_Memory_Face(evas_ft_lib, fs->data, fs->data_size, 0, &(fs->ft.face));
if (error) if (error)
{ {
evas_stringshare_del(fs->name);
free(fs); free(fs);
return NULL; return NULL;
} }
@ -45,12 +46,14 @@ evas_common_font_source_memory_load(const char *name, const void *data, int data
RGBA_Font_Source * RGBA_Font_Source *
evas_common_font_source_load(const char *name) evas_common_font_source_load(const char *name)
{ {
int error; int error, len;
RGBA_Font_Source *fs; RGBA_Font_Source *fs;
fs = calloc(1, sizeof(RGBA_Font_Source)); len = strlen(name);
fs = calloc(1, sizeof(RGBA_Font_Source) + len + 1);
if (!fs) return NULL; if (!fs) return NULL;
fs->name = evas_stringshare_add(name); fs->name = ((char *)fs) + sizeof(RGBA_Font_Source);
strcpy(fs->name, name);
fs->file = fs->name; fs->file = fs->name;
fs->data = NULL; fs->data = NULL;
fs->data_size = 0; fs->data_size = 0;
@ -58,7 +61,6 @@ evas_common_font_source_load(const char *name)
error = FT_New_Face(evas_ft_lib, fs->file, 0, &(fs->ft.face)); error = FT_New_Face(evas_ft_lib, fs->file, 0, &(fs->ft.face));
if (error) if (error)
{ {
evas_stringshare_del(fs->name);
free(fs); free(fs);
return NULL; return NULL;
} }
@ -124,7 +126,6 @@ evas_common_font_source_free(RGBA_Font_Source *fs)
fonts_src = evas_object_list_remove(fonts_src, fs); fonts_src = evas_object_list_remove(fonts_src, fs);
FT_Done_Face(fs->ft.face); FT_Done_Face(fs->ft.face);
if (fs->name) evas_stringshare_del(fs->name);
free(fs); free(fs);
} }

View File

@ -200,8 +200,15 @@ load_image_file_data_png(RGBA_Image *im, const char *file, const char *key)
fclose(f); fclose(f);
return -1; return -1;
} }
lines = (unsigned char **) alloca(h * sizeof(unsigned char *)); lines = (unsigned char **) malloc(h * sizeof(unsigned char *));
if (!lines)
{
evas_common_image_surface_free(im->image);
png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp) NULL);
fclose(f);
return -1;
}
if (hasg) if (hasg)
{ {
png_set_gray_to_rgb(png_ptr); png_set_gray_to_rgb(png_ptr);
@ -211,6 +218,7 @@ load_image_file_data_png(RGBA_Image *im, const char *file, const char *key)
for (i = 0; i < h; i++) for (i = 0; i < h; i++)
lines[i] = ((unsigned char *)(im->image->data)) + (i * w * sizeof(DATA32)); lines[i] = ((unsigned char *)(im->image->data)) + (i * w * sizeof(DATA32));
png_read_image(png_ptr, lines); png_read_image(png_ptr, lines);
free(lines);
png_read_end(png_ptr, info_ptr); png_read_end(png_ptr, info_ptr);
png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp) NULL); png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp) NULL);
fclose(f); fclose(f);
@ -343,10 +351,16 @@ load_image_file_data_jpeg_internal(RGBA_Image *im, FILE *f)
jpeg_destroy_decompress(&cinfo); jpeg_destroy_decompress(&cinfo);
return -1; return -1;
} }
data = alloca(w * 16 * 3); data = malloc(w * 16 * 3);
if (!data)
{
jpeg_destroy_decompress(&cinfo);
return -1;
}
evas_common_image_surface_alloc(im->image); evas_common_image_surface_alloc(im->image);
if (!im->image->data) if (!im->image->data)
{ {
free(data);
jpeg_destroy_decompress(&cinfo); jpeg_destroy_decompress(&cinfo);
return -1; return -1;
} }
@ -397,6 +411,7 @@ load_image_file_data_jpeg_internal(RGBA_Image *im, FILE *f)
} }
} }
} }
free(data);
/* end data decoding */ /* end data decoding */
jpeg_finish_decompress(&cinfo); jpeg_finish_decompress(&cinfo);
jpeg_destroy_decompress(&cinfo); jpeg_destroy_decompress(&cinfo);
@ -442,9 +457,15 @@ load_image_file_data_jpeg_alpha_internal(RGBA_Image *im, FILE *f)
jpeg_destroy_decompress(&cinfo); jpeg_destroy_decompress(&cinfo);
return -1; return -1;
} }
data = alloca(w * 16 * 3); data = malloc(w * 16 * 3);
if (!data)
{
jpeg_destroy_decompress(&cinfo);
return -1;
}
if (!im->image->data) if (!im->image->data)
{ {
free(data);
jpeg_destroy_decompress(&cinfo); jpeg_destroy_decompress(&cinfo);
return -1; return -1;
} }
@ -497,6 +518,7 @@ load_image_file_data_jpeg_alpha_internal(RGBA_Image *im, FILE *f)
} }
} }
} }
free(data);
/* end data decoding */ /* end data decoding */
jpeg_finish_decompress(&cinfo); jpeg_finish_decompress(&cinfo);
jpeg_destroy_decompress(&cinfo); jpeg_destroy_decompress(&cinfo);
@ -936,14 +958,15 @@ evas_common_load_image_from_file(const char *file, const char *key)
// im->timestamp = mod_time; // im->timestamp = mod_time;
if (file) if (file)
{ {
im->info.file = evas_stringshare_add(file); im->info.file = strdup(file);
// im->info.real_file = real_file; // im->info.real_file = real_file;
} }
else else
{ {
// if (real_file) free(real_file); // if (real_file) free(real_file);
} }
if (key) im->info.key = evas_stringshare_add(key); if (key)
im->info.key = strdup(key);
evas_common_image_ref(im); evas_common_image_ref(im);
return im; return im;
} }

View File

@ -227,10 +227,10 @@ void
evas_common_image_free(RGBA_Image *im) evas_common_image_free(RGBA_Image *im)
{ {
if (im->image) evas_common_image_surface_free(im->image); if (im->image) evas_common_image_surface_free(im->image);
if (im->info.file) evas_stringshare_del(im->info.file); if (im->info.file) free(im->info.file);
// if (im->info.real_file) evas_stringshare_del(im->info.real_file); if (im->info.real_file) free(im->info.real_file);
if (im->info.key) evas_stringshare_del(im->info.key); if (im->info.key) free(im->info.key);
if (im->info.comment) evas_stringshare_del(im->info.comment); if (im->info.comment) free(im->info.comment);
free(im); free(im);
} }
@ -335,9 +335,8 @@ evas_common_image_store(RGBA_Image *im)
if (im->flags & RGBA_IMAGE_INDEXED) return; if (im->flags & RGBA_IMAGE_INDEXED) return;
if ((!im->info.file) && (!im->info.key)) return; if ((!im->info.file) && (!im->info.key)) return;
l1 = 0; l1 = 0;
// if (im->info.real_file) l1 = strlen(im->info.real_file); if (im->info.real_file) l1 = strlen(im->info.real_file);
// else else if (im->info.file) l1 = strlen(im->info.file);
if (im->info.file) l1 = strlen(im->info.file);
l2 = 0; l2 = 0;
if (im->info.key) l2 = strlen(im->info.key); if (im->info.key) l2 = strlen(im->info.key);
snprintf(buf, sizeof(buf), "%llx", im->timestamp); snprintf(buf, sizeof(buf), "%llx", im->timestamp);
@ -345,9 +344,8 @@ evas_common_image_store(RGBA_Image *im)
key = malloc(l1 + 5 + l2 + 5 + l3 +1); key = malloc(l1 + 5 + l2 + 5 + l3 +1);
if (!key) return; if (!key) return;
key[0] = 0; key[0] = 0;
// if (im->info.real_file) strcpy(key, im->info.real_file); if (im->info.real_file) strcpy(key, im->info.real_file);
// else else if (im->info.file) strcpy(key, im->info.file);
if (im->info.file) strcpy(key, im->info.file);
strcat(key, "//://"); strcat(key, "//://");
if (im->info.key) strcat(key, im->info.key); if (im->info.key) strcat(key, im->info.key);
strcat(key, "//://"); strcat(key, "//://");
@ -367,9 +365,8 @@ evas_common_image_unstore(RGBA_Image *im)
if (!(im->flags & RGBA_IMAGE_INDEXED)) return; if (!(im->flags & RGBA_IMAGE_INDEXED)) return;
if ((!im->info.file) && (!im->info.key)) return; if ((!im->info.file) && (!im->info.key)) return;
l1 = 0; l1 = 0;
// if (im->info.real_file) l1 = strlen(im->info.real_file); if (im->info.real_file) l1 = strlen(im->info.real_file);
// else else if (im->info.file) l1 = strlen(im->info.file);
if (im->info.file) l1 = strlen(im->info.file);
l2 = 0; l2 = 0;
if (im->info.key) l2 = strlen(im->info.key); if (im->info.key) l2 = strlen(im->info.key);
snprintf(buf, sizeof(buf), "%llx", im->timestamp); snprintf(buf, sizeof(buf), "%llx", im->timestamp);
@ -377,9 +374,8 @@ evas_common_image_unstore(RGBA_Image *im)
key = malloc(l1 + 5 + l2 + 5 + l3 +1); key = malloc(l1 + 5 + l2 + 5 + l3 +1);
if (!key) return; if (!key) return;
key[0] = 0; key[0] = 0;
// if (im->info.real_file) strcpy(key, im->info.real_file); if (im->info.real_file) strcpy(key, im->info.real_file);
// else else if (im->info.file) strcpy(key, im->info.file);
if (im->info.file) strcpy(key, im->info.file);
strcat(key, "//://"); strcat(key, "//://");
if (im->info.key) strcat(key, im->info.key); if (im->info.key) strcat(key, im->info.key);
strcat(key, "//://"); strcat(key, "//://");
@ -427,7 +423,7 @@ evas_common_image_find(const char *filename, const char *key, DATA64 timestamp)
free(str); free(str);
if (im) if (im)
{ {
// if (real_filename) free(real_filename); if (real_filename) free(real_filename);
return im; return im;
} }
@ -437,7 +433,6 @@ evas_common_image_find(const char *filename, const char *key, DATA64 timestamp)
im = (RGBA_Image *)l; im = (RGBA_Image *)l;
ok = 0; ok = 0;
/*
if ((real_filename) && (im->info.real_file)) if ((real_filename) && (im->info.real_file))
{ {
if ((im->info.real_file) && if ((im->info.real_file) &&
@ -446,7 +441,6 @@ evas_common_image_find(const char *filename, const char *key, DATA64 timestamp)
ok++; ok++;
} }
else else
*/
{ {
if ((filename) && (im->info.file) && if ((filename) && (im->info.file) &&
(!strcmp(filename, im->info.file))) (!strcmp(filename, im->info.file)))
@ -463,11 +457,11 @@ evas_common_image_find(const char *filename, const char *key, DATA64 timestamp)
ok++; ok++;
if (ok >= 3) if (ok >= 3)
{ {
// if (real_filename) free(real_filename); if (real_filename) free(real_filename);
return im; return im;
} }
} }
// if (real_filename) free(real_filename); if (real_filename) free(real_filename);
return NULL; return NULL;
} }
@ -478,7 +472,7 @@ evas_common_image_ram_usage(RGBA_Image *im)
ram += sizeof(struct _RGBA_Image); ram += sizeof(struct _RGBA_Image);
if (im->info.file) ram += strlen(im->info.file); if (im->info.file) ram += strlen(im->info.file);
// if (im->info.real_file) ram += strlen(im->info.real_file); if (im->info.real_file) ram += strlen(im->info.real_file);
if (im->info.key) ram += strlen(im->info.key); if (im->info.key) ram += strlen(im->info.key);
if (im->info.comment) ram += strlen(im->info.comment); if (im->info.comment) ram += strlen(im->info.comment);
if ((im->image) && (im->image->data) && (!im->image->no_free)) if ((im->image) && (im->image->data) && (!im->image->no_free))

View File

@ -214,7 +214,7 @@ struct _RGBA_Image
{ {
int format; int format;
char *file; char *file;
// char *real_file; char *real_file;
char *key; char *key;
char *comment; char *comment;
} info; } info;