Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Oeser <info@graphics-engineer.com>2019-03-20 07:17:32 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-03-20 07:38:23 +0300
commitfe7c7d2820f84b815eec5d9c322c7192f33b04b8 (patch)
tree179ae1fde3e2fe1802e35576c2261723d914089a /source/blender
parent4e2aea5efea31262ce46240baa0511e85a021332 (diff)
Fix T62736: Inconsistent behavior bpy.utils.user_resource()
If a subfolder was specified which didn't exist, logic would fallback to get_path_user (instead of get_path_environment). Now always use the from the environment variable if it's set and exists.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenkernel/intern/appdir.c39
-rw-r--r--source/blender/python/intern/bpy.c5
2 files changed, 35 insertions, 9 deletions
diff --git a/source/blender/blenkernel/intern/appdir.c b/source/blender/blenkernel/intern/appdir.c
index bb0b9a23431..c8882be0dd0 100644
--- a/source/blender/blenkernel/intern/appdir.c
+++ b/source/blender/blenkernel/intern/appdir.c
@@ -244,7 +244,7 @@ bool BKE_appdir_app_is_portable_install(void)
* \param targetpath: String to return path.
* \param subfolder_name: optional name of subfolder within folder.
* \param envvar: name of environment variable to check folder_name.
- * \return true if it was able to construct such a path.
+ * \return true if it was able to construct such a path and the path exists.
*/
static bool get_path_environment(
char *targetpath,
@@ -272,6 +272,35 @@ static bool get_path_environment(
}
/**
+ * Returns the path of a folder from environment variables
+ *
+ * \param targetpath: String to return path.
+ * \param subfolder_name: optional name of subfolder within folder.
+ * \param envvar: name of environment variable to check folder_name.
+ * \return true if it was able to construct such a path.
+ */
+static bool get_path_environment_notest(
+ char *targetpath,
+ size_t targetpath_len,
+ const char *subfolder_name,
+ const char *envvar)
+{
+ char user_path[FILE_MAX];
+
+ if (test_env_path(user_path, envvar)) {
+ if (subfolder_name) {
+ BLI_join_dirfile(targetpath, targetpath_len, user_path, subfolder_name);
+ return true;
+ }
+ else {
+ BLI_strncpy(targetpath, user_path, FILE_MAX);
+ return true;
+ }
+ }
+ return false;
+}
+
+/**
* Returns the path of a folder within the user-files area.
* \param targetpath: String to return path
* \param folder_name: default name of folder within user area
@@ -447,19 +476,19 @@ const char *BKE_appdir_folder_id_user_notest(const int folder_id, const char *su
switch (folder_id) {
case BLENDER_USER_DATAFILES:
- if (get_path_environment(path, sizeof(path), subfolder, "BLENDER_USER_DATAFILES")) break;
+ if (get_path_environment_notest(path, sizeof(path), subfolder, "BLENDER_USER_DATAFILES")) break;
get_path_user(path, sizeof(path), "datafiles", subfolder, ver);
break;
case BLENDER_USER_CONFIG:
- if (get_path_environment(path, sizeof(path), subfolder, "BLENDER_USER_CONFIG")) break;
+ if (get_path_environment_notest(path, sizeof(path), subfolder, "BLENDER_USER_CONFIG")) break;
get_path_user(path, sizeof(path), "config", subfolder, ver);
break;
case BLENDER_USER_AUTOSAVE:
- if (get_path_environment(path, sizeof(path), subfolder, "BLENDER_USER_AUTOSAVE")) break;
+ if (get_path_environment_notest(path, sizeof(path), subfolder, "BLENDER_USER_AUTOSAVE")) break;
get_path_user(path, sizeof(path), "autosave", subfolder, ver);
break;
case BLENDER_USER_SCRIPTS:
- if (get_path_environment(path, sizeof(path), subfolder, "BLENDER_USER_SCRIPTS")) break;
+ if (get_path_environment_notest(path, sizeof(path), subfolder, "BLENDER_USER_SCRIPTS")) break;
get_path_user(path, sizeof(path), "scripts", subfolder, ver);
break;
default:
diff --git a/source/blender/python/intern/bpy.c b/source/blender/python/intern/bpy.c
index 05b471c4db7..55d226e1461 100644
--- a/source/blender/python/intern/bpy.c
+++ b/source/blender/python/intern/bpy.c
@@ -167,10 +167,7 @@ static PyObject *bpy_user_resource(PyObject *UNUSED(self), PyObject *args, PyObj
}
/* same logic as BKE_appdir_folder_id_create(), but best leave it up to the script author to create */
- path = BKE_appdir_folder_id(folder_id, subdir);
-
- if (!path)
- path = BKE_appdir_folder_id_user_notest(folder_id, subdir);
+ path = BKE_appdir_folder_id_user_notest(folder_id, subdir);
return PyC_UnicodeFromByte(path ? path : "");
}