< prev index next >
src/hotspot/os/bsd/os_bsd.cpp
Print this page
rev 57040 : 8234741: enhance os::get_core_path on macOS
*** 3760,3774 ****
return status;
}
}
}
! // Get the default path to the core file
// Returns the length of the string
int os::get_core_path(char* buffer, size_t bufferSize) {
! int n = jio_snprintf(buffer, bufferSize, "/cores/core.%d", current_process_id());
// Truncate if theoretical string was longer than bufferSize
n = MIN2(n, (int)bufferSize);
return n;
}
--- 3760,3793 ----
return status;
}
}
}
! // Get the kern.corefile setting, or otherwise the default path to the core file
// Returns the length of the string
int os::get_core_path(char* buffer, size_t bufferSize) {
! int n = 0;
! #ifdef __APPLE__
! char coreinfo[MAX_PATH];
! size_t sz = sizeof(coreinfo);
! int ret = sysctlbyname("kern.corefile", coreinfo, &sz, NULL, 0);
! if (ret == 0) {
! char *pid_pos = strstr(coreinfo, "%P");
! // skip over the "%P" to preserve any optional custom user pattern
! const char* tail = (pid_pos != NULL) ? (pid_pos + 2) : "";
+ if (pid_pos != NULL) {
+ *pid_pos = '\0';
+ n = jio_snprintf(buffer, bufferSize, "%s%d%s", coreinfo, os::current_process_id(), tail);
+ } else {
+ n = jio_snprintf(buffer, bufferSize, "%s", coreinfo);
+ }
+ } else
+ #endif
+ {
+ n = jio_snprintf(buffer, bufferSize, "/cores/core.%d", current_process_id());
+ }
// Truncate if theoretical string was longer than bufferSize
n = MIN2(n, (int)bufferSize);
return n;
}
< prev index next >