bool mdgd_db_check_device_exist(char *device_id);
bool mdgd_db_check_device_exist_in_group(char *group_name, char *device_id);
bool mdgd_db_check_group_exist(const char *group_name);
-void mdgd_db_get_groups(char **groups, int *group_count);
-void mdgd_db_get_devices_in_group(char *group_name, mdgd_device_t **devices, int *device_count);
+void mdgd_db_get_groups(char ***groups, int *group_count);
+void mdgd_db_get_devices_in_group(char *group_name, mdgd_device_t ***devices, int *device_count);
int mdgd_db_group_print();
int mdgd_db_device_print();
return result;
}
-void mdgd_db_get_groups(char **groups, int *group_count)
+void mdgd_db_get_groups(char ***groups, int *group_count)
{
int ret, i = 0;
char *sql = NULL;
ret = sqlite3_prepare_v2(mdgd_ctx->db, sql, strlen(sql), &stmt, NULL);
if (ret == SQLITE_OK) {
+ int column_count = sqlite3_column_count(stmt);
+ *groups = g_new0(char*, column_count);
+
while (sqlite3_step(stmt) == SQLITE_ROW)
- groups[i++] = g_strdup((char *)sqlite3_column_text(stmt, 1));
+ (*groups)[i++] = g_strdup((char *)sqlite3_column_text(stmt, 1));
sqlite3_finalize(stmt);
} else {
LOG_END();
}
-void mdgd_db_get_devices_in_group(char *group_name, mdgd_device_t **devices, int *device_count)
+void mdgd_db_get_devices_in_group(char *group_name, mdgd_device_t ***devices, int *device_count)
{
int ret, i = 0;
char *sql = NULL;
ret = sqlite3_prepare_v2(mdgd_ctx->db, sql, strlen(sql), &stmt, NULL);
if (ret == SQLITE_OK) {
+ int column_count = sqlite3_column_count(stmt);
+ *devices = g_new0(mdgd_device_t *, column_count);
+
while (sqlite3_step(stmt) == SQLITE_ROW) {
- devices[i] = g_new0(mdgd_device_t, 1);
- devices[i]->device_id = g_strdup((char *)sqlite3_column_text(stmt, 2));
- devices[i]->model_name = g_strdup((char *)sqlite3_column_text(stmt, 3));
- devices[i]->device_name = g_strdup((char *)sqlite3_column_text(stmt, 4));
- devices[i]->platform_ver = g_strdup((char *)sqlite3_column_text(stmt, 5));
- devices[i]->vendor_id = g_strdup((char *)sqlite3_column_text(stmt, 6));
- devices[i]->profile = g_strdup((char *)sqlite3_column_text(stmt, 7));
- devices[i]->is_invited = sqlite3_column_int(stmt, 8);
- devices[i]->type = sqlite3_column_int(stmt, 9);
+ (*devices)[i] = g_new0(mdgd_device_t, 1);
+ (*devices)[i]->device_id = g_strdup((char *)sqlite3_column_text(stmt, 2));
+ (*devices)[i]->model_name = g_strdup((char *)sqlite3_column_text(stmt, 3));
+ (*devices)[i]->device_name = g_strdup((char *)sqlite3_column_text(stmt, 4));
+ (*devices)[i]->platform_ver = g_strdup((char *)sqlite3_column_text(stmt, 5));
+ (*devices)[i]->vendor_id = g_strdup((char *)sqlite3_column_text(stmt, 6));
+ (*devices)[i]->profile = g_strdup((char *)sqlite3_column_text(stmt, 7));
+ (*devices)[i]->is_invited = sqlite3_column_int(stmt, 8);
+ (*devices)[i]->type = sqlite3_column_int(stmt, 9);
i++;
}
int length = 0;
int len;
+ int iter_len;
unsigned char *data;
GVariantIter *iter;
int msg_id;
LOG_BEGIN();
g_variant_get(params, "(iay)", &len, &iter);
+ iter_len = g_variant_iter_n_children(iter);
+
+ if (len > iter_len) {
+ LOG_ERR("len is too bigger than real data");
+ return TRUE;
+ }
data = g_try_malloc0(len + 1);
if (NULL == data) {
- group_complete_send_data(group, invocation, -1, 0);
LOG_ERR("Failed to allocate memory");
return TRUE;
}
- while (g_variant_iter_loop(iter, "y", &data[length]))
- length += 1;
+ for (int i = 0; i < len; i++) {
+ g_variant_iter_loop(iter, "y", &data[i]);
+ }
g_variant_iter_free(iter);
int length = 0;
int len;
+ int iter_len;
unsigned char *data;
GVariantIter *iter;
LOG_BEGIN();
g_variant_get(params, "(iay)", &len, &iter);
+ iter_len = g_variant_iter_n_children(iter);
+
+ if (len > iter_len) {
+ LOG_ERR("len is too bigger than real data");
+ return TRUE;
+ }
data = g_try_malloc0(len + 1);
if (NULL == data) {
return TRUE;
}
- while (g_variant_iter_loop(iter, "y", &data[length]))
- length += 1;
+ for (int i = 0; i < len; i++) {
+ g_variant_iter_loop(iter, "y", &data[i]);
+ }
g_variant_iter_free(iter);
int mdgd_group_delete(char *name)
{
int ret = MDGD_ERROR_NONE;
- mdgd_device_t *devices[256];
+ mdgd_device_t **devices;
int device_count = 0;
LOG_BEGIN();
mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
/* Get all device in group */
- mdgd_db_get_devices_in_group(name, devices, &device_count);
+ mdgd_db_get_devices_in_group(name, &devices, &device_count);
for (int i = 0; i < device_count; i++) {
mdgd_db_device_delete(name, devices[i]->device_id);
} else if (strcmp(resourceUri.c_str(),
mdgd_resource_get_uri_prefix(MDGD_RESOURCE_TYPE_GROUP)) == 0) {
int group_count;
- char *groups[256];
+ char **groups;
- mdgd_db_get_groups(groups, &group_count);
+ mdgd_db_get_groups(&groups, &group_count);
std::vector<std::string> group_list;
for (int i = 0; i < group_count; i++) {
LOG_DEBUG("%d. group name : %s", i + 1, groups[i]);
builder = g_variant_builder_new(G_VARIANT_TYPE("aa{sv}"));
- mdgd_device_t *devices[256];
+ mdgd_device_t **devices;
int device_count = 0;
LOG_BEGIN();
/* Get all device in group */
- mdgd_db_get_devices_in_group(group_name, devices, &device_count);
+ mdgd_db_get_devices_in_group(group_name, &devices, &device_count);
for (int i = 0; i < device_count; i++) {
mdgd_device_t *device = devices[i];