strdup wrapped... and err.. looking for a mem leak.. anyone got insure++ ?

SVN revision: 5174
This commit is contained in:
Carsten Haitzler 2001-08-16 08:45:37 +00:00
parent 6347565356
commit 68f5a95f2e
12 changed files with 92 additions and 43 deletions

View File

@ -31,5 +31,5 @@ enlightenment_SOURCES = \
view.h view.c \ view.h view.c \
e.h e.h
enlightenment_LDADD = @evas_libs@ @edb_libs@ @ebits_libs@ @ecore_libs@ @efsd_libs@ -lm -lc $(INTLLIBS) enlightenment_LDADD = @evas_libs@ @edb_libs@ @ebits_libs@ @ecore_libs@ @efsd_libs@ -lm -lc -ldl $(INTLLIBS)

View File

@ -6,6 +6,7 @@
#include "icccm.h" #include "icccm.h"
#include "keys.h" #include "keys.h"
#include "view.h" #include "view.h"
#include "util.h"
static Evas_List action_protos = NULL; static Evas_List action_protos = NULL;
static Evas_List current_actions = NULL; static Evas_List current_actions = NULL;
@ -191,12 +192,12 @@ _e_action_find(char *action, int act, int button, char *key, Ev_Key_Modifiers mo
OBJ_INIT(aa, _e_action_free); OBJ_INIT(aa, _e_action_free);
aa->name = strdup(a->name); e_strdup(aa->name, a->name);
aa->action = strdup(a->action); e_strdup(aa->action, a->action);
if (a->params) aa->params = strdup(a->params); e_strdup(aa->params, a->params);
aa->event = a->event; aa->event = a->event;
aa->button = a->button; aa->button = a->button;
if (a->key) aa->key = strdup(a->key); e_strdup(aa->key, a->key);
aa->modifiers = a->modifiers; aa->modifiers = a->modifiers;
aa->action_proto = ap; aa->action_proto = ap;
aa->object = o; aa->object = o;
@ -396,7 +397,7 @@ e_action_add_proto(char *action,
OBJ_INIT(ap, NULL); OBJ_INIT(ap, NULL);
ap->action = strdup(action); e_strdup(ap->action, action);
ap->func_start = func_start; ap->func_start = func_start;
ap->func_stop = func_stop; ap->func_stop = func_stop;
ap->func_go = func_go; ap->func_go = func_go;
@ -435,7 +436,7 @@ e_action_add_timer(void *o, char *name)
at = NEW(E_Active_Action_Timer, 1); at = NEW(E_Active_Action_Timer, 1);
at->object = o; at->object = o;
at->name = strdup(name); e_strdup(at->name, name);
current_timers = evas_list_append(current_timers, at); current_timers = evas_list_append(current_timers, at);
} }

View File

@ -1,4 +1,5 @@
#include "background.h" #include "background.h"
#include "util.h"
void void
e_background_free(E_Background *bg) e_background_free(E_Background *bg)
@ -56,7 +57,7 @@ e_background_load(char *file)
e_db_int_get(db, "/layers/count", &num); e_db_int_get(db, "/layers/count", &num);
bg = e_background_new(); bg = e_background_new();
bg->file = strdup(file); e_strdup(bg->file, file);
for (i = 0; i < num; i++) for (i = 0; i < num; i++)
{ {
E_Background_Layer *bl; E_Background_Layer *bl;
@ -71,7 +72,7 @@ e_background_load(char *file)
sprintf(buf, "/layers/%i/color_class", i); bl->color_class = e_db_str_get(db, buf); sprintf(buf, "/layers/%i/color_class", i); bl->color_class = e_db_str_get(db, buf);
if (bl->inlined) if (bl->inlined)
{ {
sprintf(buf, "%s:/layers/%i/image", file, i); bl->file = strdup(buf); sprintf(buf, "%s:/layers/%i/image", file, i); e_strdup(bl->file, buf);
} }
else else
{ {

View File

@ -1039,7 +1039,7 @@ e_border_apply_border(E_Border *b)
/* if it's not changed - abort and dont do anything */ /* if it's not changed - abort and dont do anything */
if ((b->border_file) && (!strcmp(buf, b->border_file))) return; if ((b->border_file) && (!strcmp(buf, b->border_file))) return;
IF_FREE(b->border_file); IF_FREE(b->border_file);
b->border_file = strdup(buf); e_strdup(b->border_file, buf);
e_border_set_bits(b, buf); e_border_set_bits(b, buf);
@ -1138,8 +1138,10 @@ e_border_adopt(Window win, int use_client_pos)
{ {
E_Border *b; E_Border *b;
int bw; int bw;
static int bd_count = 0;
/* create the struct */ /* create the struct */
printf("new bd %i\n", bd_count++);
b = e_border_new(); b = e_border_new();
/* set the right event on the client */ /* set the right event on the client */
e_window_set_events(win, e_window_set_events(win,
@ -1368,7 +1370,7 @@ e_border_new(void)
font_dir); font_dir);
b->win.b = evas_get_window(b->evas.b); b->win.b = evas_get_window(b->evas.b);
e_add_child(b->win.main, b->win.b); e_add_child(b->win.main, b->win.b);
b->obj.title.l = evas_add_text(b->evas.l, "borzoib", 8, ""); b->obj.title.l = evas_add_text(b->evas.l, "borzoib", 8, "");
b->obj.title.r = evas_add_text(b->evas.r, "borzoib", 8, ""); b->obj.title.r = evas_add_text(b->evas.r, "borzoib", 8, "");
b->obj.title.t = evas_add_text(b->evas.t, "borzoib", 8, ""); b->obj.title.t = evas_add_text(b->evas.t, "borzoib", 8, "");
@ -1417,6 +1419,7 @@ e_border_new(void)
e_window_raise(b->win.t); e_window_raise(b->win.t);
e_window_raise(b->win.b); e_window_raise(b->win.b);
*/ */
evases = evas_list_append(evases, b->evas.l); evases = evas_list_append(evases, b->evas.l);
evases = evas_list_append(evases, b->evas.r); evases = evas_list_append(evases, b->evas.r);
evases = evas_list_append(evases, b->evas.t); evases = evas_list_append(evases, b->evas.t);
@ -1433,7 +1436,7 @@ e_border_new(void)
e_window_show(b->win.b); e_window_show(b->win.b);
e_border_attach_mouse_grabs(b); e_border_attach_mouse_grabs(b);
borders = evas_list_prepend(borders, b); borders = evas_list_prepend(borders, b);
return b; return b;
@ -1462,6 +1465,11 @@ e_border_free(E_Border *b)
e_window_destroy(b->win.main); e_window_destroy(b->win.main);
borders = evas_list_remove(borders, b); borders = evas_list_remove(borders, b);
IF_FREE(b->client.title);
IF_FREE(b->client.name);
IF_FREE(b->client.class);
IF_FREE(b->border_file);
if (b->grabs) if (b->grabs)
{ {
for (l = b->grabs; l; l = l->next) for (l = b->grabs; l; l = l->next)
@ -1471,7 +1479,7 @@ e_border_free(E_Border *b)
evas_list_free(b->grabs); evas_list_free(b->grabs);
} }
free(b); FREE(b);
} }
void void
@ -1663,7 +1671,6 @@ e_border_set_bits(E_Border *b, char *file)
b->bits.r = ebits_load(file); b->bits.r = ebits_load(file);
b->bits.t = ebits_load(file); b->bits.t = ebits_load(file);
b->bits.b = ebits_load(file); b->bits.b = ebits_load(file);
b->bits.new = 1; b->bits.new = 1;
b->changed = 1; b->changed = 1;

View File

@ -98,16 +98,6 @@ e_config_init(void)
if (!e_file_exists(buf)) if (!e_file_exists(buf))
e_file_cp(PACKAGE_DATA_DIR"/data/config/behavior/default/apps_menu.db", buf); e_file_cp(PACKAGE_DATA_DIR"/data/config/behavior/default/apps_menu.db", buf);
sprintf(buf, "%sappearance/borders/border.bits.db", e_config_user_dir()); sprintf(buf, "%sappearance/borders/border.bits.db", e_config_user_dir());
/* do it for data... ut not all of it for now.. i'm considering if */
/* this is a godo idea. config data - YES. but raw theme data? */
if (!e_file_exists(buf))
e_file_cp(PACKAGE_DATA_DIR"/data/config/appearance/default/borders/border.bits.db", buf);
sprintf(buf, "%sappearance/borders/border2.bits.db", e_config_user_dir());
if (!e_file_exists(buf))
e_file_cp(PACKAGE_DATA_DIR"/data/config/appearance/default/borders/border2.bits.db", buf);
sprintf(buf, "%sappearance/borders/borderless.bits.db", e_config_user_dir());
if (!e_file_exists(buf))
e_file_cp(PACKAGE_DATA_DIR"/data/config/appearance/default/borders/borderless.bits.db", buf);
#endif #endif
} }

View File

@ -183,7 +183,7 @@ e_desktops_init_file_display(E_Desktop *desk)
/* fixme: later */ /* fixme: later */
/* uncomment this and comment out the next line for some tress testing */ /* uncomment this and comment out the next line for some tress testing */
/* desk->view->dir = strdup("/dev"); */ /* desk->view->dir = strdup("/dev"); */
desk->view->dir = strdup(e_file_home()); e_strdup(desk->view->dir, e_file_home());
e_view_realize(desk->view); e_view_realize(desk->view);
if (desk->view->options.back_pixmap) if (desk->view->options.back_pixmap)

10
src/e.h
View File

@ -25,6 +25,16 @@
#include <Ecore.h> #include <Ecore.h>
#include <Edb.h> #include <Edb.h>
#if 0
#include <execinfo.h>
#define BT \
{ \
void *__BT_array[250]; \
int __BT_n = backtrace(__BT_array,250); \
backtrace_symbols_fd(__BT_array, __BT_n, fileno(stdout)); \
}
#endif
/* macros for allowing sections of code to be runtime profiled */ /* macros for allowing sections of code to be runtime profiled */
#define E_PROF 1 #define E_PROF 1
#ifdef E_PROF #ifdef E_PROF

View File

@ -1,6 +1,7 @@
#include "e.h" #include "e.h"
#include "border.h" #include "border.h"
#include "icccm.h" #include "icccm.h"
#include "util.h"
/* Motif window hints */ /* Motif window hints */
#define MWM_HINTS_FUNCTIONS (1L << 0) #define MWM_HINTS_FUNCTIONS (1L << 0)
@ -314,7 +315,7 @@ e_icccm_get_title(Window win, E_Border *b)
} }
b->client.title = NULL; b->client.title = NULL;
if (title) b->client.title = title; if (title) b->client.title = title;
else b->client.title = strdup("No Title"); else e_strdup(b->client.title, "No Title");
} }
void void

View File

@ -83,33 +83,46 @@ char *
e_file_real(char *file) e_file_real(char *file)
{ {
char buf[4096]; char buf[4096];
char *f;
if (!realpath(file, buf)) return strdup(""); if (!realpath(file, buf)) return strdup("");
return strdup(buf); e_strdup(f, buf);
return f;
} }
char * char *
e_file_get_file(char *file) e_file_get_file(char *file)
{ {
char *p; char *p;
/* char buf[4096]; */ char *f;
p = strrchr(file, '/'); p = strrchr(file, '/');
if (!p) return strdup(file); if (!p)
return strdup(&(p[1])); {
e_strdup(f, file);
return f;
}
e_strdup(f, &(p[1]));
return f;
} }
char * char *
e_file_get_dir(char *file) e_file_get_dir(char *file)
{ {
char *p; char *p;
char *f;
char buf[4096]; char buf[4096];
strcpy(buf, file); strcpy(buf, file);
p = strrchr(buf, '/'); p = strrchr(buf, '/');
if (!p) return strdup(file); if (!p)
{
e_strdup(f, file);
return f;
}
*p = 0; *p = 0;
return strdup(buf); e_strdup(f, buf);
return f;
} }
void * void *
@ -162,11 +175,13 @@ char *
e_file_link(char *link) e_file_link(char *link)
{ {
char buf[4096]; char buf[4096];
char *f;
int count; int count;
if ((count = readlink(link, buf, sizeof(buf))) < 0) return NULL; if ((count = readlink(link, buf, sizeof(buf))) < 0) return NULL;
buf[count] = 0; buf[count] = 0;
return strdup(buf); e_strdup(f, buf);
return f;
} }
Evas_List Evas_List
@ -185,18 +200,21 @@ e_file_list_dir(char *dir)
(strcmp(dp->d_name, ".."))) (strcmp(dp->d_name, "..")))
{ {
Evas_List l; Evas_List l;
char *f;
/* insertion sort */ /* insertion sort */
for (l = list; l; l = l->next) for (l = list; l; l = l->next)
{ {
if (strcmp(l->data, dp->d_name) > 0) if (strcmp(l->data, dp->d_name) > 0)
{ {
list = evas_list_prepend_relative(list, strdup(dp->d_name), l->data); e_strdup(f, dp->d_name);
list = evas_list_prepend_relative(list, f, l->data);
break; break;
} }
} }
/* nowhwre to go? just append it */ /* nowhwre to go? just append it */
if (!l) list = evas_list_append(list, strdup(dp->d_name)); e_strdup(f, dp->d_name);
if (!l) list = evas_list_append(list, f);
} }
} }
closedir(dirp); closedir(dirp);

View File

@ -19,4 +19,12 @@ int e_file_can_exec(struct stat *st);
char *e_file_link(char *link); char *e_file_link(char *link);
Evas_List e_file_list_dir(char *dir); Evas_List e_file_list_dir(char *dir);
#define e_strdup(__dest, __var) \
{ \
if (!__var) __dest = NULL; \
else { \
__dest = malloc(strlen(__var) + 1); \
if (__dest) strcpy(__dest, __var); \
} }
#endif #endif

View File

@ -341,6 +341,10 @@ e_bg_up_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y)
} }
} }
} }
else if (_b == 2)
{
exit(0);
}
else if (_b == 3) else if (_b == 3)
{ {
static E_Build_Menu *buildmenu = NULL; static E_Build_Menu *buildmenu = NULL;
@ -1142,8 +1146,9 @@ e_configure(Eevent * ev)
} }
} }
printf("size %ix%i\n", e->w, e->h); printf("size %ix%i\n", e->w, e->h);
if ((e->w != v->size.w) || (e->h != v->size.h)) if ((e->w != v->size.w) || (e->h != v->size.h) || (v->size.force))
{ {
v->size.force = 0;
printf("... a new size!\n"); printf("... a new size!\n");
v->size.w = e->w; v->size.w = e->w;
v->size.h = e->h; v->size.h = e->h;
@ -1773,7 +1778,8 @@ e_view_arrange(E_View *v)
E_Icon *ic; E_Icon *ic;
ic = l->data; ic = l->data;
if ((x != v->spacing.window.l) && ((x + ic->geom.w) > v->size.w)) if ((x != v->spacing.window.l) &&
((x + ic->geom.w) > v->size.w - v->spacing.window.r))
{ {
x = v->spacing.window.l; x = v->spacing.window.l;
y += ic->geom.h + v->spacing.icon.b; y += ic->geom.h + v->spacing.icon.b;
@ -2542,9 +2548,12 @@ e_view_handle_fs(EfsdEvent *ev)
{ {
if (efsd_metadata_get_int(ev, if (efsd_metadata_get_int(ev,
&(v->size.w))) &(v->size.w)))
e_window_resize(v->win.base, {
v->size.w, e_window_resize(v->win.base,
v->size.h); v->size.w,
v->size.h);
v->size.force = 1;
}
} }
} }
ok = 1; ok = 1;
@ -2558,9 +2567,12 @@ e_view_handle_fs(EfsdEvent *ev)
{ {
if (efsd_metadata_get_int(ev, if (efsd_metadata_get_int(ev,
&(v->size.h))) &(v->size.h)))
e_window_resize(v->win.base, {
v->size.w, e_window_resize(v->win.base,
v->size.h); v->size.w,
v->size.h);
v->size.force = 1;
}
} }
} }
ok = 1; ok = 1;

View File

@ -29,6 +29,7 @@ struct _E_View
Pixmap pmap; Pixmap pmap;
struct { struct {
int w, h; int w, h;
int force;
} size; } size;
struct { struct {
int x, y; int x, y;