]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/tools/genrb/ustr.c
ICU-57163.0.1.tar.gz
[apple/icu.git] / icuSources / tools / genrb / ustr.c
index 2a35db0b5c7b222f972d3cd3c0b4e507ac9df996..0f4f67938b4b77521e5ef2c795ec50d145a51a06 100644 (file)
@@ -1,7 +1,7 @@
 /*
 *******************************************************************************
 *
-*   Copyright (C) 1998-2004, International Business Machines
+*   Copyright (C) 1998-2012, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 *
 *******************************************************************************
@@ -20,6 +20,7 @@
 #include "cstring.h"
 #include "unicode/ustring.h"
 #include "unicode/putil.h"
+#include "unicode/utf16.h"
 
 /* Protos */
 static void ustr_resize(struct UString *s, int32_t len, UErrorCode *status);
@@ -27,14 +28,14 @@ static void ustr_resize(struct UString *s, int32_t len, UErrorCode *status);
 /* Macros */
 #define ALLOCATION(minSize) (minSize < 0x80 ? 0x80 : (2 * minSize + 0x80) & ~(0x80 - 1))
 
-void
+U_CFUNC void
 ustr_init(struct UString *s)
 {
     s->fChars = 0;
     s->fLength = s->fCapacity = 0;
 }
 
-void
+U_CFUNC void
 ustr_initChars(struct UString *s, const char* source, int32_t length, UErrorCode *status)
 {
     int i = 0;
@@ -65,15 +66,17 @@ ustr_initChars(struct UString *s, const char* source, int32_t length, UErrorCode
     }
 }
 
-void
+U_CFUNC void
 ustr_deinit(struct UString *s)
 {
-    uprv_free(s->fChars);
-    s->fChars = 0;
-    s->fLength = s->fCapacity = 0;
+    if (s) {
+        uprv_free(s->fChars);
+        s->fChars = 0;
+        s->fLength = s->fCapacity = 0;
+    }
 }
 
-void
+U_CFUNC void
 ustr_cpy(struct UString *dst,
      const struct UString *src,
      UErrorCode *status)
@@ -89,12 +92,12 @@ ustr_cpy(struct UString *dst,
     if(src->fChars == NULL || dst->fChars == NULL){
         return;
     }
-    uprv_memcpy(dst->fChars, src->fChars, sizeof(UChar) * src->fLength);
+    u_memcpy(dst->fChars, src->fChars, src->fLength);
     dst->fLength = src->fLength;
     dst->fChars[dst->fLength] = 0x0000;
 }
 
-void
+U_CFUNC void
 ustr_setlen(struct UString *s,
         int32_t len,
         UErrorCode *status)
@@ -112,7 +115,7 @@ ustr_setlen(struct UString *s,
     s->fChars[len] = 0x0000;
 }
 
-void
+U_CFUNC void
 ustr_cat(struct UString *dst,
      const struct UString *src,
      UErrorCode *status)
@@ -120,7 +123,7 @@ ustr_cat(struct UString *dst,
     ustr_ncat(dst, src, src->fLength, status);
 }
 
-void
+U_CFUNC void
 ustr_ncat(struct UString *dst,
       const struct UString *src,
       int32_t n,
@@ -141,7 +144,7 @@ ustr_ncat(struct UString *dst,
     dst->fChars[dst->fLength] = 0x0000;
 }
 
-void
+U_CFUNC void
 ustr_ucat(struct UString *dst,
       UChar c,
       UErrorCode *status)
@@ -160,7 +163,7 @@ ustr_ucat(struct UString *dst,
     dst->fLength += 1;
     dst->fChars[dst->fLength] = 0x0000;
 }
-void 
+U_CFUNC void 
 ustr_u32cat(struct UString *dst, UChar32 c, UErrorCode *status){
     if(c > 0x10FFFF){
         *status = U_ILLEGAL_CHAR_FOUND;
@@ -173,7 +176,7 @@ ustr_u32cat(struct UString *dst, UChar32 c, UErrorCode *status){
         ustr_ucat(dst, (UChar) c, status);
     }
 }
-void
+U_CFUNC void
 ustr_uscat(struct UString *dst,
       const UChar* src,int len,
       UErrorCode *status)
@@ -206,7 +209,6 @@ ustr_resize(struct UString *s,
     s->fChars = (UChar*) uprv_realloc(s->fChars, sizeof(UChar) * (len + 1));
     if(s->fChars == 0) {
         *status = U_MEMORY_ALLOCATION_ERROR;
-        s->fChars = 0;
         s->fLength = s->fCapacity = 0;
         return;
     }