/* * adds a string to current string value */ void v_strcat(var_t *var, const char *string) { if (var->type == V_INT || var->type == V_NUM) { v_tostr(var); } if (var->type == V_STR) { var->v.p.size = strlen(var->v.p.ptr) + strlen(string) + 1; var->v.p.ptr = realloc(var->v.p.ptr, var->v.p.size); strcat(var->v.p.ptr, string); } else { err_typemismatch(); } }
int mod_parstr_ptr(int n, slib_par_t *params, int param_count, char **ptr) { var_t *param; if (n < 0 || n >= param_count) { return 0; } param = params[n].var_p; if (param->type != V_STR) { v_tostr(param); } *ptr = param->v.p.ptr; return 1; }
var_p_t hashmap_putv(var_p_t map, const var_p_t key) { // hashmap takes ownership of key if (key->type != V_STR) { // keys are always strings v_tostr(key); } Node *node = hashmap_search(map, key->v.p.ptr, key->v.p.length); if (node->key == NULL) { node->key = key; node->value = v_new(); map->v.m.count++; } else { // discard unused key v_free(key); v_detach(key); } return node->value; }
int mod_opt_parstr_ptr(int n, slib_par_t *params, int param_count, char **ptr, const char *def_val) { var_t *param; if (n < 0) { return 0; } if (n < param_count) { param = params[n].var_p; if (param->type != V_STR) { v_tostr(param); } *ptr = param->v.p.ptr; } else { *ptr = def_val; } return 1; }
/* * return the string value of 'var' */ char *v_getstr(var_t *var) { if (var->type != V_STR) { v_tostr(var); } return var->v.p.ptr; }