Skip to content

Commit

Permalink
Use consistent data type (#100)
Browse files Browse the repository at this point in the history
On iOS we need to run on both 32bit and 64 bit architectures, NSUInteger
differs depending on the architecture the device is running which causes issues when
interoping with the c# code.
  • Loading branch information
martin308 authored and kattrali committed Oct 8, 2018
1 parent 90f662f commit 19bc474
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 10 deletions.
26 changes: 18 additions & 8 deletions src/BugsnagUnity.mm
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
const char *bugsnag_getReleaseStage(const void *configuration);

void bugsnag_setNotifyReleaseStages(const void *configuration, const char *releaseStages[], int releaseStagesCount);
void bugsnag_getNotifyReleaseStages(const void *configuration, const void *managedConfiguration, void (*callback)(const void *instance, const char *releaseStages[], NSUInteger size));
void bugsnag_getNotifyReleaseStages(const void *configuration, const void *managedConfiguration, void (*callback)(const void *instance, const char *releaseStages[], int size));

void bugsnag_setAppVersion(const void *configuration, char *appVersion);
const char *bugsnag_getAppVersion(const void *configuration);
Expand All @@ -35,7 +35,7 @@

void *bugsnag_createBreadcrumbs(const void *configuration);
void bugsnag_addBreadcrumb(const void *breadcrumbs, char *name, char *type, char *metadata[], int metadataCount);
void bugsnag_retrieveBreadcrumbs(const void *breadcrumbs, const void *managedBreadcrumbs, void (*breadcrumb)(const void *instance, const char *name, const char *timestamp, const char *type, const char *keys[], NSUInteger keys_size, const char *values[], NSUInteger values_size));
void bugsnag_retrieveBreadcrumbs(const void *breadcrumbs, const void *managedBreadcrumbs, void (*breadcrumb)(const void *instance, const char *name, const char *timestamp, const char *type, const char *keys[], int keys_size, const char *values[], int values_size));

void bugsnag_retrieveAppData(const void *appData, void (*callback)(const void *instance, const char *key, const char *value));
void bugsnag_retrieveDeviceData(const void *deviceData, void (*callback)(const void *instance, const char *key, const char *value));
Expand Down Expand Up @@ -71,12 +71,17 @@ void bugsnag_setNotifyReleaseStages(const void *configuration, const char *relea
((__bridge BugsnagConfiguration *)configuration).notifyReleaseStages = ns_releaseStages;
}

void bugsnag_getNotifyReleaseStages(const void *configuration, const void *managedConfiguration, void (*callback)(const void *instance, const char *releaseStages[], NSUInteger size)) {
void bugsnag_getNotifyReleaseStages(const void *configuration, const void *managedConfiguration, void (*callback)(const void *instance, const char *releaseStages[], int size)) {
NSArray *releaseStages = ((__bridge BugsnagConfiguration *)configuration).notifyReleaseStages;
NSUInteger count = [releaseStages count];
int count = 0;

if ([releaseStages count] <= INT_MAX) {
count = (int)[releaseStages count];
}

const char **c_releaseStages = (const char **) malloc(sizeof(char *) * (count + 1));

for (NSUInteger i = 0; i < count; i++) {
for (int i = 0; i < count; i++) {
c_releaseStages[i] = [[releaseStages objectAtIndex: i] UTF8String];
}

Expand Down Expand Up @@ -167,7 +172,7 @@ void bugsnag_addBreadcrumb(const void *breadcrumbs, char *name, char *type, char
}];
}

void bugsnag_retrieveBreadcrumbs(const void *breadcrumbs, const void *managedBreadcrumbs, void (*breadcrumb)(const void *instance, const char *name, const char *timestamp, const char *type, const char *keys[], NSUInteger keys_size, const char *values[], NSUInteger values_size)) {
void bugsnag_retrieveBreadcrumbs(const void *breadcrumbs, const void *managedBreadcrumbs, void (*breadcrumb)(const void *instance, const char *name, const char *timestamp, const char *type, const char *keys[], int keys_size, const char *values[], int values_size)) {
NSArray *crumbs = [((__bridge BugsnagBreadcrumbs *) breadcrumbs) arrayValue];
[crumbs enumerateObjectsUsingBlock:^(id crumb, NSUInteger index, BOOL *stop){
const char *name = [[crumb valueForKey: @"name"] UTF8String];
Expand All @@ -179,11 +184,16 @@ void bugsnag_retrieveBreadcrumbs(const void *breadcrumbs, const void *managedBre
NSArray *keys = [metadata allKeys];
NSArray *values = [metadata allValues];

NSUInteger count = [keys count];
int count = 0;

if ([keys count] <= INT_MAX) {
count = (int)[keys count];
}

const char **c_keys = (const char **) malloc(sizeof(char *) * (count + 1));
const char **c_values = (const char **) malloc(sizeof(char *) * (count + 1));

for (NSUInteger i = 0; i < count; i++) {
for (int i = 0; i < count; i++) {
c_keys[i] = [[keys objectAtIndex: i] UTF8String];
c_values[i] = [[values objectAtIndex: i] UTF8String];
}
Expand Down
2 changes: 1 addition & 1 deletion src/BugsnagUnity/Native/Cocoa/Breadcrumbs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ public Breadcrumb[] Retrieve()
}

[MonoPInvokeCallback(typeof(NativeCode.BreadcrumbInformation))]
static void PopulateBreadcrumb(IntPtr instance, string name, string timestamp, string type, string[] keys, long keysSize, string[] values, long valuesSize)
static void PopulateBreadcrumb(IntPtr instance, string name, string timestamp, string type, string[] keys, int keysSize, string[] values, int valuesSize)
{
var handle = GCHandle.FromIntPtr(instance);
if (handle.Target is List<Breadcrumb> breadcrumbs)
Expand Down
2 changes: 1 addition & 1 deletion src/BugsnagUnity/Native/Cocoa/NativeCode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ partial class NativeCode
[DllImport(Import)]
internal static extern void bugsnag_addBreadcrumb(IntPtr breadcrumbs, string name, string type, string[] metadata, int metadataCount);

internal delegate void BreadcrumbInformation(IntPtr instance, string name, string timestamp, string type, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 5)]string[] keys, long keysSize, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 7)]string[] values, long valuesSize);
internal delegate void BreadcrumbInformation(IntPtr instance, string name, string timestamp, string type, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 5)]string[] keys, int keysSize, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 7)]string[] values, int valuesSize);

[DllImport(Import)]
internal static extern void bugsnag_retrieveBreadcrumbs(IntPtr breadcrumbs, IntPtr instance, BreadcrumbInformation visitor);
Expand Down

0 comments on commit 19bc474

Please sign in to comment.