summaryrefslogtreecommitdiffstats
path: root/src/logicalfile
diff options
context:
space:
mode:
authorJan Synacek <jsynacek@redhat.com>2014-01-09 15:41:21 +0100
committerJan Synacek <jsynacek@redhat.com>2014-01-10 09:16:00 +0100
commit9019f10060080eff165c3e6aa3b6461748112ecc (patch)
tree0407d68fffe2b2958fb083f96b1f4fcadd10f408 /src/logicalfile
parent68567e7e27c66e499aed185c58503e65572c891a (diff)
downloadopenlmi-providers-9019f10060080eff165c3e6aa3b6461748112ecc.tar.gz
openlmi-providers-9019f10060080eff165c3e6aa3b6461748112ecc.tar.xz
openlmi-providers-9019f10060080eff165c3e6aa3b6461748112ecc.zip
logicalfile: don't automatically fill FSName and FSCreationClassName
Set there properties on output, meaning when GetInstance() is invoked, only when they are empty. Otherwise leave them unchanged.
Diffstat (limited to 'src/logicalfile')
-rw-r--r--src/logicalfile/LMI_DirectoryContainsFileProvider.c14
-rw-r--r--src/logicalfile/LMI_FileIdentityProvider.c11
-rw-r--r--src/logicalfile/LMI_RootDirectoryProvider.c18
-rw-r--r--src/logicalfile/LMI_UnixFileProvider.c6
-rw-r--r--src/logicalfile/file.c40
-rw-r--r--src/logicalfile/test/test_basic.py2
6 files changed, 53 insertions, 38 deletions
diff --git a/src/logicalfile/LMI_DirectoryContainsFileProvider.c b/src/logicalfile/LMI_DirectoryContainsFileProvider.c
index 06810b7..366041b 100644
--- a/src/logicalfile/LMI_DirectoryContainsFileProvider.c
+++ b/src/logicalfile/LMI_DirectoryContainsFileProvider.c
@@ -42,8 +42,8 @@ static CMPIStatus logicalfile_objectpath_from_path(
CMPIStatus st = {.rc = CMPI_RC_OK};
char fileclass[BUFLEN];
- char *fsname;
- char *fsclassname;
+ char *fsname = NULL;
+ char *fsclassname = NULL;
if (lstat(abspath, &sb) < 0) {
char err[BUFLEN];
@@ -232,8 +232,8 @@ static CMPIStatus associators(
CIM_DirectoryRef lmi_dr;
CIM_DirectoryRef_Init(&lmi_dr, _cb, ns);
- char *fsname;
- char *fsclassname;
+ char *fsname = NULL;
+ char *fsclassname = NULL;
st = get_fsinfo_from_path(_cb, path, &fsclassname, &fsname);
check_status(st);
@@ -250,7 +250,6 @@ static CMPIStatus associators(
ci = _cb->bft->getInstance(_cb, cc, o, properties, &st);
CMReturnInstance(cr, ci);
}
- free(fsname);
} else {
/* this association does not associate with given 'cop' class */
CMReturn(CMPI_RC_OK);
@@ -272,8 +271,8 @@ static CMPIStatus references(
CMPIStatus st;
const char *ns = KNameSpace(cop);
const char *path;
- char *fsname;
- char *fsclassname;
+ char *fsname = NULL;
+ char *fsclassname = NULL;
char ccname[BUFLEN];
/* GroupComponent */
@@ -379,7 +378,6 @@ static CMPIStatus references(
CMReturn(CMPI_RC_OK);
}
- free(fsname);
CMReturn(CMPI_RC_OK);
}
diff --git a/src/logicalfile/LMI_FileIdentityProvider.c b/src/logicalfile/LMI_FileIdentityProvider.c
index 90c5cbe..66f2c3c 100644
--- a/src/logicalfile/LMI_FileIdentityProvider.c
+++ b/src/logicalfile/LMI_FileIdentityProvider.c
@@ -45,8 +45,8 @@ static CMPIStatus associators(
const char *ns = KNameSpace(cop);
const char *path;
char fileclass[BUFLEN];
- char *fsname;
- char *fsclassname;
+ char *fsname = NULL;
+ char *fsclassname = NULL;
st = check_assoc_class(_cb, ns, assocClass, LMI_FileIdentity_ClassName);
check_class_check_status(st);
@@ -115,7 +115,6 @@ static CMPIStatus associators(
ci = _cb->bft->getInstance(_cb, cc, o, properties, &st);
res = CMReturnInstance(cr, ci);
}
- free(fsname);
return res;
}
@@ -136,8 +135,8 @@ static CMPIStatus references(
CMPIObjectPath *o;
const char *path;
char fileclass[BUFLEN];
- char *fsname;
- char *fsclassname;
+ char *fsname = NULL;
+ char *fsclassname = NULL;
st = check_assoc_class(_cb, ns, assocClass, LMI_FileIdentity_ClassName);
check_class_check_status(st);
@@ -210,7 +209,6 @@ static CMPIStatus references(
ci = LMI_FileIdentity_ToInstance(&lmi_fi, &st);
res = CMReturnInstance(cr, ci);
}
- free(fsname);
return res;
}
@@ -378,4 +376,5 @@ KONKRET_REGISTRATION(
/* vi: set et: */
/* Local Variables: */
/* indent-tabs-mode: nil */
+/* c-basic-offset: 4 */
/* End: */
diff --git a/src/logicalfile/LMI_RootDirectoryProvider.c b/src/logicalfile/LMI_RootDirectoryProvider.c
index b8f442a..9b10a7d 100644
--- a/src/logicalfile/LMI_RootDirectoryProvider.c
+++ b/src/logicalfile/LMI_RootDirectoryProvider.c
@@ -42,8 +42,8 @@ static CMPIStatus associators(
const char *ns = KNameSpace(cop);
const char *comp_ccname = get_system_creation_class_name();
const char *path = get_string_property_from_op(cop, "Name");
- char *fsname;
- char *fsclassname;
+ char *fsname = NULL;
+ char *fsclassname = NULL;
const char *systemname = lmi_get_system_creation_class_name();
st = check_assoc_class(_cb, ns, assocClass, LMI_RootDirectory_ClassName);
@@ -96,11 +96,9 @@ static CMPIStatus associators(
}
} else {
/* this association does not associate with given 'cop' class */
- free(fsname);
CMReturn(CMPI_RC_OK);
}
- free(fsname);
CMReturn(CMPI_RC_OK);
}
@@ -127,8 +125,8 @@ static CMPIStatus references(
st = check_assoc_class(_cb, ns, assocClass, LMI_RootDirectory_ClassName);
check_class_check_status(st);
- char *fsname;
- char *fsclassname;
+ char *fsname = NULL;
+ char *fsclassname = NULL;
st = get_fsinfo_from_path(_cb, "/", &fsclassname, &fsname);
check_status(st);
@@ -163,7 +161,6 @@ static CMPIStatus references(
LMI_RootDirectory_SetObjectPath_PartComponent(&lmi_rd, o);
} else {
/* this association does not associate with given 'cop' class */
- free(fsname);
CMReturn(CMPI_RC_OK);
}
@@ -174,7 +171,6 @@ static CMPIStatus references(
ci = LMI_RootDirectory_ToInstance(&lmi_rd, &st);
CMReturnInstance(cr, ci);
}
- free(fsname);
CMReturn(CMPI_RC_OK);
}
@@ -210,8 +206,8 @@ static CMPIStatus LMI_RootDirectoryEnumInstances(
{
CMPIObjectPath *o;
CMPIStatus st;
- char *fsname;
- char *fsclassname;
+ char *fsname = NULL;
+ char *fsclassname = NULL;
const char *ns = KNameSpace(cop);
LMI_RootDirectory lmi_rd;
@@ -227,7 +223,6 @@ static CMPIStatus LMI_RootDirectoryEnumInstances(
o = LMI_UnixDirectory_ToObjectPath(&lmi_ud, NULL);
LMI_RootDirectory_SetObjectPath_PartComponent(&lmi_rd, o);
- free(fsname);
return CMReturnInstance(cr, LMI_RootDirectory_ToInstance(&lmi_rd, NULL));
}
@@ -363,4 +358,5 @@ KONKRET_REGISTRATION(
/* vi: set et: */
/* Local Variables: */
/* indent-tabs-mode: nil */
+/* c-basic-offset: 4 */
/* End: */
diff --git a/src/logicalfile/LMI_UnixFileProvider.c b/src/logicalfile/LMI_UnixFileProvider.c
index 165eb82..347975c 100644
--- a/src/logicalfile/LMI_UnixFileProvider.c
+++ b/src/logicalfile/LMI_UnixFileProvider.c
@@ -135,11 +135,14 @@ static CMPIStatus LMI_UnixFileGetInstance(
CMReturnWithChars(_cb, CMPI_RC_ERR_NOT_FOUND, aux);
}
/* set ignored stuff */
+ /* only use udev information if no fs information is provided */
+ /* discarding const qualifiers is ok here, it makes the code a bit more simple */
+ fsname = (char *) KChars(lmi_file.FSName.value);
+ fsclassname = (char *) KChars(lmi_file.FSCreationClassName.value);
st = get_fsinfo_from_stat(_cb, &sb, path, &fsclassname, &fsname);
check_status(st);
LMI_UnixFile_Set_FSCreationClassName(&lmi_file, fsclassname);
LMI_UnixFile_Set_FSName(&lmi_file, fsname);
- free(fsname);
get_class_from_stat(&sb, aux);
LMI_UnixFile_Set_LFCreationClassName(&lmi_file, aux);
@@ -264,4 +267,5 @@ KONKRET_REGISTRATION(
/* vi: set et: */
/* Local Variables: */
/* indent-tabs-mode: nil */
+/* c-basic-offset: 4 */
/* End: */
diff --git a/src/logicalfile/file.c b/src/logicalfile/file.c
index 4d66b2f..e8cad26 100644
--- a/src/logicalfile/file.c
+++ b/src/logicalfile/file.c
@@ -98,20 +98,32 @@ CMPIStatus get_fsinfo_from_stat(const CMPIBroker *b, const struct stat *sb, cons
udev_dev = udev_device_new_from_devnum(udev_ctx, 'b', sb->st_dev);
if ((dev_name = udev_device_get_property_value(udev_dev, "ID_FS_UUID_ENC"))) {
- if (asprintf(fsname, "UUID=%s", dev_name) < 0) {
- return_with_status(b, &st, ERR_FAILED, "asprintf failed");
+ if (!*fsname) {
+ if (asprintf(fsname, "UUID=%s", dev_name) < 0) {
+ return_with_status(b, &st, ERR_FAILED, "asprintf failed");
+ }
+ }
+ if (!*fsclassname) {
+ *fsclassname = FSCREATIONCLASSNAME_LOCAL;
}
- *fsclassname = FSCREATIONCLASSNAME_LOCAL;
} else if ((dev_name = udev_device_get_property_value(udev_dev, "DEVNAME"))) {
- if (asprintf(fsname, "DEVICE=%s", dev_name) < 0) {
- return_with_status(b, &st, ERR_FAILED, "asprintf failed");
+ if (!*fsname) {
+ if (asprintf(fsname, "DEVICE=%s", dev_name) < 0) {
+ return_with_status(b, &st, ERR_FAILED, "asprintf failed");
+ }
+ }
+ if (!*fsclassname) {
+ *fsclassname = FSCREATIONCLASSNAME_LOCAL;
}
- *fsclassname = FSCREATIONCLASSNAME_LOCAL;
} else {
- if (asprintf(fsname, "PATH=%s", path) < 0) {
- return_with_status(b, &st, ERR_FAILED, "asprintf failed");
+ if (!*fsname) {
+ if (asprintf(fsname, "PATH=%s", path) < 0) {
+ return_with_status(b, &st, ERR_FAILED, "asprintf failed");
+ }
+ }
+ if (!*fsclassname) {
+ *fsclassname = FSCREATIONCLASSNAME_TRANSIENT;
}
- *fsclassname = FSCREATIONCLASSNAME_TRANSIENT;
}
udev_device_unref(udev_dev);
udev_unref(udev_ctx);
@@ -172,8 +184,8 @@ CMPIStatus stat_logicalfile_and_fill(
{
struct stat sb;
char buf[BUFLEN];
- char *fsname = NULL;
- char *fsclassname = NULL;
+ char *fsname;
+ char *fsclassname;
const char *path = KChars(lf->lf.datafile.Name.value);
CMPIStatus st = {.rc = CMPI_RC_OK};
@@ -184,6 +196,10 @@ CMPIStatus stat_logicalfile_and_fill(
get_class_from_stat(&sb, buf);
+ /* only use udev information if no fs information is provided */
+ /* discarding const qualifiers is ok here, it makes the code a bit more simple */
+ fsname = (char *) KChars(lf->lf.datafile.FSName.value);
+ fsclassname = (char *) KChars(lf->lf.datafile.FSCreationClassName.value);
st = get_fsinfo_from_stat(b, &sb, path, &fsclassname, &fsname);
check_status(st);
@@ -229,7 +245,6 @@ CMPIStatus stat_logicalfile_and_fill(
assert(0);
}
- free(fsname);
return st;
}
@@ -240,4 +255,5 @@ void _dump_objectpath(const CMPIObjectPath *o)
/* vi: set et: */
/* Local Variables: */
/* indent-tabs-mode: nil */
+/* c-basic-offset: 4 */
/* End: */
diff --git a/src/logicalfile/test/test_basic.py b/src/logicalfile/test/test_basic.py
index 26f525a..020439a 100644
--- a/src/logicalfile/test/test_basic.py
+++ b/src/logicalfile/test/test_basic.py
@@ -497,6 +497,8 @@ class TestLogicalFile(LogicalFileTestBase):
def test_transient_file(self):
cop = self.cop.copy()
cop['Name'] = self.transient_file['path']
+ cop['FSName'] = ''
+ cop['FSCreationClassName'] = ''
try:
inst = self.wbemconnection.GetInstance(cop)