diff options
author | Jan Synacek <jsynacek@redhat.com> | 2014-01-09 15:41:21 +0100 |
---|---|---|
committer | Jan Synacek <jsynacek@redhat.com> | 2014-01-10 09:16:00 +0100 |
commit | 9019f10060080eff165c3e6aa3b6461748112ecc (patch) | |
tree | 0407d68fffe2b2958fb083f96b1f4fcadd10f408 /src/logicalfile | |
parent | 68567e7e27c66e499aed185c58503e65572c891a (diff) | |
download | openlmi-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.c | 14 | ||||
-rw-r--r-- | src/logicalfile/LMI_FileIdentityProvider.c | 11 | ||||
-rw-r--r-- | src/logicalfile/LMI_RootDirectoryProvider.c | 18 | ||||
-rw-r--r-- | src/logicalfile/LMI_UnixFileProvider.c | 6 | ||||
-rw-r--r-- | src/logicalfile/file.c | 40 | ||||
-rw-r--r-- | src/logicalfile/test/test_basic.py | 2 |
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) |