diff --git a/ChangeLog b/ChangeLog index 05319c3d7..bc276839d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2011-07-11 Wolfgang Sourdeau + + * OpenChange/NSObject+MAPIStore.m (-tallocWrapper:): new method + enabling the wrapping of obj-c objects into talloc structures, in + order to ease memory management. + 2011-07-08 Francis Lachapelle * UI/MailerUI/UIxMailListActions.m (-getUIDsAndHeadersInFolder) diff --git a/OpenChange/NSObject+MAPIStore.h b/OpenChange/NSObject+MAPIStore.h index 48345e2ae..a2e12e4e6 100644 --- a/OpenChange/NSObject+MAPIStore.h +++ b/OpenChange/NSObject+MAPIStore.h @@ -27,6 +27,17 @@ #include +struct MAPIStoreTallocWrapper +{ + id MAPIStoreSOGoObject; +}; + +@interface NSObject (MAPIStoreTallocHelpers) + +- (struct MAPIStoreTallocWrapper *) tallocWrapper: (TALLOC_CTX *) tallocCtx; + +@end + @interface NSObject (MAPIStoreDataTypes) - (enum MAPISTATUS) getMAPIValue: (void **) data diff --git a/OpenChange/NSObject+MAPIStore.m b/OpenChange/NSObject+MAPIStore.m index a23d3c080..0f833b8cf 100644 --- a/OpenChange/NSObject+MAPIStore.m +++ b/OpenChange/NSObject+MAPIStore.m @@ -32,6 +32,32 @@ #undef DEBUG #include +@implementation NSObject (MAPIStoreTallocHelpers) + +static int MAPIStoreTallocWrapperDestroy (void *data) +{ + id wrappedObject; + + wrappedObject = data; + [wrappedObject release]; + + return 0; +} + +- (struct MAPIStoreTallocWrapper *) tallocWrapper: (TALLOC_CTX *) tallocCtx +{ + struct MAPIStoreTallocWrapper *wrapper; + + wrapper = talloc_zero (tallocCtx, struct MAPIStoreTallocWrapper); + wrapper->MAPIStoreSOGoObject = self; + talloc_set_destructor ((void *) wrapper, MAPIStoreTallocWrapperDestroy); + [self retain]; + + return wrapper; +} + +@end + @implementation NSObject (MAPIStoreDataTypes) - (enum MAPISTATUS) getMAPIValue: (void **) data