summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
e1bf435)
This change makes sure there are no more anonymous (unnamed) sections
in configuration files. Previously it was optional and now the choice
is being removed.
All sections will have generated identifiers. This is important because
anonymous sections will be simpler to manipulate.
Signed-off-by: Antonio Paunovic <antonio.paunovic@sartura.hr>
Signed-off-by: Luka Perkov <luka.perkov@sartura.hr>
+/*
+ * Fixup sections functions does the fixup of all sections for given package.
+ * It is used as a preprocessing step for fixing up existing anonymous sections
+ * from configurations.
+ *
+ * It uses uci_fixup_section() from list.c and then adds delta changes.
+ */
+static void
+uci_fixup_sections(struct uci_context *ctx, struct uci_package *p)
+{
+ struct uci_element *e;
+ struct uci_section *s;
+
+ uci_foreach_element(&p->sections, e) {
+ s = uci_to_section(e);
+ s->package->name_index++;
+ uci_fixup_section(ctx, s);
+ s->anonymous = false;
+ }
+}
+
static int
uci_fill_ptr(struct uci_context *ctx, struct uci_ptr *ptr, struct uci_element *e)
{
static int
uci_fill_ptr(struct uci_context *ctx, struct uci_ptr *ptr, struct uci_element *e)
{
- uci_fixup_section(ctx, ctx->pctx->section);
if (!ctx->pctx->package) {
if (!ctx->pctx->name)
uci_parse_error(ctx, "attempting to import a file without a package name");
if (!ctx->pctx->package) {
if (!ctx->pctx->name)
uci_parse_error(ctx, "attempting to import a file without a package name");
uci_foreach_element(&p->sections, s) {
struct uci_section *sec = uci_to_section(s);
fprintf(stream, "\nconfig %s", uci_escape(ctx, sec->type));
uci_foreach_element(&p->sections, s) {
struct uci_section *sec = uci_to_section(s);
fprintf(stream, "\nconfig %s", uci_escape(ctx, sec->type));
- if (!sec->anonymous || (ctx->flags & UCI_FLAG_EXPORT_NAME))
- fprintf(stream, " '%s'", uci_escape(ctx, sec->e.name));
+ fprintf(stream, " '%s'", uci_escape(ctx, sec->e.name));
fprintf(stream, "\n");
uci_foreach_element(&sec->options, o) {
struct uci_option *opt = uci_to_option(o);
fprintf(stream, "\n");
uci_foreach_element(&sec->options, o) {
struct uci_option *opt = uci_to_option(o);
UCI_THROW(ctx, ctx->err);
}
UCI_THROW(ctx, ctx->err);
}
- uci_fixup_section(ctx, ctx->pctx->section);
if (!pctx->package && name)
uci_switch_config(ctx);
if (package)
if (!pctx->package && name)
uci_switch_config(ctx);
if (package)
if (pctx->merge)
pctx->package = NULL;
if (pctx->merge)
pctx->package = NULL;
+ uci_fixup_sections(ctx, *package);
pctx->name = NULL;
uci_switch_config(ctx);
pctx->name = NULL;
uci_switch_config(ctx);
char *filename;
bool confdir;
FILE *file = NULL;
char *filename;
bool confdir;
FILE *file = NULL;
switch (name[0]) {
case '.':
switch (name[0]) {
case '.':
if (package) {
package->path = filename;
package->has_delta = confdir;
if (package) {
package->path = filename;
package->has_delta = confdir;
- uci_load_delta(ctx, package, false);
+ n_change = uci_load_delta(ctx, package, false);
+ package->name_index += n_change;
struct uci_element *e;
char buf[16];
struct uci_element *e;
char buf[16];
+ if (!s || !s->anonymous)
- sprintf(buf, "cfg%02x%04x", ++s->package->n_section, hash % (1 << 16));
+ sprintf(buf, "cfg%02x%04x", s->package->name_index, hash % (1 << 16));
s->e.name = uci_strdup(ctx, buf);
}
s->e.name = uci_strdup(ctx, buf);
}
struct uci_element *e;
uci_foreach_element(list, e) {
struct uci_element *e;
uci_foreach_element(list, e) {
- if (!strcmp(e->name, name))
+ if (e->name && !strcmp(e->name, name))
struct uci_backend *backend;
void *priv;
int n_section;
struct uci_backend *backend;
void *priv;
int n_section;
struct uci_list delta;
struct uci_list saved_delta;
};
struct uci_list delta;
struct uci_list saved_delta;
};