+++ /dev/null
-/*
- * test_w1.cc
- *
- * Created on: Oct 20, 2010
- * Author: lamikr
- */
-#include <string.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <uci.h>
-
-#include "log.h"
-#include "config.h"
-
-/*
-static int uci_do_add(int argc, char **argv)
-{
- struct uci_package *p = NULL;
- struct uci_section *s = NULL;
- int ret;
-
- if (argc != 3)
- return 255;
-
- ret = uci_load(ctx, argv[1], &p);
- if (ret != UCI_OK)
- goto done;
-
- ret = uci_add_section(ctx, p, argv[2], &s);
- if (ret != UCI_OK)
- goto done;
-
- ret = uci_save(ctx, p);
-
-done:
- if (ret != UCI_OK)
- cli_perror();
- else if (s)
- fprintf(stdout, "%s\n", s->e.name);
- return ret;
-}
-*/
-
-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);
- if (cmd_data != NULL) {
- 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) {
- }
- }
- free(cmd_data);
- }
- }
- return ret_val;
-}
-
-bool set_config_value2(const char *conf_dir_name,
- const char *conf_file_name,
- const char *section_type,
- const char *section_name,
- const char *key,
- const char *value) {
- struct uci_context *ctx;
- struct uci_package *pkg;
- struct uci_section *sct;
- struct uci_section *tmp_sct;
- int err_flg;
- char *fname;
- int b_count;
- struct uci_element *elem;
- struct uci_ptr ptr;
- FILE *fp;
- bool ret_val;
-
- ret_val = false;
- if ((conf_dir_name != NULL) &&
- (conf_file_name != NULL) &&
- (section_type != NULL) &&
- (section_name != NULL) &&
- (key != NULL) &&
- (value != NULL)) {
- b_count = strlen(conf_dir_name) + strlen(conf_file_name) + 10;
- fname = (char *)calloc(1, b_count);
- if (fname != NULL) {
- strncpy(fname, conf_dir_name, b_count);
- strncat(fname, "/", 1);
- strncat(fname, conf_file_name, strlen(conf_file_name) + 1);
- ctx = uci_alloc_context();
- if (ctx != NULL) {
- sct = NULL;
- uci_set_confdir(ctx, conf_dir_name);
- if (access(fname, W_OK) != 0) {
- if (access(fname, F_OK) != 0) {
- fp = fopen(fname, "w+");
- fclose(fp);
- }
- }
- if (access(fname, W_OK) == 0) {
- err_flg = uci_load(ctx, fname, &pkg);
- 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 (sct == NULL) {
- //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) {
- memset(&ptr, 0, sizeof(ptr));
- ptr.package = pkg->e.name;
- ptr.section = sct->e.name;
- ptr.option = key;
-
- if (uci_lookup_ptr(ctx, &ptr, NULL, false) == UCI_OK) {
- ptr.value = value;
- uci_set(ctx, &ptr);
- uci_save(ctx, pkg);
- ret_val = true;
- log_debug("Created configuration section %s to configuration file: %s\n", section_name, fname);
- }
- else {
- log_error("Could not write to configuration file: %s\n. Could not look-up pointer for package %s section %s.\n", fname, pkg->e.name, sct->e.name);
- }
- uci_free_context(ctx);
- }
- else {
- log_error("Could not write to configuration file: %s\n. Could not create section %s.\n", fname, section_name);
- }
- }
- else {
- log_error("Could not write to configuration file: %s. File does not exist or is not writable.\n", fname);
- }
- }
- free(fname);
- }
- else {
- log_error("Could not change config value, out of memory\n");
- }
- }
- else {
- log_error("Could not change config value, invalid parameters\n");
- }
- return ret_val;
-}
-
-void test_config() {
- char work_dir[FILENAME_MAX];
-
- getcwd(work_dir, sizeof(work_dir));
- printf("working directory: %s\n", work_dir);
-
- set_config_value2(work_dir,
- "dev_cfg_txt",
- "mysection_type",
- "mysection_name",
- "myoption_name",
- "my_option_value");
- set_config_value2(work_dir,
- "dev_cfg_txt",
- "mysection_type",
- "mysection_name",
- "myoption_name",
- "my_option_value2");
-}
-
-int main(int argc, char** argv) {
- test_config();
- return 0;
-}