@@ -888,16 +888,18 @@ return !memcmp(s->cString + (s->cStringLength - cStringLength), [suffix UTF8String], cStringLength); } - (OFArray*)componentsSeparatedByString: (OFString*)delimiter + skipEmpty: (BOOL)skipEmpty { OFAutoreleasePool *pool; OFMutableArray *array; const char *cString = [delimiter UTF8String]; size_t cStringLength = [delimiter UTF8StringLength]; size_t i, last; + OFString *component; array = [OFMutableArray array]; pool = [[OFAutoreleasePool alloc] init]; if (cStringLength > s->cStringLength) { @@ -909,17 +911,21 @@ for (i = 0, last = 0; i <= s->cStringLength - cStringLength; i++) { if (memcmp(s->cString + i, cString, cStringLength)) continue; - [array addObject: - [OFString stringWithUTF8String: s->cString + last - length: i - last]]; + component = [OFString stringWithUTF8String: s->cString + last + length: i - last]; + if (!skipEmpty || ![component isEqual: @""]) + [array addObject: component]; + i += cStringLength - 1; last = i + 1; } - [array addObject: [OFString stringWithUTF8String: s->cString + last]]; + component = [OFString stringWithUTF8String: s->cString + last]; + if (!skipEmpty || ![component isEqual: @""]) + [array addObject: component]; [array makeImmutable]; [pool release];