[vlc-commits] src: darwin/dirs: Use NSBundle to get library directoriess
David Fuhrmann
git at videolan.org
Wed Mar 20 19:22:30 CET 2019
vlc | branch: master | David Fuhrmann <dfuhrmann at videolan.org> | Sun Mar 17 23:45:59 2019 +0100| [6eb00721ac2232c6fd08162e38e11dae4ce32d6d] | committer: David Fuhrmann
src: darwin/dirs: Use NSBundle to get library directoriess
This removes old code hardcoding multiple variants of binary names.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=6eb00721ac2232c6fd08162e38e11dae4ce32d6d
---
src/darwin/dirs.m | 55 ++++++++++++++++---------------------------------------
1 file changed, 16 insertions(+), 39 deletions(-)
diff --git a/src/darwin/dirs.m b/src/darwin/dirs.m
index 6c4c538f6e..907fc23fab 100644
--- a/src/darwin/dirs.m
+++ b/src/darwin/dirs.m
@@ -33,49 +33,26 @@
#include <libgen.h>
#include <dlfcn.h>
-#include <mach-o/dyld.h>
-#include <CoreFoundation/CoreFoundation.h>
+#include <Foundation/Foundation.h>
+
+static bool isBundle()
+{
+ NSBundle *bundle = [NSBundle mainBundle];
+ NSString *bundlePath = bundle.bundlePath;
+ return [bundlePath hasSuffix:@".app"] || [bundlePath hasSuffix:@".framework"];
+}
char *config_GetLibDir (void)
{
- /* Get the full program path and name */
- /* First try to see if we are linked to the framework */
- for (unsigned i = 0; i < _dyld_image_count(); i++)
- {
- const char *psz_img_name = _dyld_get_image_name(i);
- const char *p = strstr( psz_img_name, "VLCKit.framework/Versions/" );
-
- /* Check for "VLCKit.framework/Versions/Current/VLCKit",
- * as well as "VLCKit.framework/Versions/A/VLCKit" and
- * "VLC.framework/Versions/B/VLCKit" */
- if (p != NULL) {
- /* Look for the next forward slash */
- p += 26; /* p_char += strlen(" VLCKit.framework/Versions/" ) */
- p += strcspn( p, "/" );
-
- /* If the string ends with VLCKit then we've found a winner */
- if (!strcmp( p, "/VLCKit"))
- return strdup( dirname(psz_img_name) );
- }
-
- /* Do we end by "VLC"? If so we are the legacy VLC.app that doesn't
- * link to VLCKit. */
- size_t len = strlen(psz_img_name);
- if (len >= 3 && !strcmp( psz_img_name + len - 3, "VLC"))
- return strdup( dirname(psz_img_name) );
-
- /* Do we end by "VLC-Plugin"? oh, we must be the NPAPI plugin */
- if (len >= 10 && !strcmp( psz_img_name + len - 10, "VLC-Plugin"))
- return strdup( dirname(psz_img_name) );
-
- /* Do we end by "VLC for iOS"? so we are the iOS app */
- if (len >= 11 && !strcmp( psz_img_name + len - 11, "VLC for iOS"))
- return strdup( dirname(psz_img_name) );
-
- /* Do we end by "VLC-TV"? so we are the tvOS app */
- if (len >= 6 && !strcmp( psz_img_name + len - 6, "VLC-TV"))
- return strdup( dirname(psz_img_name) );
+ if (isBundle()) {
+ NSBundle *bundle = [NSBundle mainBundle];
+ NSString *path = bundle.executablePath;
+ if (!path)
+ return NULL;
+
+ path = [path stringByDeletingLastPathComponent];
+ return strdup(path.UTF8String);
}
/* we are not part of any Mac-style package but were installed
More information about the vlc-commits
mailing list