mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-31 00:30:53 +00:00
leak fix
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@32063 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
8b5dd696e4
commit
9ae02406b8
3 changed files with 33 additions and 19 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
2011-02-11 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
||||||
|
* Source/GSICUString.m:
|
||||||
|
Fix leak spotted by static analyser.
|
||||||
|
|
||||||
2011-02-11 12:06 David Chisnall <theraven@gna.org>
|
2011-02-11 12:06 David Chisnall <theraven@gna.org>
|
||||||
|
|
||||||
* libs/base/trunk/Source/GSPrivate.h: Added exception-safe version
|
* libs/base/trunk/Source/GSPrivate.h: Added exception-safe version
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
* contents directly.
|
* contents directly.
|
||||||
*/
|
*/
|
||||||
UText* UTextInitWithNSString(UText *txt, NSString *str);
|
UText* UTextInitWithNSString(UText *txt, NSString *str);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialises a UText structure with an NSMutableString. If txt is NULL, then
|
* Initialises a UText structure with an NSMutableString. If txt is NULL, then
|
||||||
* this allocates a new structure on the heap, otherwise it fills in the
|
* this allocates a new structure on the heap, otherwise it fills in the
|
||||||
|
@ -23,6 +24,7 @@ UText* UTextInitWithNSString(UText *txt, NSString *str);
|
||||||
* reflected in the underlying NSMutableString.
|
* reflected in the underlying NSMutableString.
|
||||||
*/
|
*/
|
||||||
UText* UTextInitWithNSMutableString(UText *txt, NSMutableString *str);
|
UText* UTextInitWithNSMutableString(UText *txt, NSMutableString *str);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GSUTextString is an NSString subclass that is backed by a libicu UText
|
* GSUTextString is an NSString subclass that is backed by a libicu UText
|
||||||
* structure. This class is intended to be used when returning UText created
|
* structure. This class is intended to be used when returning UText created
|
||||||
|
@ -30,9 +32,9 @@ UText* UTextInitWithNSMutableString(UText *txt, NSMutableString *str);
|
||||||
*/
|
*/
|
||||||
@interface GSUTextString : NSString
|
@interface GSUTextString : NSString
|
||||||
{
|
{
|
||||||
@public
|
@public
|
||||||
/** The UText structure containing the libicu string interface. */
|
/** The UText structure containing the libicu string interface. */
|
||||||
UText txt;
|
UText txt;
|
||||||
}
|
}
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@ -43,9 +45,9 @@ UText* UTextInitWithNSMutableString(UText *txt, NSMutableString *str);
|
||||||
*/
|
*/
|
||||||
@interface GSUTextMutableString : NSMutableString
|
@interface GSUTextMutableString : NSMutableString
|
||||||
{
|
{
|
||||||
@public
|
@public
|
||||||
/** The UText structure containing the libicu string interface. */
|
/** The UText structure containing the libicu string interface. */
|
||||||
UText txt;
|
UText txt;
|
||||||
}
|
}
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@ -54,10 +56,10 @@ UText* UTextInitWithNSMutableString(UText *txt, NSMutableString *str);
|
||||||
*/
|
*/
|
||||||
static inline void free_string(unichar **buf)
|
static inline void free_string(unichar **buf)
|
||||||
{
|
{
|
||||||
if (0 != *buf)
|
if (0 != *buf)
|
||||||
{
|
{
|
||||||
free(*buf);
|
free(*buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -68,12 +70,12 @@ static inline void free_string(unichar **buf)
|
||||||
* Buffers created in this way are exception safe when using native exceptions.
|
* Buffers created in this way are exception safe when using native exceptions.
|
||||||
*/
|
*/
|
||||||
#define TEMP_BUFFER(name, size)\
|
#define TEMP_BUFFER(name, size)\
|
||||||
__attribute__((cleanup(free_string))) unichar *name ##_onheap = 0;\
|
__attribute__((cleanup(free_string))) unichar *name ##_onheap = 0;\
|
||||||
unichar name ## _onstack[64 / sizeof(unichar)];\
|
unichar name ## _onstack[64 / sizeof(unichar)];\
|
||||||
unichar *name = name ## _onstack;\
|
unichar *name = name ## _onstack;\
|
||||||
if (size > 64)\
|
if (size > 64)\
|
||||||
{\
|
{\
|
||||||
name ## _onheap = malloc(size);\
|
name ## _onheap = malloc(size);\
|
||||||
name = name ## _onheap;\
|
name = name ## _onheap;\
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -263,12 +263,19 @@ UTextNSMutableStringClone(UText *dest,
|
||||||
UErrorCode *status)
|
UErrorCode *status)
|
||||||
{
|
{
|
||||||
NSMutableString *str = (NSMutableString*)src->p;
|
NSMutableString *str = (NSMutableString*)src->p;
|
||||||
|
UText *txt;
|
||||||
|
|
||||||
if (deep)
|
if (deep)
|
||||||
{
|
{
|
||||||
str = [str mutableCopy];
|
str = [str mutableCopy];
|
||||||
|
txt = UTextInitWithNSMutableString(dest, str);
|
||||||
|
[str release];
|
||||||
}
|
}
|
||||||
return UTextInitWithNSMutableString(dest, str);
|
else
|
||||||
|
{
|
||||||
|
txt = UTextInitWithNSMutableString(dest, str);
|
||||||
|
}
|
||||||
|
return txt;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue