/*
- Copyright (C) 2000-2005 SKYRIX Software AG
+ Copyright (C) 2000-2008 SKYRIX Software AG
+ Copyright (C) 2008 Helge Hess
This file is part of SOPE.
- (NSString *)stringByApplyingCEscaping {
// Unicode!
- const char *cstr;
- char *buffer;
- register int pos = 0;
+ unichar *src;
+ unichar *buffer;
+ int pos = 0;
+ NSString *s;
- cstr = [self cString];
- buffer = malloc([self cStringLength] * 2 + 1);
+ if ((pos = [self length]) == 0)
+ return @"";
+
+ src = malloc(sizeof(unichar) * (pos + 2));
+ [self getCharacters:src];
+ src[pos] = 0; // zero-terminate
+
+ buffer = malloc(sizeof(unichar) * ((pos * 2) + 1));
- while (*cstr) {
- switch (*cstr) {
+ for (pos = 0; *src != 0; pos++, src++) {
+ switch (*src) {
case '\n':
buffer[pos] = '\\'; pos++;
buffer[pos] = 'n';
break;
default:
- buffer[pos] = *cstr;
+ buffer[pos] = *src;
break;
}
- cstr++;
- pos++;
}
buffer[pos] = '\0';
-#if NeXT_Foundation_LIBRARY || GNUSTEP_BASE_LIBRARY
- {
- NSString *s;
-
- s = buffer ? [NSString stringWithCString:buffer] : nil;
- if (buffer) free(buffer);
- return s;
- }
-#else
- return [NSString stringWithCStringNoCopy:buffer freeWhenDone:YES];
-#endif
+ s = [NSString stringWithCharacters:buffer length:pos];
+ free(buffer); buffer = NULL;
+ free(src); src = NULL;
+ return s;
}
- (NSString *)stringByEscapingCharactersFromSet:(NSCharacterSet *)_escSet