]> err.no Git - sope/blobdiff - sope-core/NGExtensions/FdExt.subproj/NSString+Escaping.m
rewrote a few things to use unicode methods
[sope] / sope-core / NGExtensions / FdExt.subproj / NSString+Escaping.m
index f73def38c7872b11bb0f8106997e0013cc2bb64f..e31957e487beca7e9bf225f58b16e4b8c913bece 100644 (file)
@@ -1,5 +1,6 @@
 /*
-  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