/* * __config_getraw -- * Given a config parser, find the final value for a given key. */ static int __config_getraw( WT_CONFIG *cparser, WT_CONFIG_ITEM *key, WT_CONFIG_ITEM *value, bool top) { WT_CONFIG sparser; WT_CONFIG_ITEM k, v, subk; WT_DECL_RET; bool found; found = false; while ((ret = __config_next(cparser, &k, &v)) == 0) { if (k.type != WT_CONFIG_ITEM_STRING && k.type != WT_CONFIG_ITEM_ID) continue; if (k.len == key->len && strncmp(key->str, k.str, k.len) == 0) { *value = v; found = true; } else if (k.len < key->len && key->str[k.len] == '.' && strncmp(key->str, k.str, k.len) == 0) { subk.str = key->str + k.len + 1; subk.len = (key->len - k.len) - 1; WT_RET(__wt_config_initn( cparser->session, &sparser, v.str, v.len)); if ((ret = __config_getraw( &sparser, &subk, value, false)) == 0) found = true; WT_RET_NOTFOUND_OK(ret); } } WT_RET_NOTFOUND_OK(ret); if (!found) return (WT_NOTFOUND); return (top ? __config_process_value(cparser, value) : 0); }
/* * __wt_config_next -- * Get the next config item in the string and process the value. */ int __wt_config_next(WT_CONFIG *conf, WT_CONFIG_ITEM *key, WT_CONFIG_ITEM *value) { WT_RET(__config_next(conf, key, value)); __config_process_value(value); return (0); }