diff options
Diffstat (limited to 'java/jdk16/files/patch-j2se-bin-java_md.c')
-rw-r--r-- | java/jdk16/files/patch-j2se-bin-java_md.c | 62 |
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]); + } |