summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJan Synacek <jsynacek@redhat.com>2013-02-14 15:55:21 +0100
committerJan Synacek <jsynacek@redhat.com>2013-02-14 16:00:03 +0100
commitfb270dd0e7ee4d5e71300b67c4794b63b02a0df4 (patch)
tree5801b3cb3248d69643b229829463c13125aa0348 /src
parent459197d2c4f39fea944299cdc22994b294d446c5 (diff)
downloadopenlmi-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.c37
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);