/********************* return RET_NOK on error *********************/ static ret_code_t __write_list(const char * table, const char * file, char ** data, va_list ap) { config_setting_t * setting; const config_t * config; int i=0; SDL_LockMutex(entry_mutex); config = get_config(table,file); if(config==NULL) { SDL_UnlockMutex(entry_mutex); return RET_NOK; } setting = create_tree(config,NULL,NULL,NULL,CONFIG_TYPE_ARRAY,ap); while(data[i] != NULL) { // First try to update existing setting if(config_setting_set_string_elem(setting,i,data[i])==NULL) { // If it down not exist, add a new setting at the end of the list if(config_setting_set_string_elem(setting,-1,data[i])==NULL) { SDL_UnlockMutex(entry_mutex); return RET_NOK; } } i++; } write_config(config,table,file); SDL_UnlockMutex(entry_mutex); return RET_OK; }
/********************* return RET_NOK on error *********************/ static ret_code_t __write_list_index(const char * table, const char * file, const char * data, int index, va_list ap) { config_setting_t * setting = NULL; const config_t * config; int list_size; SDL_LockMutex(entry_mutex); config = get_config(table,file); if(config==NULL) { SDL_UnlockMutex(entry_mutex); return RET_NOK; } setting = create_tree(config,NULL,NULL,NULL,CONFIG_TYPE_ARRAY,ap); // Create empty entry before index list_size = config_setting_length (setting); while( list_size <= index ) { if(config_setting_set_string_elem(setting,-1,"")==NULL) { SDL_UnlockMutex(entry_mutex); return RET_NOK; } list_size++; } if(config_setting_set_string_elem(setting,index,data)==NULL) { SDL_UnlockMutex(entry_mutex); return RET_NOK; } write_config(config,table,file); SDL_UnlockMutex(entry_mutex); return RET_OK; }
void config_setting_copy_elem(config_setting_t *parent, const config_setting_t *src) { config_setting_t *set = NULL; if (config_setting_is_aggregate(src)) config_setting_copy_aggregate(parent, src); else if (CONFIG_TYPE_INT == config_setting_type(src)) { set = config_setting_set_int_elem(parent, -1, config_setting_get_int(src)); config_setting_set_format(set, src->format); } else if (CONFIG_TYPE_INT64 == config_setting_type(src)) { set = config_setting_set_int64_elem(parent, -1, config_setting_get_int64(src)); config_setting_set_format(set, src->format); } else if (CONFIG_TYPE_FLOAT == config_setting_type(src)) { config_setting_set_float_elem(parent, -1, config_setting_get_float(src)); } else if (CONFIG_TYPE_STRING == config_setting_type(src)) { config_setting_set_string_elem(parent, -1, config_setting_get_string(src)); } else if (CONFIG_TYPE_BOOL == config_setting_type(src)) { config_setting_set_bool_elem(parent, -1, config_setting_get_bool(src)); } }
/********************* return RET_NOK on error *********************/ static ret_code_t __add_to_list(const char * table, const char * file, const char * to_be_added, va_list ap) { const config_t * config = NULL; config_setting_t * setting = NULL; char * path; SDL_LockMutex(entry_mutex); config = get_config(table,file); if(config==NULL) { SDL_UnlockMutex(entry_mutex); return RET_NOK; } path = get_path(ap); if(path == NULL) { SDL_UnlockMutex(entry_mutex); return RET_NOK; } setting = config_lookup (config, path); if( setting == NULL ) { SDL_UnlockMutex(entry_mutex); free(path); return RET_NOK; } free(path); if(config_setting_set_string_elem(setting,-1,to_be_added)==NULL) { SDL_UnlockMutex(entry_mutex); return RET_NOK; } write_config(config,table,file); SDL_UnlockMutex(entry_mutex); return RET_OK; }
config_setting_t *cfgAddString(config_setting_t * setting, const TCHAR * value) { char cfgStr[CONFIG_UTF8_MAXSTRING]; return config_setting_set_string_elem(setting, -1, UTF8_Encode(value, cfgStr, CONFIG_UTF8_MAXSTRING)); }
void settings_add_to_config(config_t *config) { int i; char value[256]; config_setting_t *root; config_setting_t *ps2; config_setting_t *group; config_setting_t *setting; if (config == NULL) { return; } root = config_root_setting(config); ps2 = config_setting_add(root,"PS2", CONFIG_TYPE_GROUP); { group = config_setting_add(ps2,"Home",CONFIG_TYPE_GROUP); { setting = config_setting_add(group,"Partition",CONFIG_TYPE_STRING); config_setting_set_string(setting,settings.home.partition); setting = config_setting_add(group,"Directory",CONFIG_TYPE_STRING); config_setting_set_string(setting,settings.home.directory); } group = config_setting_add(ps2,"Display", CONFIG_TYPE_GROUP); { setting = config_setting_add(group,"OffsetX",CONFIG_TYPE_STRING); cfg_int_to_string(value,settings.display.x); config_setting_set_string(setting,value); setting = config_setting_add(group,"OffsetY",CONFIG_TYPE_STRING); cfg_int_to_string(value,settings.display.y); config_setting_set_string(setting,value); setting = config_setting_add(group,"Mode",CONFIG_TYPE_STRING); cfg_int_to_string(value,settings.display.mode); config_setting_set_string(setting,value); setting = config_setting_add(group,"Interlace",CONFIG_TYPE_BOOL); config_setting_set_bool(setting,settings.display.interlace); } group = config_setting_add(ps2,"Sound",CONFIG_TYPE_GROUP); { setting = config_setting_add(group,"Stereo",CONFIG_TYPE_BOOL); config_setting_set_bool(setting,settings.sound.stereo); setting = config_setting_add(group,"Volume",CONFIG_TYPE_STRING); cfg_int_to_string(value,settings.sound.volume); config_setting_set_string(setting,value); } group = config_setting_add(ps2,"Font",CONFIG_TYPE_GROUP); { setting = config_setting_add(group,"Height",CONFIG_TYPE_STRING); cfg_int_to_string(value,settings.font.height); config_setting_set_string(setting,value); setting = config_setting_add(group,"Color",CONFIG_TYPE_ARRAY); for (i = 0; i < 4; i++) { cfg_int_to_string(value,settings.font.color[i]); config_setting_set_string_elem(setting,-1,value); } setting = config_setting_add(group,"Highlight",CONFIG_TYPE_ARRAY); for (i = 0; i < 4; i++) { cfg_int_to_string(value,settings.font.highlight[i]); config_setting_set_string_elem(setting,-1,value); } } group = config_setting_add(ps2,"Input",CONFIG_TYPE_GROUP); { setting = config_setting_add(group,"Port",CONFIG_TYPE_STRING); cfg_int_to_string(value,settings.input.port); config_setting_set_string(setting,value); setting = config_setting_add(group,"Slot",CONFIG_TYPE_STRING); cfg_int_to_string(value,settings.input.slot); config_setting_set_string(setting,value); setting = config_setting_add(group,"Confirm",CONFIG_TYPE_STRING); if (settings.input.confirm == PAD_CROSS) { config_setting_set_string(setting,"X"); } else { config_setting_set_string(setting,"O"); } } group = config_setting_add(ps2,"Devices",CONFIG_TYPE_GROUP); { setting = config_setting_add(group,"Mass",CONFIG_TYPE_BOOL); config_setting_set_bool(setting,settings.devices.mass); setting = config_setting_add(group,"HDD",CONFIG_TYPE_BOOL); config_setting_set_bool(setting,settings.devices.hdd); } } }