c-如何从具有结构UCI_section指针的UCI包中删除section



我正在迭代包部分,我想删除其中一个:

struct uci_package * pkg;
struct uci_context * ctx;
//...
struct uci_element *elem;
uci_foreach_element(&(pkg->sections), elem)
{
struct uci_section *section = uci_to_section(elem);
if(!section)
continue;
if(match_foo(ctx, section))
{
//TODO uci_delete
break;
}
}
//...

但是uci_delete输入参数是structuci_ptr,它只能通过解析cli字符串来创建(没有从structucI_section到structucc_ptr的转换函数(。

如何在不使用cli字符串的情况下删除节?

我找不到直接的方法。但一个简单的解决方案是根据迭代循环中的包名称和元素创建节点的地址。应该是这样的:

struct uci_package * pkg;
struct uci_context * ctx;
//...
char packageName[] = ""; // <--- Package name goes here
struct uci_element *elem;
uci_foreach_element(&(pkg->sections), elem)
{
struct uci_section *section = uci_to_section(elem);
if(!section)
continue;
if(match_foo(ctx, section))
{
//TODO uci_delete
struct uci_ptr ptrPath;
char tmp[strlen(packageName) + strlen(elem->name) + 2];
sprintf(tmp, "%s.%s", packageName, elem->name);
if (uci_lookup_ptr(ctx, &ptrPath, tmp, true) == UCI_OK) {
uci_delete(ctx, &ptrPath);
uci_save(ctx, ptrPath.p);
}
break;
}
}

最新更新