1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
--- openjdk/jdk/src/solaris/bin/java_md.c.orig
+++ openjdk/jdk/src/solaris/bin/java_md.c
@@ -688,8 +688,19 @@
char buf[PATH_MAX+1];
int len = readlink(self, buf, PATH_MAX);
if (len >= 0) {
+ const char* prefixes[] = {"/cow/", "/persistmnt/", "/rofs/", "/rwfs/", "/squashmnt/", NULL};
+ const char **prefix;
+ size_t prefix_len = 0;
buf[len] = '\0'; /* readlink doesn't nul terminate */
- exec_path = JLI_StringDup(buf);
+ for (prefix = prefixes; *prefix; prefix++) {
+ prefix_len = strlen(buf) < strlen(*prefix) ? strlen(buf) : strlen(*prefix);
+ if (!strncmp(*prefix, buf, prefix_len)) {
+ prefix_len--;
+ break;
+ }
+ prefix_len = 0;
+ }
+ exec_path = JLI_StringDup(buf + prefix_len);
}
}
#else /* !__solaris__ && !__linux */
--- openjdk/hotspot/src/os/posix/launcher/java_md.c.orig
+++ openjdk/hotspot/src/os/posix/launcher/java_md.c
@@ -967,8 +967,19 @@
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 = JLI_StringDup(buf);
+ buf[len] = '\0'; /* readlink doesn't nul terminate */
+ const char* prefixes[] = {"/cow/", "/persistmnt/", "/rofs/", "/rwfs/", "/squashmnt/", NULL};
+ const char **prefix;
+ size_t prefix_len = 0;
+ for (prefix = prefixes; *prefix; prefix++) {
+ prefix_len = strlen(buf) < strlen(*prefix) ? strlen(buf) : strlen(*prefix);
+ if (!strncmp(*prefix, buf, prefix_len)) {
+ prefix_len--;
+ break;
+ }
+ prefix_len = 0;
+ }
+ exec_path = JLI_StringDup(buf + prefix_len);
}
}
#else /* !__sun && !__linux */
|