celix_status_t versionRange_parse(char * rangeStr, version_range_pt *range) { celix_status_t status; if (strchr(rangeStr, ',') != NULL) { int vlowL = strcspn(rangeStr+1, ","); char * vlow = (char *) malloc(sizeof(char) * (vlowL + 1)); if (!vlow) { status = CELIX_ENOMEM; } else { int vhighL; char * vhigh; vlow = strncpy(vlow, rangeStr+1, vlowL); vlow[vlowL] = '\0'; vhighL = strlen(rangeStr+1) - vlowL - 2; vhigh = (char *) malloc(sizeof(char) * (vhighL+1)); if (!vhigh) { status = CELIX_ENOMEM; } else { version_pt versionLow = NULL; int rangeL = strlen(rangeStr); char start = rangeStr[0]; char end = rangeStr[rangeL-1]; vhigh = strncpy(vhigh, rangeStr+vlowL+2, vhighL); vhigh[vhighL] = '\0'; status = version_createVersionFromString(vlow, &versionLow); if (status == CELIX_SUCCESS) { version_pt versionHigh = NULL; status = version_createVersionFromString(vhigh, &versionHigh); if (status == CELIX_SUCCESS) { status = versionRange_createVersionRange( versionLow, start == '[', versionHigh, end ==']', range ); } } free(vhigh); } free(vlow); } } else { version_pt version = NULL; status = version_createVersionFromString(rangeStr, &version); if (status == CELIX_SUCCESS) { status = versionRange_createVersionRange(version, true, NULL, false, range); } } return status; }
static void checkInterfaceVersion(dyn_interface_type* dynIntf, const char* v) { int status; char *version = NULL; status = dynInterface_getVersionString(dynIntf, &version); CHECK_EQUAL(0, status); STRCMP_EQUAL(v, version); version_pt msgVersion = NULL, localMsgVersion = NULL; int cmpVersion = -1; version_createVersionFromString(version, &localMsgVersion); status = dynInterface_getVersion(dynIntf, &msgVersion); CHECK_EQUAL(0, status); version_compareTo(msgVersion, localMsgVersion, &cmpVersion); CHECK_EQUAL(cmpVersion, 0); version_destroy(localMsgVersion); }
celix_status_t deploymentPackage_processEntries(deployment_package_pt package) { celix_status_t status = CELIX_SUCCESS; hash_map_pt entries = NULL; manifest_getEntries(package->manifest, &entries); hash_map_iterator_pt iter = hashMapIterator_create(entries); while (hashMapIterator_hasNext(iter)) { hash_map_entry_pt entry = hashMapIterator_nextEntry(iter); char *name = hashMapEntry_getKey(entry); properties_pt values = hashMapEntry_getValue(entry); bool isBundleResource; deploymentPackage_isBundleResource(values, &isBundleResource); if (isBundleResource) { bundle_info_pt info = apr_palloc(package->pool, sizeof(*info)); info->path = name; info->attributes = values; info->symbolicName = properties_get(values, (char *) OSGI_FRAMEWORK_BUNDLE_SYMBOLICNAME); char *version = properties_get(values, (char *) OSGI_FRAMEWORK_BUNDLE_VERSION); info->version = NULL; status = version_createVersionFromString(version, &info->version); char *customizer = properties_get(values, (char *) DEPLOYMENTPACKAGE_CUSTOMIZER); deploymentPackage_parseBooleanHeader(customizer, &info->customizer); arrayList_add(package->bundleInfos, info); } else { resource_info_pt info = apr_palloc(package->pool, sizeof(*info)); info->path = name; info->attributes = values; info->resourceProcessor = properties_get(values, (char *) RESOURCE_PROCESSOR); arrayList_add(package->resourceInfos, info); } } hashMapIterator_destroy(iter); return status; }
celix_status_t deploymentPackage_getVersion(deployment_package_pt package, version_pt *version) { char *versionStr = manifest_getValue(package->manifest, "DeploymentPackage-Version"); return version_createVersionFromString(versionStr, version); }