mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-23 17:10:48 +00:00
Fix resource leaks (failure to close) on error.
This commit is contained in:
parent
61709e6101
commit
be173ab404
1 changed files with 20 additions and 10 deletions
|
@ -1014,21 +1014,29 @@ static NSRecursiveLock *classLock = nil;
|
|||
NSCharacterSet *result;
|
||||
NSMutableCharacterSet *mSet;
|
||||
|
||||
mSet = [[NSMutableCharacterSet alloc] init];
|
||||
if (mSet == nil)
|
||||
return nil;
|
||||
|
||||
cLocaleId = [_localeId UTF8String];
|
||||
localeData = ulocdata_open (cLocaleId, &err);
|
||||
localeData = ulocdata_open(cLocaleId, &err);
|
||||
if (U_FAILURE(err))
|
||||
return nil;
|
||||
{
|
||||
return nil;
|
||||
}
|
||||
|
||||
charSet = ulocdata_getExemplarSet (localeData, NULL,
|
||||
charSet = ulocdata_getExemplarSet(localeData, NULL,
|
||||
USET_ADD_CASE_MAPPINGS, ULOCDATA_ES_STANDARD, &err);
|
||||
if (U_FAILURE(err))
|
||||
return nil;
|
||||
{
|
||||
ulocdata_close(localeData);
|
||||
return nil;
|
||||
}
|
||||
ulocdata_close(localeData);
|
||||
|
||||
mSet = [[NSMutableCharacterSet alloc] init];
|
||||
if (mSet == nil)
|
||||
{
|
||||
uset_close(charSet);
|
||||
return nil;
|
||||
}
|
||||
|
||||
count = uset_getItemCount(charSet);
|
||||
for (idx = 0 ; idx < count ; ++idx)
|
||||
{
|
||||
|
@ -1036,9 +1044,10 @@ static NSRecursiveLock *classLock = nil;
|
|||
int strLen;
|
||||
|
||||
err = U_ZERO_ERROR;
|
||||
strLen = uset_getItem (charSet, idx, &start, &end, buffer, 1024, &err);
|
||||
strLen = uset_getItem(charSet, idx, &start, &end, buffer, 1024, &err);
|
||||
if (U_FAILURE(err))
|
||||
{
|
||||
uset_close(charSet);
|
||||
RELEASE(mSet);
|
||||
return nil;
|
||||
}
|
||||
|
@ -1055,10 +1064,11 @@ static NSRecursiveLock *classLock = nil;
|
|||
// FIXME: The icu docs are a bit iffy and don't explain what len == 1
|
||||
// means. So, if it is encountered, we simply skip it.
|
||||
}
|
||||
uset_close (charSet);
|
||||
uset_close(charSet);
|
||||
|
||||
result = [mSet copyWithZone: NULL];
|
||||
RELEASE(mSet);
|
||||
|
||||
return AUTORELEASE(result);
|
||||
#else
|
||||
return nil;
|
||||
|
|
Loading…
Reference in a new issue