/* ****************************************************************************** * * Copyright (C) 2009, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** */ #include "unicode/utypes.h" #include "unicode/icudataver.h" #include "unicode/uversion.h" #include "unicode/ures.h" #include "uresimp.h" /* for ures_getVersionByKey */ #include "cmemory.h" /* * Determines if icustd is in the data. */ static UBool hasICUSTDBundle(); static UBool hasICUSTDBundle() { UErrorCode status = U_ZERO_ERROR; UBool result = TRUE; UResourceBundle *icustdbundle = ures_openDirect(NULL, U_ICU_STD_BUNDLE, &status); if (U_SUCCESS(status)) { result = TRUE; } else { result = FALSE; } ures_close(icustdbundle); return result; } U_CAPI void U_EXPORT2 u_getDataVersion(UVersionInfo dataVersionFillin, UErrorCode *status) { UResourceBundle *icudatares = NULL; if (U_FAILURE(*status)) { return; } if (dataVersionFillin != NULL) { icudatares = ures_openDirect(NULL, U_ICU_VERSION_BUNDLE , status); if (U_SUCCESS(*status)) { ures_getVersionByKey(icudatares, U_ICU_DATA_KEY, dataVersionFillin, status); } ures_close(icudatares); } } U_CAPI UBool U_EXPORT2 u_isDataOlder(UVersionInfo dataVersionFillin, UBool *isModifiedFillin, UErrorCode *status) { UBool result = TRUE; UVersionInfo dataVersion; UVersionInfo wiredVersion; if (U_FAILURE(*status)) { return result; } u_getDataVersion(dataVersion, status); if (U_SUCCESS(*status)) { u_versionFromString(wiredVersion, U_ICU_DATA_VERSION); if (uprv_memcmp(dataVersion, wiredVersion, sizeof(UVersionInfo)) >= 0) { result = FALSE; } if (dataVersionFillin != NULL) { uprv_memcpy(dataVersionFillin, dataVersion, sizeof(UVersionInfo)); } if (hasICUSTDBundle()) { *isModifiedFillin = FALSE; } else { *isModifiedFillin = TRUE; } } return result; }