配置头的Name是不带0结尾的字符串,所以不能用普通的strcmp来比较,还是内存比较更加稳妥。

测试通过!
This commit is contained in:
nnhy 2015-10-15 10:02:14 +00:00
parent 69c6fa12d8
commit 4667c1d6cc
1 changed files with 4 additions and 1 deletions

View File

@ -82,11 +82,13 @@ bool ConfigBlock::Init(const char* name, const ByteArray& bs)
const ConfigBlock* ConfigBlock::Find(const char* name, bool fAppend) const
{
const ConfigBlock* ptr = this;
uint slen = strlen(name);
assert_param2(slen <= sizeof(ptr->Name), "配置段名称最大4个字符");
// 遍历链表,找到同名块
while(ptr->IsGoodBlock())
{
if(ptr->IsGoodData() && name && strcmp(name, ptr->Name) == 0)
if(ptr->IsGoodData() && name && memcmp(name, ptr->Name, slen) == 0)
{
return ptr;
}
@ -132,6 +134,7 @@ const void* ConfigBlock::Set(const char* name, const ByteArray& bs, uint addr, S
if(!addr) addr = BaseAddress;
if(!storage) storage = Device;
assert_param2(storage, "未指定配置段的存储设备");
const ConfigBlock* cfg = (const ConfigBlock*)addr;