}
EXPORT_API int subsession_get_user_list(int session_uid, subsession_user_t **user_list, int *user_count) {
- return_if(
- session_uid_is_not_valid(session_uid,
- user_count_ptr_is_null(user_count))
- )
+
+ return_if(session_uid_is_not_valid(session_uid, user_count_ptr_is_null(user_count)))
g_autoptr(GVariant) out = NULL;
int ret = method_call_no_signal_return(dbus_method_call.GetUserList,
- g_variant_new("(i)", session_uid),
- G_VARIANT_TYPE("(as)"),
- &out);
+ g_variant_new("(i)", session_uid),
+ G_VARIANT_TYPE("(as)"),
+ &out);
- if (ret != 0)
+ if (ret != SUBSESSION_ERROR_NONE)
return ret;
g_autoptr(GVariant) array = g_variant_get_child_value(out, 0);
-
gsize elem_no = 0;
g_autofree const char** data = g_variant_get_strv(array, &elem_no);
- if(user_list != NULL) {
-
- void * raw_data = calloc(elem_no, SUBSESSION_USER_MAXLEN);
- if (raw_data == NULL) {
+ if (user_list != NULL && elem_no > 0) {
+ subsession_user_t *list = calloc(elem_no, sizeof(subsession_user_t));
+ if (list == NULL) {
return SUBSESSION_ERROR_OUT_OF_MEMORY;
}
- *user_list = (subsession_user_t *)raw_data;
-
+ *user_list = list;
for (gsize i = 0; i < elem_no; ++i) {
- memcpy((*user_list)[i], data[i], strnlen(data[i], SUBSESSION_USER_MAXLEN)+1);
+ memcpy((*user_list)[i], data[i], strnlen(data[i], sizeof(subsession_user_t)-1) + 1);
}
}
+
*user_count = elem_no;
- return TIZEN_ERROR_NONE;
+ return SUBSESSION_ERROR_NONE;
}
EXPORT_API int subsession_get_current_user(int session_uid, subsession_user_t user) {