static int volmgr_readconfig(char *cfg_path) { cnode *root = config_node("", ""); cnode *node; config_load_file(root, cfg_path); node = root->first_child; while (node) { if (!strncmp(node->name, "volume_", 7)) volmgr_config_volume(node); else LOGE("Skipping unknown configuration node '%s'", node->name); node = node->next; } return 0; }
int loadEffectConfigFile(const char *path) { cnode *root; char *data; data = load_file(path, NULL); if (data == NULL) { return -ENODEV; } root = config_node("", ""); config_load(root, data); loadLibraries(root); loadEffects(root); config_free(root); free(root); free(data); return 0; }
/* * Called when a volume is sucessfully unmounted for UMS enable */ static void _cb_volstopped_for_ums_enable(volume_t *v, void *arg) { int rc; char *devdir_path; #if DEBUG_VOLMGR LOG_VOL("_cb_volstopped_for_ums_enable(%s):", v->mount_point); #endif devdir_path = blkdev_get_devpath(v->dev->disk); #ifdef ADD_ISO LOG_VOL("call ums_enable:ums_path=%s\n", v->ums_path); if ((rc = ums_enable(devdir_path, v->ums_path, true)) < 0) { #else if ((rc = ums_enable(devdir_path, v->ums_path)) < 0) { #endif free(devdir_path); LOGE("Error enabling ums (%d)", rc); return; } free(devdir_path); volume_setstate(v, volstate_ums); pthread_mutex_unlock(&v->lock); } static int volmgr_readconfig(char *cfg_path) { cnode *root = config_node("", ""); cnode *node; config_load_file(root, cfg_path); node = root->first_child; while (node) { if (!strncmp(node->name, "volume_", 7)) volmgr_config_volume(node); else LOGE("Skipping unknown configuration node '%s'", node->name); node = node->next; } return 0; }
/* function: read_config * reads the config file and parses it into the global variable Global_Clatd_Config. returns 0 on failure, 1 on success * file - filename to parse * uplink_interface - interface to use to reach the internet and supplier of address space * plat_prefix - (optional) plat prefix to use, otherwise follow config file */ int read_config(const char *file, const char *uplink_interface, const char *plat_prefix) { cnode *root = config_node("", ""); void *tmp_ptr = NULL; if(!root) { logmsg(ANDROID_LOG_FATAL,"out of memory"); return 0; } memset(&Global_Clatd_Config, '\0', sizeof(Global_Clatd_Config)); config_load_file(root, file); if(root->first_child == NULL) { logmsg(ANDROID_LOG_FATAL,"Could not read config file %s", file); goto failed; } strncpy(Global_Clatd_Config.default_pdp_interface, uplink_interface, sizeof(Global_Clatd_Config.default_pdp_interface)); if(!subnet_from_interface(root,Global_Clatd_Config.default_pdp_interface)) goto failed; if(!config_item_int16_t(root, "mtu", "-1", &Global_Clatd_Config.mtu)) goto failed; if(!config_item_int16_t(root, "ipv4mtu", "-1", &Global_Clatd_Config.ipv4mtu)) goto failed; if(!config_item_ip(root, "ipv4_local_subnet", DEFAULT_IPV4_LOCAL_SUBNET, &Global_Clatd_Config.ipv4_local_subnet)) goto failed; if(!config_item_ip6(root, "ipv6_local_address", DEFAULT_IPV6_LOCAL_ADDRESS, &Global_Clatd_Config.ipv6_local_address)) goto failed; if(plat_prefix) { // plat subnet is coming from the command line if(inet_pton(AF_INET6, plat_prefix, &Global_Clatd_Config.plat_subnet) <= 0) { logmsg(ANDROID_LOG_FATAL,"invalid IPv6 address specified for plat prefix: %s", plat_prefix); goto failed; } } else { tmp_ptr = (void *)config_item_str(root, "plat_from_dns64", "yes"); if(!tmp_ptr || strcmp(tmp_ptr, "no") == 0) { free(tmp_ptr); if(!config_item_ip6(root, "plat_subnet", NULL, &Global_Clatd_Config.plat_subnet)) { logmsg(ANDROID_LOG_FATAL, "plat_from_dns64 disabled, but no plat_subnet specified"); goto failed; } } else { free(tmp_ptr); if(!(Global_Clatd_Config.plat_from_dns64_hostname = config_item_str(root, "plat_from_dns64_hostname", DEFAULT_DNS64_DETECTION_HOSTNAME))) goto failed; dns64_detection(); } } return 1; failed: free(root); free_config(); return 0; }
static void ReadConfigFile(const char* path) { cnode* root = config_node("", ""); cnode* node; config_load_file(root, path); node = root->first_child; while (node) { if (strcmp(node->name, "mount") == 0) { const char* block_device = NULL; const char* mount_point = NULL; const char* driver_store_path = NULL; boolean enable_ums = false; cnode* child = node->first_child; struct asec_cfg asec_stores[ASEC_STORES_MAX]; int asec_idx = 0; memset(asec_stores, 0, sizeof(asec_stores)); while (child) { const char* name = child->name; const char* value = child->value; if (!strncmp(name, "asec_", 5)) { int rc = ProcessAsecData(child, asec_stores, asec_idx); if (rc < 0) { LOG_ERROR("Error processing ASEC cfg data\n"); } else asec_idx = rc; } else if (strcmp(name, "block_device") == 0) block_device = value; else if (strcmp(name, "mount_point") == 0) mount_point = value; else if (strcmp(name, "driver_store_path") == 0) driver_store_path = value; else if (strcmp(name, "enable_ums") == 0 && strcmp(value, "true") == 0) enable_ums = true; child = child->next; } // mount point and removable fields are optional if (block_device && mount_point) { void *mp = AddMountPoint(block_device, mount_point, driver_store_path, enable_ums); int i; for (i = 0; i < asec_idx; i++) { AddAsecToMountPoint(mp, asec_stores[i].name, asec_stores[i].backing_file, asec_stores[i].size, asec_stores[i].mount_point, asec_stores[i].crypt); } } } node = node->next; } }