DD_LIST_FOREACH_SAFE function allows you to safely delete a list item
in a foreach statement.
Change-Id: Ic6bc0bf11e62161f9ff2769a66439197d6b81b39
Signed-off-by: Yunmi Ha <yunmi.ha@samsung.com>
a = g_list_remove(a, b)
#define DD_LIST_FOREACH(head, elem, node) \
for (elem = head; elem && ((node = elem->data) != NULL); elem = elem->next, node = NULL)
a = g_list_remove(a, b)
#define DD_LIST_FOREACH(head, elem, node) \
for (elem = head; elem && ((node = elem->data) != NULL); elem = elem->next, node = NULL)
+#define DD_LIST_FOREACH_SAFE(head, elem, elem_next, node) \
+ for (elem = head, elem_next=g_list_next(elem), node = NULL; \
+ elem && ((node = elem->data) != NULL); \
+ elem = elem_next, elem_next = g_list_next(elem), node=NULL)
#endif
#define FEEDBACK_DATA_DIR FEEDBACK_SYS_SHARE"/feedback"
#endif
#define FEEDBACK_DATA_DIR FEEDBACK_SYS_SHARE"/feedback"
{
GDBusConnection *conn;
struct feedback_restart_callback *callback;
{
GDBusConnection *conn;
struct feedback_restart_callback *callback;
if (!func)
return -EINVAL;
if (!func)
return -EINVAL;
- DD_LIST_FOREACH(callback_list, elem, callback) {
+ DD_LIST_FOREACH_SAFE(callback_list, elem, next, callback) {
if (callback->func != func)
continue;
if (callback->feedback_id > 0)
if (callback->func != func)
continue;
if (callback->feedback_id > 0)