rendered paste bodycvar_result_e eval_string(cvar_type_t* type, void* vdata, int argc, char** argv)
{
char** data = (char**) vdata;
if(argc == 2) {
if(*data) {
free(*data);
}
*data = strdup(argv[1]);
} else {
output("%s: string: %s", argv[0], *data);
}
return cvar_kNoError;
}
cvar_result_e cmd_string(int argc, char** argv)
{
if(argc == 3) {
cvar_t* cmd;
cmd = cvar_create(argv[1], g_stringtype);
*((char**) cmd->data) = strdup(argv[2]);
} else {
output("usage: %s <cvar> <value>", argv[0]);
}
return cvar_kNoError;
}
void view_string(char* buffer, size_t len, cvar_type_t* type, void* data)
{
sprintf(buffer, "string: %s", *((char**) data));
}
/* ... */
g_stringtype = cvar_type_new("string");
cvar_type_set_eval(g_stringtype, eval_string);
cvar_type_set_dtor(g_stringtype, cvar_type_dtor_free_pointer_default);
cvar_type_set_datasize(g_stringtype, sizeof(char*));
cvar_type_set_view(g_stringtype, view_string);
cvar_set_cmd("string", cmd_string);