mirror of
https://github.com/ivabus/pantry
synced 2024-11-10 18:45:19 +03:00
56 lines
1.3 KiB
Diff
56 lines
1.3 KiB
Diff
|
diff --git a/src/file.h b/src/file.h
|
||
|
index 85675df..8d0f058 100644
|
||
|
--- a/src/file.h
|
||
|
+++ b/src/file.h
|
||
|
@@ -95,9 +95,10 @@
|
||
|
|
||
|
#define ENABLE_CONDITIONALS
|
||
|
|
||
|
-#ifndef MAGIC
|
||
|
-#define MAGIC "/etc/magic"
|
||
|
-#endif
|
||
|
+const char *tea_get_lib_dir(void);
|
||
|
+
|
||
|
+#undef MAGIC
|
||
|
+#define MAGIC tea_get_lib_dir()
|
||
|
|
||
|
#if defined(__EMX__) || defined (WIN32)
|
||
|
#define PATHSEP ';'
|
||
|
diff --git a/src/magic.c b/src/magic.c
|
||
|
index 7768497..84e8ba7 100644
|
||
|
--- a/src/magic.c
|
||
|
+++ b/src/magic.c
|
||
|
@@ -257,7 +257,7 @@ magic_getpath(const char *magicfile, int action)
|
||
|
return magicfile;
|
||
|
|
||
|
magicfile = getenv("MAGIC");
|
||
|
- if (magicfile != NULL)
|
||
|
+ if (magicfile != NULL && magicfile[0] == '/')
|
||
|
return magicfile;
|
||
|
|
||
|
return action == FILE_LOAD ? get_default_magic() : MAGIC;
|
||
|
@@ -678,3 +678,23 @@ magic_getparam(struct magic_set *ms, int param, void *val)
|
||
|
return -1;
|
||
|
}
|
||
|
}
|
||
|
+
|
||
|
+
|
||
|
+#include <libgen.h>
|
||
|
+
|
||
|
+/// returns the library dir of our relocatable installation
|
||
|
+protected const char *tea_get_lib_dir(void) {
|
||
|
+ char path[MAXPATHLEN + 1] = {0};
|
||
|
+ uint32_t len = sizeof(path) - 1;
|
||
|
+#if __APPLE__
|
||
|
+ int rv = _NSGetExecutablePath(path, &len);
|
||
|
+#else
|
||
|
+ int rv = readlink("/proc/self/exe", path, len - 1);
|
||
|
+#endif
|
||
|
+ if (rv != -1) {
|
||
|
+ sprintf(path, "%s/%s", dirname(dirname(path)), "share/misc/magic");
|
||
|
+ return strdup(path) ?: "/etc/magic";
|
||
|
+ } else {
|
||
|
+ return "/etc/magic";
|
||
|
+ }
|
||
|
+}
|