2 ******************************************************************************
4 * Copyright (C) 2009, International Business Machines
5 * Corporation and others. All Rights Reserved.
7 ******************************************************************************
10 #include "unicode/utypes.h"
11 #include "unicode/icudataver.h"
12 #include "unicode/uversion.h"
13 #include "unicode/ures.h"
14 #include "uresimp.h" /* for ures_getVersionByKey */
18 * Determines if icustd is in the data.
20 static UBool
hasICUSTDBundle();
22 static UBool
hasICUSTDBundle() {
23 UErrorCode status
= U_ZERO_ERROR
;
26 UResourceBundle
*icustdbundle
= ures_openDirect(NULL
, U_ICU_STD_BUNDLE
, &status
);
27 if (U_SUCCESS(status
)) {
33 ures_close(icustdbundle
);
38 U_CAPI
void U_EXPORT2
u_getDataVersion(UVersionInfo dataVersionFillin
, UErrorCode
*status
) {
39 UResourceBundle
*icudatares
= NULL
;
41 if (U_FAILURE(*status
)) {
45 if (dataVersionFillin
!= NULL
) {
46 icudatares
= ures_openDirect(NULL
, U_ICU_VERSION_BUNDLE
, status
);
47 if (U_SUCCESS(*status
)) {
48 ures_getVersionByKey(icudatares
, U_ICU_DATA_KEY
, dataVersionFillin
, status
);
50 ures_close(icudatares
);
54 U_CAPI UBool U_EXPORT2
u_isDataOlder(UVersionInfo dataVersionFillin
, UBool
*isModifiedFillin
, UErrorCode
*status
) {
56 UVersionInfo dataVersion
;
57 UVersionInfo wiredVersion
;
59 if (U_FAILURE(*status
)) {
63 u_getDataVersion(dataVersion
, status
);
64 if (U_SUCCESS(*status
)) {
65 u_versionFromString(wiredVersion
, U_ICU_DATA_VERSION
);
67 if (uprv_memcmp(dataVersion
, wiredVersion
, sizeof(UVersionInfo
)) >= 0) {
71 if (dataVersionFillin
!= NULL
) {
72 uprv_memcpy(dataVersionFillin
, dataVersion
, sizeof(UVersionInfo
));
75 if (hasICUSTDBundle()) {
76 *isModifiedFillin
= FALSE
;
78 *isModifiedFillin
= TRUE
;