forked from enlightenment/efl
fix ecore to NOT segv like a madman now.
SVN revision: 17257
This commit is contained in:
parent
442ce15652
commit
8d2fe31aef
|
@ -89,7 +89,7 @@ ecore_file_monitor_poll_add(const char *path,
|
||||||
|
|
||||||
em = calloc(1, sizeof(Ecore_File_Monitor_Poll));
|
em = calloc(1, sizeof(Ecore_File_Monitor_Poll));
|
||||||
if (!em) return NULL;
|
if (!em) return NULL;
|
||||||
|
|
||||||
if (!_timer)
|
if (!_timer)
|
||||||
_timer = ecore_timer_add(_interval, _ecore_file_monitor_poll_handler, NULL);
|
_timer = ecore_timer_add(_interval, _ecore_file_monitor_poll_handler, NULL);
|
||||||
else
|
else
|
||||||
|
@ -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,23 +158,24 @@ 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;
|
|
||||||
l = l->next;
|
file = (Ecore_File *)l;
|
||||||
free(file->name);
|
l = l->next;
|
||||||
free(file);
|
free(file->name);
|
||||||
}
|
free(file);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_monitors = _ecore_list2_remove(_monitors, em);
|
_monitors = _ecore_list2_remove(_monitors, em);
|
||||||
|
|
||||||
free(em->path);
|
free(em->path);
|
||||||
free(em);
|
free(em);
|
||||||
|
|
||||||
if ((!_monitors) && (_timer))
|
if ((!_monitors) && (_timer))
|
||||||
{
|
{
|
||||||
ecore_timer_del(_timer);
|
ecore_timer_del(_timer);
|
||||||
|
@ -232,13 +230,13 @@ _ecore_file_monitor_poll_check(Ecore_File_Monitor *em)
|
||||||
{
|
{
|
||||||
Ecore_List2 *l;
|
Ecore_List2 *l;
|
||||||
Ecore_File_Event event;
|
Ecore_File_Event event;
|
||||||
|
|
||||||
/* Notify all files deleted */
|
/* Notify all files deleted */
|
||||||
for (l = em->files; l;)
|
for (l = em->files; l;)
|
||||||
{
|
{
|
||||||
Ecore_File *f;
|
Ecore_File *f;
|
||||||
char buf[PATH_MAX];
|
char buf[PATH_MAX];
|
||||||
|
|
||||||
f = (Ecore_File *)l;
|
f = (Ecore_File *)l;
|
||||||
l = l->next;
|
l = l->next;
|
||||||
|
|
||||||
|
@ -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)))
|
{
|
||||||
{
|
/* Are we a directory? We should check first, rather than rely on null here*/
|
||||||
Ecore_File *f;
|
while ((file = ecore_list_next(files)))
|
||||||
char buf[PATH_MAX];
|
|
||||||
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;
|
||||||
|
|
||||||
|
if (_ecore_file_monitor_poll_checking(em, file))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
snprintf(buf, sizeof(buf), "%s/%s", em->path, file);
|
||||||
|
f = calloc(1, sizeof(Ecore_File));
|
||||||
|
if (!f)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
f->name = strdup(file);
|
||||||
|
f->mtime = ecore_file_mod_time(buf);
|
||||||
|
f->is_dir = ecore_file_is_dir(buf);
|
||||||
|
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);
|
||||||
snprintf(buf, sizeof(buf), "%s/%s", em->path, file);
|
|
||||||
f = calloc(1, sizeof(Ecore_File));
|
|
||||||
if (!f)
|
|
||||||
{
|
|
||||||
free(file);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
f->name = file;
|
|
||||||
f->mtime = ecore_file_mod_time(buf);
|
|
||||||
f->is_dir = ecore_file_is_dir(buf);
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
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
|
||||||
|
|
Loading…
Reference in New Issue