Extract lib main dir getter 54/325354/1
authorMichal Bloch <m.bloch@samsung.com>
Mon, 9 Jun 2025 19:51:15 +0000 (21:51 +0200)
committerMichal Bloch <m.bloch@samsung.com>
Mon, 9 Jun 2025 21:17:34 +0000 (23:17 +0200)
Change-Id: Ie61debc1763c73776a6720d5cd65f892abe7f44e

src/library/src/lib.c

index eb108ad4a59efb2a9d9bcbdcabe6da6d429628d7..3e589c3f49ccd08f53c6800ada832d33e1f7e4ef 100644 (file)
@@ -1006,9 +1006,9 @@ static int query_dir_via_readdir(DIR *const dir_ptr, subsession_user_t **const u
        return SUBSESSION_ERROR_NONE;
 }
 
-EXPORT_API int subsession_get_user_list(int session_uid, subsession_user_t **user_list, int *user_count)
+static int get_main_dir(char **maindir_ptr, int session_uid)
 {
-       return_if(session_uid_is_not_valid(session_uid, user_count_ptr_is_null(user_count)))
+       *maindir_ptr = NULL;
 
        const long int max_buf_len = sysconf(_SC_GETPW_R_SIZE_MAX);
        if (max_buf_len <= 0)
@@ -1026,12 +1026,24 @@ EXPORT_API int subsession_get_user_list(int session_uid, subsession_user_t **use
 
        const size_t home_dir_len = strlen(pass_ptr->pw_dir);
        const size_t main_dir_len = home_dir_len + sizeof subsession_subdir;
-       __attribute__((cleanup(free_ptr))) char *main_dir = (char*)malloc(main_dir_len);
-       if (main_dir == NULL)
+       *maindir_ptr = (char*)malloc(main_dir_len);
+       if (*maindir_ptr == NULL)
                return SUBSESSION_ERROR_OUT_OF_MEMORY;
 
-       memcpy(main_dir, pass_ptr->pw_dir, main_dir_len - 1);
-       memcpy(main_dir + home_dir_len, subsession_subdir, main_dir_len - home_dir_len);
+       memcpy(*maindir_ptr, pass_ptr->pw_dir, main_dir_len - 1);
+       memcpy(*maindir_ptr + home_dir_len, subsession_subdir, main_dir_len - home_dir_len);
+
+       return 0;
+}
+
+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)))
+
+       __attribute__((cleanup(free_ptr))) char *main_dir = NULL;
+       const int r = get_main_dir(&main_dir, session_uid);
+       if (r != 0)
+               return r;
 
        DIR *const dir_ptr = opendir(main_dir);
        if (dir_ptr == NULL) {