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:
authorAnkit Meel <ankitjmeel@gmail.com>2021-12-11 19:59:53 +0300
committerAnkit Meel <ankitjmeel@gmail.com>2021-12-11 19:59:53 +0300
commit9df13fba69c3b0e0e013db198515e6e1a7238f6a (patch)
treebd885ea12f406316ab38e42465cc864328c45bd2
parent23be5fd4499ad92c049f140564df3e32cfe9cea3 (diff)
macOS: add tilde-based path expander
Replaces `HOME` environment variable usage for user directories like in D12802. Reviewed By: #platform_macos, brecht Differential Revision: https://developer.blender.org/D13212
-rw-r--r--source/blender/blenkernel/intern/appdir.c14
-rw-r--r--source/blender/blenlib/BLI_fileops.h8
-rw-r--r--source/blender/blenlib/intern/storage_apple.mm17
3 files changed, 32 insertions, 7 deletions
diff --git a/source/blender/blenkernel/intern/appdir.c b/source/blender/blenkernel/intern/appdir.c
index a819459f989..9dd4c7e503a 100644
--- a/source/blender/blenkernel/intern/appdir.c
+++ b/source/blender/blenkernel/intern/appdir.c
@@ -175,10 +175,12 @@ const char *BKE_appdir_folder_default_or_root(void)
const char *BKE_appdir_folder_home(void)
{
-#ifndef WIN32
- return BLI_getenv("HOME");
-#else /* Windows */
+#ifdef WIN32
return BLI_getenv("userprofile");
+#elif defined(__APPLE__)
+ return BLI_expand_tilde("~/");
+#else
+ return BLI_getenv("HOME");
#endif
}
@@ -248,10 +250,8 @@ bool BKE_appdir_font_folder_default(char *dir)
BLI_strncpy_wchar_as_utf8(test_dir, wpath, sizeof(test_dir));
}
#elif defined(__APPLE__)
- const char *home = BLI_getenv("HOME");
- if (home) {
- BLI_path_join(test_dir, sizeof(test_dir), home, "Library", "Fonts", NULL);
- }
+ STRNCPY(test_dir, BLI_expand_tilde("~/Library/Fonts/"));
+ BLI_path_slash_ensure(test_dir);
#else
STRNCPY(test_dir, "/usr/share/fonts");
#endif
diff --git a/source/blender/blenlib/BLI_fileops.h b/source/blender/blenlib/BLI_fileops.h
index 932b67866ea..2ef9b8f6c36 100644
--- a/source/blender/blenlib/BLI_fileops.h
+++ b/source/blender/blenlib/BLI_fileops.h
@@ -322,6 +322,14 @@ void *BLI_file_read_binary_as_mem(const char *filepath, size_t pad_bytes, size_t
*/
void BLI_file_free_lines(struct LinkNode *lines);
+#ifdef __APPLE__
+/**
+ * Expand the leading `~` in the given path to `/Users/$USER`.
+ * This doesn't preserve the trailing path separator.
+ * Giving a path without leading `~` is not an error.
+ */
+const char *BLI_expand_tilde(const char *path_with_tilde);
+#endif
/* This weirdo pops up in two places. */
#if !defined(WIN32)
# ifndef O_BINARY
diff --git a/source/blender/blenlib/intern/storage_apple.mm b/source/blender/blenlib/intern/storage_apple.mm
index 07091f2b055..b0234b9a093 100644
--- a/source/blender/blenlib/intern/storage_apple.mm
+++ b/source/blender/blenlib/intern/storage_apple.mm
@@ -184,3 +184,20 @@ eFileAttributes BLI_file_attributes(const char *path)
return (eFileAttributes)ret;
}
+
+const char *BLI_expand_tilde(const char *path_with_tilde)
+{
+ static char path_expanded[FILE_MAX];
+ @autoreleasepool {
+ const NSString *const str_with_tilde = [[NSString alloc] initWithCString:path_with_tilde
+ encoding:NSUTF8StringEncoding];
+ if (!str_with_tilde) {
+ return nullptr;
+ }
+ const NSString *const str_expanded = [str_with_tilde stringByExpandingTildeInPath];
+ [str_expanded getCString:path_expanded
+ maxLength:sizeof(path_expanded)
+ encoding:NSUTF8StringEncoding];
+ }
+ return path_expanded;
+}