]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/test/intltest/winutil.cpp
ICU-461.18.tar.gz
[apple/icu.git] / icuSources / test / intltest / winutil.cpp
index 1963221ea4e568c1ef2a5578d561b9b428f16a7b..760e9feea2b3b85efedeae080abca761d9952a8d 100644 (file)
@@ -1,6 +1,6 @@
 /*
 ********************************************************************************
-*   Copyright (C) 2005-2006, International Business Machines
+*   Copyright (C) 2005-2009, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 ********************************************************************************
 *
@@ -17,6 +17,7 @@
 
 #include "winutil.h"
 #include "locmap.h"
+#include "unicode/uloc.h"
 
 #   define WIN32_LEAN_AND_MEAN
 #   define VC_EXTRALEAN
@@ -26,6 +27,7 @@
 #   define NOMCX
 #   include <windows.h>
 #   include <stdio.h>
+#   include <string.h>
 
 static Win32Utilities::LCIDRecord *lcidRecords = NULL;
 static int32_t lcidCount  = 0;
@@ -33,6 +35,7 @@ static int32_t lcidMax = 0;
 
 BOOL CALLBACK EnumLocalesProc(LPSTR lpLocaleString)
 {
+    const char* localeID = NULL;
     UErrorCode status = U_ZERO_ERROR;
 
     if (lcidCount >= lcidMax) {
@@ -49,7 +52,11 @@ BOOL CALLBACK EnumLocalesProc(LPSTR lpLocaleString)
 
     sscanf(lpLocaleString, "%8x", &lcidRecords[lcidCount].lcid);
 
-    lcidRecords[lcidCount].localeID = uprv_convertToPosix(lcidRecords[lcidCount].lcid, &status);
+    localeID = uprv_convertToPosix(lcidRecords[lcidCount].lcid, &status);
+
+    lcidRecords[lcidCount].localeID = new char[strlen(localeID)];
+
+    strcpy(lcidRecords[lcidCount].localeID, localeID);
 
     lcidCount += 1;
 
@@ -73,6 +80,9 @@ Win32Utilities::LCIDRecord *Win32Utilities::getLocales(int32_t &localeCount)
 
 void Win32Utilities::freeLocales(LCIDRecord *records)
 {
+    for (int i = 0; i < lcidCount; i++) {
+        delete lcidRecords[i].localeID;
+    }
     delete[] records;
 }