int state;
};
-static GList* _get_mode_list(GVariant *in_data)
+static void _free_mode(gpointer data)
+{
+ mode_list_data_h mode = data;
+ free(mode->id);
+ free(mode->name);
+ free(mode);
+}
+
+static GList* _get_mode_list(GVariant *in_data, int *result)
{
gchar *mode_id;
gchar *mode_name;
DBG("mode(%s) : state(%d)", mode_id, state);
mode_list_data_h mode = malloc(sizeof(struct mds_list_data_handle));
if (NULL == mode) {
- ERR("malloc() Fail");
- return NULL;
+ ERR("malloc() Fail(%d)", errno);
+ free(mode_id);
+ free(mode_name);
+ g_list_free_full(mode_list, _free_mode);
+ mode_list = NULL;
+ *result = MODES_ERROR_OUT_OF_MEMORY;
+ break;
}
mode->id = strdup(mode_id);
mode->name = strdup(mode_name);
return MODES_ERROR_SYSTEM;
}
- *list = _get_mode_list(mode_list);
+ *list = _get_mode_list(mode_list, &result);
return result;
}
return MODES_ERROR_NONE;
}
-static void _free_mode(gpointer data, gpointer user_data)
-{
- mode_list_data_h mode = data;
- free(mode->id);
- free(mode->name);
- free(mode);
-}
-
API void modes_free_modes(GList *list)
{
- g_list_foreach(list, _free_mode, NULL);
- g_list_free(list);
+ g_list_free_full(list, _free_mode);
}
API const char* modes_get_mode_id(mode_list_data_h data)