Created
February 8, 2016 22:15
-
-
Save ivanenok/308214b1c8d2d6be003c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
История следующая. | |
При установке jdk из пакета, запиливается линка на jexec, использующаяся потом в альтернативных пасах, она же юзается для старта аппликух без явных путей к jvm. | |
Эта корнструкция не работает, как минимум в Ubuntu, потому как при старте аппликухи некорректно выковыриваентся путь к файлу исполняемому и как следствие к java, ибо он протаскивается через линки, а не реальный путь. | |
Вот с этим фиксом, все работает корректно, т.е. не надо юзать ./jexec дабы вытащить путь абослютный, а сначала пытается разрезолвить по линке, и это получается. | |
Самая замороченная для меня штука, чего делать с "int readed" если он -1, можно конечно пулять ошибку, но это в данном случае не совсем корректно, как мне кажется. | |
Вопчем реквестирую твоего мнения. | |
diff -r 38cd01bdfd45 src/java.base/unix/native/launcher/jexec.c | |
--- a/src/java.base/unix/native/launcher/jexec.c Thu Jan 28 09:43:08 2016 -0800 | |
+++ b/src/java.base/unix/native/launcher/jexec.c Tue Feb 09 00:04:43 2016 +0200 | |
@@ -275,7 +275,18 @@ | |
* <FOO>/jre/lib/<ISA>/jexec (for Solaris) | |
* <FOO>/lib/jexec (for Linux) | |
*/ | |
- if (realpath(path, buf) != NULL) { | |
+ | |
+ char resolved_path[PATH_MAX]; | |
+ | |
+#ifdef __linux__ | |
+ int readed = readlink("/proc/self/exe", resolved_path, PATH_MAX ); | |
+#endif | |
+ | |
+ if (strlen(resolved_path) == 0){ | |
+ strncpy(resolved_path, path, strlen(path)); | |
+ } | |
+ | |
+ if (realpath(resolved_path, buf) != NULL) { | |
int count = 0; | |
/* Pop off the filename, and then subdirectories for each level of |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment