/* * __config_process_value -- * Deal with special config values like true / false. */ static int __config_process_value(WT_CONFIG *conf, WT_CONFIG_ITEM *value) { char *endptr; /* Empty values are okay: we can't do anything interesting with them. */ if (value->len == 0) return (0); if (value->type == WT_CONFIG_ITEM_ID) { if (WT_STRING_MATCH("false", value->str, value->len)) { value->type = WT_CONFIG_ITEM_BOOL; value->val = 0; } else if (WT_STRING_MATCH("true", value->str, value->len)) { value->type = WT_CONFIG_ITEM_BOOL; value->val = 1; } } else if (value->type == WT_CONFIG_ITEM_NUM) { errno = 0; value->val = strtoll(value->str, &endptr, 10); /* Check any leftover characters. */ while (endptr < value->str + value->len) switch (*endptr++) { case 'b': case 'B': /* Byte: no change. */ break; case 'k': case 'K': WT_SHIFT_INT64(value->val, 10); break; case 'm': case 'M': WT_SHIFT_INT64(value->val, 20); break; case 'g': case 'G': WT_SHIFT_INT64(value->val, 30); break; case 't': case 'T': WT_SHIFT_INT64(value->val, 40); break; case 'p': case 'P': WT_SHIFT_INT64(value->val, 50); break; default: /* * We didn't get a well-formed number. That * might be okay, the required type will be * checked by __wt_config_check. */ value->type = WT_CONFIG_ITEM_ID; break; } /* * If we parsed the whole string but the number is out of range, * report an error. Don't report an error for strings that * aren't well-formed integers: if an integer is expected, that * will be caught by __wt_config_check. */ if (value->type == WT_CONFIG_ITEM_NUM && errno == ERANGE) goto range; } return (0); range: return (__config_err(conf, "Number out of range", ERANGE)); }
/* * __config_process_value -- * Deal with special config values like true / false. */ static void __config_process_value(WT_CONFIG_ITEM *value) { char *endptr; /* Empty values are okay: we can't do anything interesting with them. */ if (value->len == 0) return; if (value->type == WT_CONFIG_ITEM_ID) { if (WT_STRING_MATCH("false", value->str, value->len)) { value->type = WT_CONFIG_ITEM_BOOL; value->val = 0; } else if (WT_STRING_MATCH("true", value->str, value->len)) { value->type = WT_CONFIG_ITEM_BOOL; value->val = 1; } } else if (value->type == WT_CONFIG_ITEM_NUM) { errno = 0; value->val = strtoll(value->str, &endptr, 10); /* * If we parsed the string but the number is out of range, * treat the value as an identifier. If an integer is * expected, that will be caught by __wt_config_check. */ if (value->type == WT_CONFIG_ITEM_NUM && errno == ERANGE) goto nonum; /* Check any leftover characters. */ while (endptr < value->str + value->len) switch (*endptr++) { case 'b': case 'B': /* Byte: no change. */ break; case 'k': case 'K': WT_SHIFT_INT64(value->val, 10); break; case 'm': case 'M': WT_SHIFT_INT64(value->val, 20); break; case 'g': case 'G': WT_SHIFT_INT64(value->val, 30); break; case 't': case 'T': WT_SHIFT_INT64(value->val, 40); break; case 'p': case 'P': WT_SHIFT_INT64(value->val, 50); break; default: goto nonum; } } if (0) { nonum: /* * We didn't get a well-formed number. That might be okay, the * required type will be checked by __wt_config_check. */ value->type = WT_CONFIG_ITEM_ID; } }