提交 3b871a00 编写于 作者: J jp9000

fixed a bug where new locale text segments properly replace old ones if adding...

fixed a bug where new locale text segments properly replace old ones if adding a new language file on top of another
上级 a4055e42
......@@ -140,13 +140,23 @@ static void lookup_splitnode(const char *lookup_val, size_t len,
}
}
static bool lookup_addstring(const char *lookup_val, struct text_leaf *leaf,
static inline void lookup_replaceleaf(struct text_node *node,
struct text_leaf *leaf)
{
text_leaf_destroy(node->leaf);
node->leaf = leaf;
}
static void lookup_addstring(const char *lookup_val, struct text_leaf *leaf,
struct text_node *node)
{
struct text_node *child;
if (!lookup_val || !*lookup_val)
return false;
/* value already exists, so replace */
if (!lookup_val || !*lookup_val) {
lookup_replaceleaf(node, leaf);
return;
}
child = text_node_bychar(node, *lookup_val);
if (child) {
......@@ -165,15 +175,15 @@ static bool lookup_addstring(const char *lookup_val, struct text_leaf *leaf,
break;
}
if (len == child->str.len)
return lookup_addstring(lookup_val+len, leaf, child);
else
if (len == child->str.len) {
lookup_addstring(lookup_val+len, leaf, child);
return;
} else {
lookup_splitnode(lookup_val, len, leaf, child);
}
} else {
lookup_createsubnode(lookup_val, leaf, node);
}
return true;
}
static void lookup_getstringtoken(struct lexer *lex, struct strref *token)
......@@ -385,8 +395,10 @@ bool text_lookup_add(lookup_t lookup, const char *path)
if (!file_str.array)
return false;
lookup->top = bmalloc(sizeof(struct text_node));
memset(lookup->top, 0, sizeof(struct text_node));
if (!lookup->top) {
lookup->top = bmalloc(sizeof(struct text_node));
memset(lookup->top, 0, sizeof(struct text_node));
}
dstr_replace(&file_str, "\r", " ");
lookup_addfiledata(lookup, file_str.array);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册