CMPIStatus Adapter::enumInstanceNames( CMPIInstanceMI* mi, const CMPIContext* context, const CMPIResult* result, const CMPIObjectPath* cmpi_op) { TRACE; _context_tls.set((void*)context); Adapter* adapter = (Adapter*)mi->hdl; Auto_RMutex auto_lock(adapter->_lock); // Convert to CIMPLE reference: const Meta_Class* mc = adapter->_mc; Instance* cimple_ref = 0; CMPIrc rc = make_cimple_reference(mc, cmpi_op, cimple_ref); if (rc != CMPI_RC_OK) CMReturn(rc); Destroyer<Instance> cimple_ref_d(cimple_ref); // Nullify non-key properties (this is a reference). nullify_non_keys(cimple_ref); // Invoke provider: const char* ns = name_space(cmpi_op); enum_instance_names::Data data = { adapter->broker, result, ns, CMPI_RC_OK }; Enum_Instances_Status status = adapter->enum_instances(cimple_ref, enum_instance_names::_proc, &data); switch (status) { case ENUM_INSTANCES_OK: CMReturnDone(result); CMReturn(CMPI_RC_OK); case ENUM_INSTANCES_FAILED: CMReturn(CMPI_RC_ERR_FAILED); } // Unreachable! CMReturn(CMPI_RC_OK); }
CMPIStatus Adapter::enumInstances( CMPIInstanceMI* mi, const CMPIContext* context, const CMPIResult* result, const CMPIObjectPath* cmpi_op, const char** properties) { TRACE; _context_tls.set((void*)context); Adapter* adapter = (Adapter*)mi->hdl; Auto_RMutex auto_lock(adapter->_lock); // Convert to CIMPLE reference: const Meta_Class* mc = adapter->_mc; Instance* cimple_ref = 0; CMPIrc rc = make_cimple_reference(mc, cmpi_op, cimple_ref); Destroyer<Instance> cimple_ref_d(cimple_ref); if (rc != CMPI_RC_OK) CMReturn(rc); // Filter properties: if (properties) filter_properties(cimple_ref, properties); // Invoke provider: enum_instances::Data data = { adapter->broker, result, cmpi_op, properties, CMPI_RC_OK }; Enum_Instances_Status status = adapter->enum_instances(cimple_ref, enum_instances::_proc, &data); switch (status) { case ENUM_INSTANCES_OK: break; case ENUM_INSTANCES_FAILED: CMReturn(CMPI_RC_ERR_FAILED); } CMReturnDone(result); CMReturn(CMPI_RC_OK); }