Skip to content

Commit

Permalink
8257620: Do not use objc_msgSend_stret to get macOS version
Browse files Browse the repository at this point in the history
Reviewed-by: akozlov, phh, omikhaltcova
Backport-of: d4c7db5060978302382549246f9ad6831f19377d
  • Loading branch information
Ben Taylor authored and Paul Hohensee committed Dec 5, 2022
1 parent 72269ee commit 2abc206
Showing 1 changed file with 8 additions and 4 deletions.
12 changes: 8 additions & 4 deletions jdk/src/solaris/native/java/lang/java_props_macosx.c
Expand Up @@ -186,11 +186,15 @@ void setOSNameAndVersion(java_props_t *sprops) {
NSString *nsVerStr = NULL;
char* osVersionCStr = NULL;
// Mac OS 10.9 includes the [NSProcessInfo operatingSystemVersion] function,
// but it's not in the 10.9 SDK. So, call it via objc_msgSend_stret.
// but it's not in the 10.9 SDK. So, call it via NSInvocation.
if ([[NSProcessInfo processInfo] respondsToSelector:@selector(operatingSystemVersion)]) {
OSVerStruct (*procInfoFn)(id rec, SEL sel) = (OSVerStruct(*)(id, SEL))objc_msgSend_stret;
OSVerStruct osVer = procInfoFn([NSProcessInfo processInfo],
@selector(operatingSystemVersion));
OSVerStruct osVer;
NSMethodSignature *sig = [[NSProcessInfo processInfo] methodSignatureForSelector:
@selector(operatingSystemVersion)];
NSInvocation *invoke = [NSInvocation invocationWithMethodSignature:sig];
invoke.selector = @selector(operatingSystemVersion);
[invoke invokeWithTarget:[NSProcessInfo processInfo]];
[invoke getReturnValue:&osVer];

// Copy out the char* if running on version other than 10.16 Mac OS (10.16 == 11.x)
// or explicitly requesting version compatibility
Expand Down

1 comment on commit 2abc206

@openjdk-notifier
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.