celix_status_t bundleContext_getBundles(bundle_context_pt context, array_list_pt *bundles) { celix_status_t status = CELIX_SUCCESS; if (context == NULL || *bundles != NULL) { status = CELIX_ILLEGAL_ARGUMENT; } else { *bundles = framework_getBundles(context->framework); } framework_logIfError(logger, status, NULL, "Failed to get bundles"); return status; }
celix_status_t bundle_createModule(bundle_pt bundle, module_pt *module) { celix_status_t status = CELIX_SUCCESS; bundle_archive_pt archive = NULL; bundle_revision_pt revision = NULL; manifest_pt headerMap = NULL; status = CELIX_DO_IF(status, bundle_getArchive(bundle, &archive)); status = CELIX_DO_IF(status, bundleArchive_getCurrentRevision(archive, &revision)); status = CELIX_DO_IF(status, bundleRevision_getManifest(revision, &headerMap)); if (status == CELIX_SUCCESS) { long bundleId; status = bundleArchive_getId(bundle->archive, &bundleId); if (status == CELIX_SUCCESS) { int revision = 0; char moduleId[512]; char *mId; snprintf(moduleId, sizeof(moduleId), "%ld.%d", bundleId, revision); mId = strdup(moduleId); *module = module_create(headerMap, mId, bundle); free(mId); if (*module != NULL) { version_pt bundleVersion = module_getVersion(*module); char * symName = NULL; status = module_getSymbolicName(*module, &symName); if (status == CELIX_SUCCESS) { array_list_pt bundles = framework_getBundles(bundle->framework); unsigned int i; for (i = 0; i < arrayList_size(bundles); i++) { bundle_pt check = (bundle_pt) arrayList_get(bundles, i); long id; if (bundleArchive_getId(check->archive, &id) == CELIX_SUCCESS) { if (id != bundleId) { module_pt mod = NULL; char * sym = NULL; version_pt version; int cmp; status = bundle_getCurrentModule(check, &mod); status = module_getSymbolicName(mod, &sym); version = module_getVersion(mod); version_compareTo(bundleVersion, version, &cmp); if ((symName != NULL) && (sym != NULL) && !strcmp(symName, sym) && !cmp) { char *versionString = NULL; version_toString(version, &versionString); printf("Bundle symbolic name and version are not unique: %s:%s\n", sym, versionString); free(versionString); status = CELIX_BUNDLE_EXCEPTION; break; } } } } arrayList_destroy(bundles); } } } } framework_logIfError(bundle->framework->logger, status, NULL, "Failed to create module"); return status; }