summaryrefslogtreecommitdiffstats
path: root/java/jdk16/files/patch-j2se-bin-java_md.c
diff options
context:
space:
mode:
Diffstat (limited to 'java/jdk16/files/patch-j2se-bin-java_md.c')
-rw-r--r--java/jdk16/files/patch-j2se-bin-java_md.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/java/jdk16/files/patch-j2se-bin-java_md.c b/java/jdk16/files/patch-j2se-bin-java_md.c
new file mode 100644
index 0000000..f8305b5
--- /dev/null
+++ b/java/jdk16/files/patch-j2se-bin-java_md.c
@@ -0,0 +1,62 @@
+$FreeBSD$
+
+--- ../../j2se/src/solaris/bin/java_md.c 15 Feb 2005 02:06:26 -0000 1.6
++++ ../../j2se/src/solaris/bin/java_md.c 20 Apr 2005 12:08:02 -0000
+@@ -906,8 +904,7 @@
+ if (execname != NULL) /* Already determined */
+ return (execname);
+
+-/* XXXBSD: is it right for us ?*/
+-#if defined(__sun) || defined(__FreeBSD__)
++#if defined(__sun)
+ {
+ Dl_info dlinfo;
+ if (dladdr((void*)&SetExecname, &dlinfo)) {
+@@ -928,12 +925,47 @@
+ exec_path = strdup(buf);
+ }
+ }
++#elif defined(__FreeBSD__)
++ /* Try /proc/curproc/file if exec_path hasn't been found */
++
++ if (exec_path == NULL) {
++ const char* self = "/proc/curproc/file";
++ char buf[PATH_MAX+1];
++ int len = readlink(self, buf, PATH_MAX);
++ if (len >= 0) {
++ buf[len] = '\0'; /* readlink doesn't nul terminate */
++ exec_path = strdup(buf);
++ }
++ }
++
++ /*
++ * Try the dladdr(3) method FreeBSD if exec_path hasn't been found.
++ * Requires a recent version of FreeBSD.
++ */
++
++ /*
++ if (exec_path == NULL) {
++ Dl_info dlinfo;
++ if (dladdr((void*)&SetExecname, &dlinfo)) {
++ char *resolved = (char*)MemAlloc(PATH_MAX+1);
++ if (resolved != NULL) {
++ exec_path = realpath(dlinfo.dli_fname, resolved);
++ if (exec_path == NULL) {
++ free(resolved);
++ }
++ }
++ }
++ }
++ */
++
+ #else /* !__sun && !__linux */
+ {
+ /* Not implemented */
+ }
+ #endif
+
++ /* Fall back to examining argv[0] and our path */
++
+ if (exec_path == NULL) {
+ exec_path = FindExecName(argv[0]);
+ }
OpenPOWER on IntegriCloud