mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-23 00:41:02 +00:00
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:
parent
f6a225bfcc
commit
122d1d1b4e
3 changed files with 42 additions and 3 deletions
10
ChangeLog
10
ChangeLog
|
@ -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>
|
||||
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue