vn-verdnaturachat/ios/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOSlice.m

94 lines
2.6 KiB
Objective-C

// Copyright 2019 Google
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#import "FIRCLSMachOSlice.h"
#include <mach-o/loader.h>
// this is defined only if __OPEN_SOURCE__ is *not* defined in the TVOS SDK's mach-o/loader.h
// also, it has not yet made it back to the OSX SDKs, for example
#ifndef LC_VERSION_MIN_TVOS
#define LC_VERSION_MIN_TVOS 0x2F
#endif
@implementation FIRCLSMachOSlice
+ (id)runningSlice {
struct FIRCLSMachOSlice slice;
slice = FIRCLSMachOSliceGetCurrent();
return [[self alloc] initWithSlice:&slice];
}
@synthesize minimumOSVersion = _minimumOSVersion;
@synthesize linkedSDKVersion = _linkedSDKVersion;
- (id)initWithSlice:(FIRCLSMachOSliceRef)sliceRef {
self = [super init];
if (self) {
NSMutableArray* dylibs;
_slice = *sliceRef;
_minimumOSVersion.major = 0;
_minimumOSVersion.minor = 0;
_minimumOSVersion.bugfix = 0;
_linkedSDKVersion.major = 0;
_linkedSDKVersion.minor = 0;
_linkedSDKVersion.bugfix = 0;
dylibs = [NSMutableArray array];
FIRCLSMachOSliceEnumerateLoadCommands(
&_slice, ^(uint32_t type, uint32_t size, const struct load_command* cmd) {
switch (type) {
case LC_UUID:
self->_uuidString =
[FIRCLSMachONormalizeUUID((CFUUIDBytes*)FIRCLSMachOGetUUID(cmd)) copy];
break;
case LC_LOAD_DYLIB:
[dylibs addObject:[NSString stringWithUTF8String:FIRCLSMachOGetDylibPath(cmd)]];
break;
case LC_VERSION_MIN_IPHONEOS:
case LC_VERSION_MIN_MACOSX:
case LC_VERSION_MIN_WATCHOS:
case LC_VERSION_MIN_TVOS:
self->_minimumOSVersion = FIRCLSMachOGetMinimumOSVersion(cmd);
self->_linkedSDKVersion = FIRCLSMachOGetLinkedSDKVersion(cmd);
break;
}
});
_linkedDylibs = [dylibs copy];
}
return self;
}
- (NSString*)architectureName {
return [NSString stringWithUTF8String:FIRCLSMachOSliceGetArchitectureName(&_slice)];
}
- (NSString*)uuid {
return _uuidString;
}
- (NSArray*)linkedDylibs {
return _linkedDylibs;
}
@end