/** Function oyConfigDomainList * @memberof oyConfigs_s * @brief Count and show the global oyConfigs_s suppliers * * @verbatim uint32_t count = 0, * rank_list = 0; char ** texts = 0, * temp = 0, ** attributes = 0, * device_class = 0; int i,j, attributes_n; // get all configuration filters oyConfigDomainList("//"OY_TYPE_STD"/config", &texts, &count,&rank_list ,0 ); for( i = 0; i < count; ++i ) { attributes_n = 0; // pick the filters name and remove the common config part temp = oyFilterRegistrationToText( texts[i], oyFILTER_REG_APPLICATION, malloc ); attributes = oyStringSplit_( temp, '.', &attributes_n, malloc ); free(temp); temp = malloc(1024); temp[0] = 0; for(j = 0; j < attributes_n; ++j) { if(strcmp(attributes[j], "config") == 0) continue; if(j && temp[0]) sprintf( &temp[strlen(temp)], "." ); sprintf( &temp[strlen(temp)], "%s", attributes[j]); } // The string in temp can be passed as the device_class argument to // oyDevicesGet() printf("%d: %s \"%s\"\n", i, texts[i], temp); oyStringListRelease_( &attributes, attributes_n, free ); free (device_class); free(temp); } @endverbatim * * @param[in] registration_pattern a optional filter * @param[out] list the list with full filter registrations * @param[out] count the list count * @param[out] rank_list the rank fitting to list * @param[in] allocateFunc the user allocator for list * @return 0 - good, >= 1 - error, <= -1 unknown * * @version Oyranos: 0.1.10 * @since 2009/01/19 (Oyranos: 0.1.10) * @date 2009/01/19 */ OYAPI int OYEXPORT oyConfigDomainList ( const char * registration_pattern, char *** list, uint32_t * count, uint32_t ** rank_list, oyAlloc_f allocateFunc ) { oyCMMapiFilters_s * apis = 0; oyCMMapiFilter_s_ * api = 0; int error = !list || !count; char ** reg_lists = 0; int i = 0, reg_list_n = 0; uint32_t apis_n = 0; oyExportStart_(EXPORT_CHECK_NO); if(error <= 0) { apis = oyCMMsGetFilterApis_( 0, registration_pattern, oyOBJECT_CMM_API8_S, rank_list, &apis_n); error = !apis; } if(error <= 0) { if(!allocateFunc) allocateFunc = oyAllocateFunc_; for(i = 0; i < apis_n; ++i) { api = (oyCMMapiFilter_s_*)oyCMMapiFilters_Get( apis, i ); oyStringListAddStaticString_( ®_lists, ®_list_n, oyNoEmptyString_m_( api->registration ), oyAllocateFunc_, oyDeAllocateFunc_ ); if(api->release) api->release( (oyStruct_s**)&api ); } if(reg_list_n && reg_lists) *list = oyStringListAppend_( (const char**)reg_lists, reg_list_n, 0,0, ®_list_n, allocateFunc ); oyStringListRelease_( ®_lists, reg_list_n, oyDeAllocateFunc_ ); } if(count) *count = reg_list_n; oyCMMapiFilters_Release( &apis ); oyExportEnd_(); return error; }
char * oyFilterNode_GetFallback_( oyFilterNode_s_ * node, int select_core ) { char * fallback = NULL; oyCMMapiFilters_s * apis; int apis_n = 0, i; oyCMMapi9_s_ * cmm_api9_ = 0; char * class_name, * api_reg; oyFilterCore_s_ * core_ = node->core; const char * pattern = core_->registration_; class_name = oyFilterRegistrationToText( pattern, oyFILTER_REG_APPLICATION,0); api_reg = oyStringCopy_("///", oyAllocateFunc_ ); STRING_ADD( api_reg, class_name ); oyFree_m_( class_name ); apis = oyCMMsGetFilterApis_( api_reg, oyOBJECT_CMM_API9_S, oyFILTER_REG_MODE_STRIP_IMPLEMENTATION_ATTR, 0,0 ); oyFree_m_( api_reg ); apis_n = oyCMMapiFilters_Count( apis ); for(i = 0; i < apis_n; ++i) { cmm_api9_ = (oyCMMapi9_s_*) oyCMMapiFilters_Get( apis, i ); if(oyFilterRegistrationMatch( cmm_api9_->pattern, pattern, 0 )) { if(cmm_api9_->oyCMMGetFallback) fallback = cmm_api9_->oyCMMGetFallback( (oyFilterNode_s*)node, 0, select_core, oyAllocateFunc_ ); if(!fallback) WARNc2_S( "%s %s",_("error in module:"), cmm_api9_->registration ); } if(cmm_api9_->release) cmm_api9_->release( (oyStruct_s**)&cmm_api9_ ); } oyCMMapiFilters_Release( &apis ); return fallback; }