diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/logicalfile/LMI_DirectoryContainsFileProvider.c | 37 |
1 files changed, 16 insertions, 21 deletions
diff --git a/src/logicalfile/LMI_DirectoryContainsFileProvider.c b/src/logicalfile/LMI_DirectoryContainsFileProvider.c index fcc77f3..86f8b10 100644 --- a/src/logicalfile/LMI_DirectoryContainsFileProvider.c +++ b/src/logicalfile/LMI_DirectoryContainsFileProvider.c @@ -71,14 +71,7 @@ static CMPIStatus dir_file_objectpaths( snprintf(err, BUFLEN, "Can't stat file: %s", rpath); CMReturnWithChars(_cb, CMPI_RC_ERR_NOT_FOUND, err); } else { - (S_ISREG(sb.st_mode)) ? strcpy(fileclass, "LMI_DataFile") : - (S_ISDIR(sb.st_mode)) ? strcpy(fileclass, "LMI_UnixDirectory") : - (S_ISCHR(sb.st_mode)) ? strcpy(fileclass, "LMI_UnixDeviceFile") : - (S_ISBLK(sb.st_mode)) ? strcpy(fileclass, "LMI_UnixDeviceFile") : - (S_ISLNK(sb.st_mode)) ? strcpy(fileclass, "LMI_SymbolicLink") : - (S_ISFIFO(sb.st_mode)) ? strcpy(fileclass, "LMI_FIFOPipeFile") : - (S_ISSOCK(sb.st_mode)) ? strcpy(fileclass, "LMI_UnixSocket") : - strcpy(fileclass, "Unknown"); + get_class_from_stat(&sb, fileclass); } CIM_LogicalFileRef cim_lfr; @@ -150,7 +143,7 @@ static CMPIStatus associators( unsigned int count; if (CMClassPathIsA(_cb, cop, LMI_UnixDirectory_ClassName, &st)) { - /* UnixDirectory */ + /* got UnixDirectory */ st = dir_file_objectpaths(cc, cr, properties, ns, path, refs, &count); if (st.rc != CMPI_RC_OK) { return st; @@ -167,19 +160,21 @@ static CMPIStatus associators( } } } else { - /* LogicalFile */ - CIM_LogicalFileRef cim_lfr; - CIM_LogicalFileRef_Init(&cim_lfr, _cb, ns); - fill_logicalfile(CIM_LogicalFileRef, &cim_lfr, path, ccname); + /* got LogicalFile */ + CIM_DirectoryRef lmi_dr; + CIM_DirectoryRef_Init(&lmi_dr, _cb, ns); + char *aux = strdup(path); + fill_logicalfile(CIM_DirectoryRef, &lmi_dr, dirname(aux), LMI_UnixDirectory_ClassName); + o = CIM_DirectoryRef_ToObjectPath(&lmi_dr, &st); + CMSetClassName(o, LMI_UnixDirectory_ClassName); - o = CIM_LogicalFileRef_ToObjectPath(&cim_lfr, &st); - CMSetClassName(o, ccname); if (names) { CMReturnObjectPath(cr, o); } else { ci = _cb->bft->getInstance(_cb, cc, o, properties, &st); CMReturnInstance(cr, ci); } + free(aux); } CMReturn(CMPI_RC_OK); } @@ -244,12 +239,12 @@ static CMPIStatus references( CMReturnWithChars(_cb, CMPI_RC_ERR_NOT_FOUND, "Too many files in a single directory..."); } for (unsigned int i = 0; i < count; i++) { + LMI_DirectoryContainsFile_SetObjectPath_PartComponent(&lmi_dcf, refs[i]); + o = LMI_DirectoryContainsFile_ToObjectPath(&lmi_dcf, &st); if (names) { - LMI_DirectoryContainsFile_SetObjectPath_PartComponent(&lmi_dcf, refs[i]); - o = LMI_DirectoryContainsFile_ToObjectPath(&lmi_dcf, &st); CMReturnObjectPath(cr, o); } else { - ci = _cb->bft->getInstance(_cb, cc, refs[i], properties, &st); + ci = LMI_DirectoryContainsFile_ToInstance(&lmi_dcf, &st); CMReturnInstance(cr, ci); } } @@ -265,12 +260,12 @@ static CMPIStatus references( fill_logicalfile(CIM_DirectoryRef, &lmi_dr, dirname(aux), LMI_UnixDirectory_ClassName); o = CIM_DirectoryRef_ToObjectPath(&lmi_dr, &st); CMSetClassName(o, LMI_UnixDirectory_ClassName); + LMI_DirectoryContainsFile_SetObjectPath_GroupComponent(&lmi_dcf, o); + o = LMI_DirectoryContainsFile_ToObjectPath(&lmi_dcf, &st); if (names) { - LMI_DirectoryContainsFile_SetObjectPath_GroupComponent(&lmi_dcf, o); - o = LMI_DirectoryContainsFile_ToObjectPath(&lmi_dcf, &st); CMReturnObjectPath(cr, o); } else { - ci = _cb->bft->getInstance(_cb, cc, o, properties, &st); + ci = LMI_DirectoryContainsFile_ToInstance(&lmi_dcf, &st); CMReturnInstance(cr, ci); } free(aux); |