fix error replacing strings in a string, and optimise literal strings a bit

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@34081 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-MacDonald 2011-10-28 14:25:17 +00:00
parent f6a225bfcc
commit 122d1d1b4e
3 changed files with 42 additions and 3 deletions

View file

@ -1,6 +1,14 @@
2011-10-28 Richard Frith-Macdonald <rfm@gnu.org>
* Source/NSString.m: Fix bug when widening mutable string in
replaceOccurrencesOfString:...range:
* Source/GSString.m: more efficient check to see if a literal string
can be converted to ascii or latin1
2011-10-28 Fred Kiefer <FredKiefer@gmx.de>
* Tests/base/NSMutableString/basic.m: Add test for replaceOccurrencesOfString:...range:
* Tests/base/NSMutableString/basic.m: Add test for
replaceOccurrencesOfString:...range:
2011-10-27 Richard Frith-Macdonald <rfm@gnu.org>

View file

@ -4996,6 +4996,30 @@ nextUTF8(const uint8_t *p, unsigned l, unsigned *o, unichar *n)
return 0;
}
- (BOOL) canBeConvertedToEncoding: (NSStringEncoding)encoding
{
if (NSASCIIStringEncoding == encoding)
{
BOOL ascii;
lengthUTF8((const uint8_t*)nxcsptr, nxcslen, &ascii, 0);
return ascii;
}
else if (NSISOLatin1StringEncoding == encoding)
{
BOOL latin1;
lengthUTF8((const uint8_t*)nxcsptr, nxcslen, 0, &latin1);
return latin1;
}
else
{
id d = [self dataUsingEncoding: encoding allowLossyConversion: NO];
return d != nil ? YES : NO;
}
}
- (NSData*) dataUsingEncoding: (NSStringEncoding)encoding
allowLossyConversion: (BOOL)flag
{

View file

@ -5524,8 +5524,15 @@ static NSFileManager *fm = nil;
searchRange.location = range.location + byLen;
searchRange.length = newEnd - searchRange.location;
}
range = (*func)(self, replace, opts, searchRange);
if (searchRange.length > 0)
{
/* We replaced something and now need to scan again.
* As we modified the receiver, we must refresh the
* method implementation for searching.
*/
func = GSPrivateRangeOfString(self, replace);
range = (*func)(self, replace, opts, searchRange);
}
}
while (range.length > 0);
}