mirror of
https://github.com/opencv/opencv_contrib.git
synced 2025-10-19 11:21:39 +08:00
hdf5: fix atread(string)
no need to append null-terminated symbol
This commit is contained in:
@@ -441,10 +441,13 @@ void HDF5Impl::atread(String* value, const String& atlabel)
|
|||||||
CV_Error_(Error::StsInternal, ("Attribute '%s' is not of string type!", atlabel.c_str()));
|
CV_Error_(Error::StsInternal, ("Attribute '%s' is not of string type!", atlabel.c_str()));
|
||||||
}
|
}
|
||||||
size_t size = H5Tget_size(atype);
|
size_t size = H5Tget_size(atype);
|
||||||
*value = String(size, 0); // allocate space
|
AutoBuffer<char> buf(size);
|
||||||
|
|
||||||
hid_t atype_mem = H5Tget_native_type(atype, H5T_DIR_ASCEND);
|
hid_t atype_mem = H5Tget_native_type(atype, H5T_DIR_ASCEND);
|
||||||
H5Aread(attr, atype_mem, const_cast<char*>(value->c_str()));
|
H5Aread(attr, atype_mem, buf.data());
|
||||||
|
if (size > 0 && buf[size - 1] == '\0')
|
||||||
|
size--;
|
||||||
|
value->assign(buf.data(), size);
|
||||||
|
|
||||||
H5Tclose(atype_mem);
|
H5Tclose(atype_mem);
|
||||||
H5Tclose(atype);
|
H5Tclose(atype);
|
||||||
|
@@ -284,9 +284,27 @@ TEST_F(HDF5_Test, test_attribute_String)
|
|||||||
|
|
||||||
m_hdf_io->atwrite(attr_value, attr_name);
|
m_hdf_io->atwrite(attr_value, attr_name);
|
||||||
|
|
||||||
String expected_attr_value;
|
String got_attr_value;
|
||||||
m_hdf_io->atread(&expected_attr_value, attr_name);
|
m_hdf_io->atread(&got_attr_value, attr_name);
|
||||||
EXPECT_EQ(attr_value.compare(expected_attr_value), 0);
|
EXPECT_EQ(attr_value, got_attr_value);
|
||||||
|
|
||||||
|
m_hdf_io->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(HDF5_Test, test_attribute_String_empty)
|
||||||
|
{
|
||||||
|
reset();
|
||||||
|
|
||||||
|
String attr_name = "test-empty-string";
|
||||||
|
String attr_value;
|
||||||
|
|
||||||
|
m_hdf_io = hdf::open(m_filename);
|
||||||
|
|
||||||
|
m_hdf_io->atwrite(attr_value, attr_name);
|
||||||
|
|
||||||
|
String got_attr_value;
|
||||||
|
m_hdf_io->atread(&got_attr_value, attr_name);
|
||||||
|
EXPECT_EQ(attr_value, got_attr_value);
|
||||||
|
|
||||||
m_hdf_io->close();
|
m_hdf_io->close();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user