+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
/*
********************************************************************************
-* Copyright (C) 2005-2006, International Business Machines
+* Copyright (C) 2005-2016, International Business Machines
* Corporation and others. All Rights Reserved.
********************************************************************************
*
#include "unicode/utypes.h"
-#ifdef U_WINDOWS
+#if U_PLATFORM_HAS_WIN32_API
#if !UCONFIG_NO_FORMATTING
+#include "cmemory.h"
#include "winutil.h"
#include "locmap.h"
+#include "unicode/uloc.h"
# define WIN32_LEAN_AND_MEAN
# define VC_EXTRALEAN
# define NOMCX
# include <windows.h>
# include <stdio.h>
+# include <string.h>
static Win32Utilities::LCIDRecord *lcidRecords = NULL;
static int32_t lcidCount = 0;
static int32_t lcidMax = 0;
+// TODO: Note that this test will skip locale names and only hit locales with assigned LCIDs
BOOL CALLBACK EnumLocalesProc(LPSTR lpLocaleString)
{
+ char localeID[ULOC_FULLNAME_CAPACITY];
+ int32_t localeIDLen;
UErrorCode status = U_ZERO_ERROR;
if (lcidCount >= lcidMax) {
sscanf(lpLocaleString, "%8x", &lcidRecords[lcidCount].lcid);
- lcidRecords[lcidCount].localeID = uprv_convertToPosix(lcidRecords[lcidCount].lcid, &status);
+ localeIDLen = uprv_convertToPosix(lcidRecords[lcidCount].lcid, localeID, UPRV_LENGTHOF(localeID), &status);
+ if (U_SUCCESS(status)) {
+ lcidRecords[lcidCount].localeID = new char[localeIDLen + 1];
+ memcpy(lcidRecords[lcidCount].localeID, localeID, localeIDLen);
+ lcidRecords[lcidCount].localeID[localeIDLen] = 0;
+ } else {
+ lcidRecords[lcidCount].localeID = NULL;
+ }
lcidCount += 1;
return TRUE;
}
+// TODO: Note that this test will skip locale names and only hit locales with assigned LCIDs
Win32Utilities::LCIDRecord *Win32Utilities::getLocales(int32_t &localeCount)
{
LCIDRecord *result;
void Win32Utilities::freeLocales(LCIDRecord *records)
{
+ for (int i = 0; i < lcidCount; i++) {
+ delete lcidRecords[i].localeID;
+ }
delete[] records;
}
#endif /* #if !UCONFIG_NO_FORMATTING */
-#endif /* #ifdef U_WINDOWS */
+#endif /* U_PLATFORM_HAS_WIN32_API */