extern int update_monitor_add_delete_cb(const char *filename, int (*cb)(const char *filename, void *data, int over), void *data);
extern void *update_monitor_del_update_cb(const char *filename, int (*cb)(const char *filename, void *data, int over));
extern void *update_monitor_del_delete_cb(const char *filename, int (*cb)(const char *filename, void *data, int over));
+extern int update_monitor_trigger_update_cb(const char *filename, int over);
+extern int update_monitor_trigger_delete_cb(const char *filename, int over);
// End of a file
#include <stdio.h>
#include <stdlib.h> /* exit */
#include <errno.h>
+#include <unistd.h> /* access */
#include <Ecore.h>
#include <Eina.h>
return LB_STATUS_ERROR_NOT_EXIST;
}
+int livebox_trigger_update_monitor(const char *filename, int is_pd)
+{
+ char *fname;
+ int ret;
+
+ if (is_pd) {
+ int len;
+ len = strlen(filename) + strlen(".desc");
+
+ fname = malloc(len + 1);
+ if (!fname) {
+ ErrPrint("Heap: %s\n", strerror(errno));
+ return LB_STATUS_ERROR_MEMORY;
+ }
+
+ snprintf(fname, len, "%s.desc", filename);
+ } else {
+ fname = strdup(filename);
+ if (!fname) {
+ ErrPrint("Heap: %s\n", strerror(errno));
+ return LB_STATUS_ERROR_MEMORY;
+ }
+ }
+
+ if (access(fname, R_OK | W_OK) != 0) {
+ ErrPrint("access: %s (%s)\n", fname, strerror(errno));
+ ret = LB_STATUS_ERROR_IO;
+ } else {
+ ret = update_monitor_trigger_update_cb(fname, 0);
+ }
+
+ free(fname);
+ return ret;
+}
+
HAPI int lb_open_pd(const char *pkgname)
{
Eina_List *l;
{
int fd;
int read_size;
- Eina_List *l;
- Eina_List *n;
- struct cb_item *item;
char *buffer;
register int i;
struct inotify_event *evt;
}
if (evt->mask & (IN_DELETE | IN_MOVED_FROM)) {
- EINA_LIST_FOREACH_SAFE(s_info.delete_list, l, n, item) {
- if (!strcmp(filename, item->filename) && item->cb(filename, item->data, !!(evt->mask & IN_Q_OVERFLOW)) == EXIT_FAILURE) {
- s_info.delete_list = eina_list_remove_list(s_info.delete_list, l);
- free(item->filename);
- free(item);
- }
- }
+ update_monitor_trigger_delete_cb(filename, !!(evt->mask & IN_Q_OVERFLOW));
} else if (evt->mask & (IN_CLOSE_WRITE | IN_MOVED_TO)) {
- EINA_LIST_FOREACH_SAFE(s_info.update_list, l, n, item) {
- if (!strcmp(filename, item->filename) && item->cb(filename, item->data, !!(evt->mask & IN_Q_OVERFLOW)) == EXIT_FAILURE) {
- s_info.update_list = eina_list_remove_list(s_info.update_list, l);
- free(item->filename);
- free(item);
- }
- }
+ update_monitor_trigger_update_cb(filename, !!(evt->mask & IN_Q_OVERFLOW));
}
free(filename);
return LB_STATUS_SUCCESS;
}
+HAPI int update_monitor_trigger_update_cb(const char *filename, int over)
+{
+ Eina_List *l;
+ Eina_List *n;
+ struct cb_item *item;
+ int cnt = 0;
+
+ EINA_LIST_FOREACH_SAFE(s_info.update_list, l, n, item) {
+ if (!strcmp(filename, item->filename) && item->cb(filename, item->data, over) == EXIT_FAILURE) {
+ s_info.update_list = eina_list_remove_list(s_info.update_list, l);
+ free(item->filename);
+ free(item);
+ cnt++;
+ }
+ }
+
+ return cnt == 0 ? LB_STATUS_ERROR_INVALID : LB_STATUS_SUCCESS;
+}
+
+HAPI int update_monitor_trigger_delete_cb(const char *filename, int over)
+{
+ Eina_List *l;
+ Eina_List *n;
+ struct cb_item *item;
+ int cnt = 0;
+
+ EINA_LIST_FOREACH_SAFE(s_info.delete_list, l, n, item) {
+ if (!strcmp(filename, item->filename) && item->cb(filename, item->data, over) == EXIT_FAILURE) {
+ s_info.delete_list = eina_list_remove_list(s_info.delete_list, l);
+ free(item->filename);
+ free(item);
+ cnt++;
+ }
+ }
+
+ return cnt == 0 ? LB_STATUS_ERROR_INVALID : LB_STATUS_SUCCESS;
+}
+
HAPI int update_monitor_add_update_cb(const char *filename,
int (*cb)(const char *filename, void *data, int over), void *data)
{