Refactor icu_chain_create
authorAdam Dickmeiss <adam@indexdata.dk>
Tue, 15 Nov 2011 13:03:08 +0000 (14:03 +0100)
committerAdam Dickmeiss <adam@indexdata.dk>
Tue, 15 Nov 2011 13:03:08 +0000 (14:03 +0100)
And ensure proper clean up if UCollator can not be created.

src/icu_chain.c

index 7bf8109..edb8d98 100644 (file)
@@ -192,21 +192,17 @@ struct icu_chain_step *icu_chain_step_clone(struct icu_chain_step *old)
 struct icu_chain *icu_chain_create(const char *locale, int sort,
                                    UErrorCode *status)
 {
-    struct icu_chain *chain 
-        = (struct icu_chain *) xmalloc(sizeof(*chain));
+    struct icu_chain *chain;
+    UCollator *coll = ucol_open(locale, status);
 
-    *status = U_ZERO_ERROR;
+    if (U_FAILURE(*status))
+        return 0;
 
+    chain = (struct icu_chain *) xmalloc(sizeof(*chain));
     chain->iter = 0;
     chain->locale = xstrdup(locale);
-
     chain->sort = sort;
-
-    chain->coll = ucol_open(chain->locale, status);
-
-    if (U_FAILURE(*status))
-        return 0;
-
+    chain->coll = coll;
     chain->csteps = 0;
 
     return chain;