Skip to content

Instantly share code, notes, and snippets.

@ivanenok
Created February 8, 2016 22:15
Show Gist options
  • Save ivanenok/308214b1c8d2d6be003c to your computer and use it in GitHub Desktop.
Save ivanenok/308214b1c8d2d6be003c to your computer and use it in GitHub Desktop.
История следующая.
При установке 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