X-Git-Url: http://pilppa.org/gitweb/?p=libplp.git;a=blobdiff_plain;f=src%2Fconfig.c;h=c099d97fbe022b89c12b0549667210427b38c987;hp=074604aa04ef6a9dd0c35b2fe48dc3a4e5c64a25;hb=e637096f7b0a1d73c07ff08d342a6eb2fda2b92e;hpb=167c760cfc2596e9a8e7535249faede7b7239c25 diff --git a/src/config.c b/src/config.c index 074604a..c099d97 100644 --- a/src/config.c +++ b/src/config.c @@ -7,6 +7,36 @@ #include "log.h" #include "config.h" +static int uci_create_named_section(struct uci_context *ctx, const char *conf_file_name, const char *section_type, const char *section_name) +{ + struct uci_ptr ptr; + int ret_val; + char *cmd_data; + int len; + + ret_val = -1; + if ((ctx != NULL) && + (conf_file_name != NULL) && + (section_type != NULL) && + (section_name != NULL)) { + len = strlen(conf_file_name); + len = len + 1; + len = len + strlen(section_type); + len = len + 1; + len = len + strlen(section_name); + len = len + 1; + cmd_data = malloc(len); + snprintf(cmd_data, len, "%s.%s=%s", conf_file_name, section_name, section_type); + if (uci_lookup_ptr(ctx, &ptr, cmd_data, true) == UCI_OK) { + ret_val = uci_set(ctx, &ptr); + if (ret_val == UCI_OK) { + //ret_val = uci_save(ctx, ptr.p); + } + } + } + return ret_val; +} + bool set_config_value(const char *conf_dir_name, const char *conf_file_name, const char *section_type, @@ -60,10 +90,20 @@ bool set_config_value(const char *conf_dir_name, break; } } - //sct = uci_lookup_section(ctx, pkg, "service"); if (sct == NULL) { log_debug("Creating configuration section %s to configuration file: %s\n", section_name, fname); - err_flg = uci_add_named_section(ctx, pkg, section_type, section_name, &sct); + //err_flg = uci_add_named_section(ctx, pkg, section_type, section_name, &sct); + //err_flg = uci_add_section(ctx, pkg, section_name, &sct); + err_flg = uci_create_named_section(ctx, conf_file_name, section_type, section_name); + if (err_flg == UCI_OK) { + uci_foreach_element(&pkg->sections, elem) { + tmp_sct = uci_to_section(elem); + if (strcmp(tmp_sct->type, section_type) == 0) { + sct = tmp_sct; + break; + } + } + } } if (err_flg == 0) { opt = uci_lookup_option(ctx, sct, key);