- if (uci_lookup_ptr(ctx, &ptr, NULL, false) == UCI_OK) {
- log_debug("trying to change option value\n");
- ptr.value = strdup(value);
- uci_set(ctx, &ptr);
- save = true;
+ ret_val = NULL;
+ pkg = NULL;
+ if ((conf_dir_name != NULL) &&
+ (conf_file_basename != NULL) &&
+ (section_name != NULL) &&
+ (key != NULL)) {
+ b_count = strlen(conf_dir_name) + strlen(conf_file_basename) + 10;
+ conf_fname_full = (char *)calloc(1, b_count);
+ if (conf_fname_full != NULL) {
+ strncpy(conf_fname_full, conf_dir_name, b_count);
+ strncat(conf_fname_full, "/", 1);
+ strncat(conf_fname_full, conf_file_basename, strlen(conf_file_basename) + 1);
+ ctx = uci_alloc_context();
+ if (ctx != NULL) {
+ if (access(conf_fname_full, R_OK) != 0) {
+ // if file is not writable, try to change it to be writable
+ if (access(conf_fname_full, R_OK) != 0) {
+ fp = fopen(conf_fname_full, "w+");
+ fclose(fp);
+ }