diff options
author | Jan Synacek <jsynacek@redhat.com> | 2013-02-14 15:55:21 +0100 |
---|---|---|
committer | Jan Synacek <jsynacek@redhat.com> | 2013-02-14 16:00:03 +0100 |
commit | fb270dd0e7ee4d5e71300b67c4794b63b02a0df4 (patch) | |
tree | 5801b3cb3248d69643b229829463c13125aa0348 /src | |
parent | 459197d2c4f39fea944299cdc22994b294d446c5 (diff) | |
download | openlmi-providers-fb270dd0e7ee4d5e71300b67c4794b63b02a0df4.tar.gz openlmi-providers-fb270dd0e7ee4d5e71300b67c4794b63b02a0df4.tar.xz openlmi-providers-fb270dd0e7ee4d5e71300b67c4794b63b02a0df4.zip |
LogicalFile: fix DirectoryContainsFile
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); |