fix ecore to NOT segv like a madman now.

SVN revision: 17257
This commit is contained in:
Carsten Haitzler 2005-10-07 02:44:20 +00:00
parent 442ce15652
commit 8d2fe31aef
1 changed files with 46 additions and 53 deletions

View File

@ -122,13 +122,10 @@ ecore_file_monitor_poll_add(const char *path,
f = calloc(1, sizeof(Ecore_File)); f = calloc(1, sizeof(Ecore_File));
if (!f) if (!f)
{ continue;
free(file);
continue;
}
snprintf(buf, sizeof(buf), "%s/%s", em->path, file); snprintf(buf, sizeof(buf), "%s/%s", em->path, file);
f->name = file; f->name = strdup(file);
f->mtime = ecore_file_mod_time(buf); f->mtime = ecore_file_mod_time(buf);
f->is_dir = ecore_file_is_dir(buf); f->is_dir = ecore_file_is_dir(buf);
em->files = _ecore_list2_append(em->files, f); em->files = _ecore_list2_append(em->files, f);
@ -161,17 +158,18 @@ ecore_file_monitor_poll_del(Ecore_File_Monitor *em)
/* Remove files */ /* Remove files */
/*It's possible there weren't any files to monitor, so check if the list is init*/ /*It's possible there weren't any files to monitor, so check if the list is init*/
if (em->files) { if (em->files)
for (l = em->files; l;) {
{ for (l = em->files; l;)
Ecore_File *file; {
Ecore_File *file;
file = (Ecore_File *)l; file = (Ecore_File *)l;
l = l->next; l = l->next;
free(file->name); free(file->name);
free(file); free(file);
} }
} }
_monitors = _ecore_list2_remove(_monitors, em); _monitors = _ecore_list2_remove(_monitors, em);
@ -303,39 +301,35 @@ _ecore_file_monitor_poll_check(Ecore_File_Monitor *em)
/* Files have been added or removed */ /* Files have been added or removed */
files = ecore_file_ls(em->path); files = ecore_file_ls(em->path);
if (files) { /*Are we a directory? We should check first, rather than rely on null here*/ if (files)
while ((file = ecore_list_next(files)))
{ {
Ecore_File *f; /* Are we a directory? We should check first, rather than rely on null here*/
char buf[PATH_MAX]; while ((file = ecore_list_next(files)))
Ecore_File_Event event;
if (_ecore_file_monitor_poll_checking(em, file))
{ {
free(file); Ecore_File *f;
continue; char buf[PATH_MAX];
} Ecore_File_Event event;
snprintf(buf, sizeof(buf), "%s/%s", em->path, file); if (_ecore_file_monitor_poll_checking(em, file))
f = calloc(1, sizeof(Ecore_File)); continue;
if (!f)
{
free(file);
continue;
}
f->name = file; snprintf(buf, sizeof(buf), "%s/%s", em->path, file);
f->mtime = ecore_file_mod_time(buf); f = calloc(1, sizeof(Ecore_File));
f->is_dir = ecore_file_is_dir(buf); if (!f)
if (f->is_dir) continue;
event = ECORE_FILE_EVENT_CREATED_DIRECTORY;
else f->name = strdup(file);
event = ECORE_FILE_EVENT_CREATED_FILE; f->mtime = ecore_file_mod_time(buf);
em->func(em->data, em, event, buf); f->is_dir = ecore_file_is_dir(buf);
em->files = _ecore_list2_append(em->files, f); if (f->is_dir)
event = ECORE_FILE_EVENT_CREATED_DIRECTORY;
else
event = ECORE_FILE_EVENT_CREATED_FILE;
em->func(em->data, em, event, buf);
em->files = _ecore_list2_append(em->files, f);
}
ecore_list_destroy(files);
} }
ecore_list_destroy(files);
}
if (!ecore_file_is_dir(em->path)) if (!ecore_file_is_dir(em->path))
em->func(em->data, em, ECORE_FILE_EVENT_MODIFIED, em->path); em->func(em->data, em, ECORE_FILE_EVENT_MODIFIED, em->path);
@ -358,7 +352,6 @@ _ecore_file_monitor_poll_checking(Ecore_File_Monitor *em, char *name)
if (!strcmp(f->name, name)) if (!strcmp(f->name, name))
return 1; return 1;
} }
return 0; return 0;
} }
#endif #endif