/** * Get the contents of a environment variable that contains a path. Caller * owns the string that is inserted into the directory record. Returns * 0 on success and -1 on error. */ int get_path_from_env(dir_rec_t* rec, const char* var) { const char* path = getenv(var); int ret = get_path_from_string(rec, path); if (ret < 0) { LOGW("Problem finding value for environment variable %s\n", var); } return ret; }
TEST_F(UtilsTest, GetPathFromString_CanonicalPath) { dir_rec_t test3; EXPECT_EQ(0, get_path_from_string(&test3, "/data/app/")) << "Should be able to canonicalize directory /data/app/"; EXPECT_STREQ("/data/app/", test3.path) << "/data/app/ should be canonicalized to /data/app/"; EXPECT_EQ(10, (ssize_t) test3.len) << "path len should be equal to the length of /data/app/ (10)"; free(test3.path); }
TEST_F(UtilsTest, GetPathFromString_NonCanonical) { dir_rec_t test1; EXPECT_EQ(0, get_path_from_string(&test1, "/mnt/asec")) << "Should be able to canonicalize directory /mnt/asec"; EXPECT_STREQ("/mnt/asec/", test1.path) << "/mnt/asec should be canonicalized to /mnt/asec/"; EXPECT_EQ(10, (ssize_t) test1.len) << "path len should be equal to the length of /mnt/asec/ (10)"; free(test1.path); }
bool init_globals_from_data_and_root(const char* data, const char* root) { // Get the android data directory. if (get_path_from_string(&android_data_dir, data) < 0) { return false; } // Get the android app directory. if (copy_and_append(&android_app_dir, &android_data_dir, APP_SUBDIR) < 0) { return false; } // Get the android protected app directory. if (copy_and_append(&android_app_private_dir, &android_data_dir, PRIVATE_APP_SUBDIR) < 0) { return false; } // Get the android ephemeral app directory. if (copy_and_append(&android_app_ephemeral_dir, &android_data_dir, EPHEMERAL_APP_SUBDIR) < 0) { return false; } // Get the android app native library directory. if (copy_and_append(&android_app_lib_dir, &android_data_dir, APP_LIB_SUBDIR) < 0) { return false; } // Get the sd-card ASEC mount point. if (get_path_from_env(&android_asec_dir, ASEC_MOUNTPOINT_ENV_NAME) < 0) { return false; } // Get the android media directory. if (copy_and_append(&android_media_dir, &android_data_dir, MEDIA_SUBDIR) < 0) { return false; } // Get the android external app directory. if (get_path_from_string(&android_mnt_expand_dir, "/mnt/expand/") < 0) { return false; } // Get the android profiles directory. if (copy_and_append(&android_profiles_dir, &android_data_dir, PROFILES_SUBDIR) < 0) { return false; } // Take note of the system and vendor directories. android_system_dirs.count = 4; android_system_dirs.dirs = (dir_rec_t*) calloc(android_system_dirs.count, sizeof(dir_rec_t)); if (android_system_dirs.dirs == NULL) { ALOGE("Couldn't allocate array for dirs; aborting\n"); return false; } dir_rec_t android_root_dir; if (get_path_from_string(&android_root_dir, root) < 0) { return false; } android_system_dirs.dirs[0].path = build_string2(android_root_dir.path, APP_SUBDIR); android_system_dirs.dirs[0].len = strlen(android_system_dirs.dirs[0].path); android_system_dirs.dirs[1].path = build_string2(android_root_dir.path, PRIV_APP_SUBDIR); android_system_dirs.dirs[1].len = strlen(android_system_dirs.dirs[1].path); android_system_dirs.dirs[2].path = strdup("/vendor/app/"); android_system_dirs.dirs[2].len = strlen(android_system_dirs.dirs[2].path); android_system_dirs.dirs[3].path = strdup("/oem/app/"); android_system_dirs.dirs[3].len = strlen(android_system_dirs.dirs[3].path); return true; }
TEST_F(UtilsTest, GetPathFromString_RelativePathFail) { dir_rec_t test1; EXPECT_EQ(-1, get_path_from_string(&test1, "mnt/asec")) << "Should not allow relative paths."; }
TEST_F(UtilsTest, GetPathFromString_EmptyPathFail) { dir_rec_t test1; EXPECT_EQ(-1, get_path_from_string(&test1, "")) << "Should not allow empty paths."; }
TEST_F(UtilsTest, GetPathFromString_NullPathFail) { dir_rec_t test1; EXPECT_EQ(-1, get_path_from_string(&test1, (const char *) NULL)) << "Should not allow NULL as a path."; }