static CMPIStatus LMI_NFSElementSettingDataEnumInstances( CMPIInstanceMI* mi, const CMPIContext* cc, const CMPIResult* cr, const CMPIObjectPath* cop, const char** properties) { int i; char buf[250]; LMI_NFSElementSettingData n; LMI_NFSElementSettingData_Init(&n, _cb, KNameSpace (cop)); LMI_NFS_ShareRef nfsref; LMI_NFS_ShareRef_Init(&nfsref, _cb, KNameSpace (cop)); LMI_ExportedFileShareSettingRef fileref; LMI_ExportedFileShareSettingRef_Init(&fileref, _cb, KNameSpace (cop)); struct nfs *exportinfo = malloc(sizeof(struct nfs)); exportinfo=get_export_list(); for(i=0;i<exportinfo->countshare;i++) { snprintf(buf, sizeof buf,"%s:%d[of(%d)]", "NFSShare",i+1, exportinfo->countshare); LMI_NFS_ShareRef_Set_InstanceID(&nfsref, buf); snprintf(buf, sizeof buf,"%s:%d[of(%d)]", "NFSExportedFileShareSetting",i+1, exportinfo->countshare); LMI_ExportedFileShareSettingRef_Set_InstanceID(&fileref, buf); LMI_NFSElementSettingData_Set_Share(&n, &nfsref); LMI_NFSElementSettingData_Set_ShareSetting(&n, &fileref); KReturnInstance(cr, n); } CMReturn(CMPI_RC_OK); }
static CMPIStatus LMI_NFS_ShareEnumInstances( CMPIInstanceMI* mi, const CMPIContext* cc, const CMPIResult* cr, const CMPIObjectPath* cop, const char** properties) { LMI_NFS_Share s; struct stat st; LMI_NFS_Share_Init(&s, _cb, KNameSpace (cop)); int i; char buf[256]; struct nfs *exportinfo = malloc(sizeof(struct nfs)); exportinfo=Get_Export_List(); for(i=0;i<exportinfo->countshare;i++) { snprintf(buf, sizeof buf,"%s:%d[of(%d)]", "NFSShare",i+1, exportinfo->countshare); LMI_NFS_Share_Set_InstanceID(&s, buf); LMI_NFS_Share_Set_ElementName(&s, "Nfs Share"); LMI_NFS_Share_Set_Name(&s, exportinfo->share[i]); LMI_NFS_Share_Init_OperationalStatus(&s, 1); if ( stat(exportinfo->share[i], &st) == 0 ) { if(S_ISDIR(st.st_mode)) LMI_NFS_Share_Set_SharingDirectory(&s, 1); else LMI_NFS_Share_Set_SharingDirectory(&s, 0); LMI_NFS_Share_Set_OperationalStatus(&s, 0, 2 ); } else LMI_NFS_Share_Set_OperationalStatus(&s, 0, LMI_NFS_Share_OperationalStatus_Error ); KReturnInstance(cr, s); } CMReturn(CMPI_RC_OK); }
CMPIStatus KDefaultGetInstance( const CMPIBroker* mb, CMPIInstanceMI* mi, const CMPIContext* cc, const CMPIResult* cr, const CMPIObjectPath* cop, const char** properties) { #if defined(DIRECT_CALL) static CMPIResultFT _ft = { CMPICurrentVersion, _DefaultGI_release, _DefaultGI_clone, _DefaultGI_returnData, _DefaultGI_returnInstance, _DefaultGI_returnObjectPath, _DefaultGI_returnDone, _DefaultGI_returnError }; DefaultGI_Result result; DefaultGI_Handle handle; CMPIStatus st; handle.result = cr; handle.cop = cop; handle.found = 0; result.hdl = (void*)&handle; result.ft = &_ft; st = (*mi->ft->enumerateInstances)( mi, cc, (CMPIResult*)(void*)&result, cop, NULL); if (!st.rc) return st; if (!handle.found) { KReturn(ERR_NOT_FOUND); } KReturn(OK); #else /* defined(DIRECT_CALL) */ CMPIEnumeration* e; CMPIStatus st; CMPIObjectPath* ccop; /* Create an object path with just the class from cop */ ccop = CMNewObjectPath(mb, KNameSpace(cop), KClassName(cop), &st); if (!ccop) KReturn(ERR_FAILED); /* Enumerate all instances of this class */ if (!(e = mb->bft->enumerateInstances(mb, cc, ccop, properties, &st))) KReturn(ERR_FAILED); while (CMHasNext(e, &st)) { CMPIData cd; CMPIObjectPath* tcop; cd = CMGetNext(e, &st); if (st.rc || cd.type != CMPI_instance || (cd.state & CMPI_nullValue)) KReturn(ERR_FAILED); if (!(tcop = CMGetObjectPath(cd.value.inst, &st))) KReturn(ERR_FAILED); if (KMatch(tcop, cop)) { CMReturnInstance(cr, cd.value.inst); KReturn(OK); } } KReturn(ERR_NOT_FOUND); #endif /* !defined(DIRECT_CALL) */ }