70 flib_scheme *result = NULL; |
70 flib_scheme *result = NULL; |
71 char *schemeNameKey = makePrefixedName(index+1, "name"); |
71 char *schemeNameKey = makePrefixedName(index+1, "name"); |
72 if(schemeNameKey) { |
72 if(schemeNameKey) { |
73 char *schemeName = NULL; |
73 char *schemeName = NULL; |
74 if(!flib_ini_get_str_opt(ini, &schemeName, schemeNameKey, "Unnamed")) { |
74 if(!flib_ini_get_str_opt(ini, &schemeName, schemeNameKey, "Unnamed")) { |
75 flib_scheme *scheme = flib_scheme_create(meta, schemeName); |
75 flib_scheme *tmpScheme = flib_scheme_create(meta, schemeName); |
76 if(scheme) { |
76 if(tmpScheme) { |
77 if(!readSettingsFromIni(ini, scheme, index) && !readModsFromIni(ini, scheme, index)) { |
77 if(!readSettingsFromIni(ini, tmpScheme, index) && !readModsFromIni(ini, tmpScheme, index)) { |
78 result = flib_scheme_retain(scheme); |
78 result = tmpScheme; |
|
79 tmpScheme = NULL; |
79 } |
80 } |
80 } |
81 } |
81 flib_scheme_release(scheme); |
82 flib_scheme_destroy(tmpScheme); |
82 } |
83 } |
83 free(schemeName); |
84 free(schemeName); |
84 } |
85 } |
85 free(schemeNameKey); |
86 free(schemeNameKey); |
86 return result; |
87 return result; |
116 } |
117 } |
117 |
118 |
118 for(int i=0; i<schemeCount; i++) { |
119 for(int i=0; i<schemeCount; i++) { |
119 flib_scheme *scheme = readSchemeFromIni(meta, ini, i); |
120 flib_scheme *scheme = readSchemeFromIni(meta, ini, i); |
120 if(!scheme || flib_schemelist_insert(list, scheme, i)) { |
121 if(!scheme || flib_schemelist_insert(list, scheme, i)) { |
121 flib_scheme_release(scheme); |
122 flib_scheme_destroy(scheme); |
122 flib_log_e("Error reading scheme %i from config file %s.", i, filename); |
123 flib_log_e("Error reading scheme %i from config file %s.", i, filename); |
123 return fromIniHandleError(list, ini); |
124 return fromIniHandleError(list, ini); |
124 } |
125 } |
125 flib_scheme_release(scheme); |
|
126 } |
126 } |
127 |
127 |
128 |
128 |
129 flib_ini_destroy(ini); |
129 flib_ini_destroy(ini); |
130 return list; |
130 return list; |
131 } |
131 } |
132 |
132 |
133 static int writeSchemeToIni(flib_scheme *scheme, flib_ini *ini, int index) { |
133 static int writeSchemeToIni(const flib_scheme *scheme, flib_ini *ini, int index) { |
134 flib_metascheme *meta = scheme->meta; |
134 flib_metascheme *meta = scheme->meta; |
135 bool error = false; |
135 bool error = false; |
136 |
136 |
137 char *key = makePrefixedName(index+1, "name"); |
137 char *key = makePrefixedName(index+1, "name"); |
138 error |= !key || flib_ini_set_str(ini, key, scheme->name); |
138 error |= !key || flib_ini_set_str(ini, key, scheme->name); |
201 GENERATE_STATIC_LIST_DELETE(deleteScheme, flib_scheme*) |
201 GENERATE_STATIC_LIST_DELETE(deleteScheme, flib_scheme*) |
202 |
202 |
203 int flib_schemelist_insert(flib_schemelist *list, flib_scheme *cfg, int pos) { |
203 int flib_schemelist_insert(flib_schemelist *list, flib_scheme *cfg, int pos) { |
204 if(!log_badargs_if2(list==NULL, cfg==NULL) |
204 if(!log_badargs_if2(list==NULL, cfg==NULL) |
205 && !insertScheme(&list->schemes, &list->schemeCount, cfg, pos)) { |
205 && !insertScheme(&list->schemes, &list->schemeCount, cfg, pos)) { |
206 flib_scheme_retain(cfg); |
|
207 return 0; |
206 return 0; |
208 } |
207 } |
209 return -1; |
208 return -1; |
210 } |
209 } |
211 |
210 |
212 int flib_schemelist_delete(flib_schemelist *list, int pos) { |
211 int flib_schemelist_delete(flib_schemelist *list, int pos) { |
213 if(!log_badargs_if(list==NULL)) { |
212 if(!log_badargs_if(list==NULL)) { |
214 flib_scheme *elem = list->schemes[pos]; |
213 flib_scheme *elem = list->schemes[pos]; |
215 if(!deleteScheme(&list->schemes, &list->schemeCount, pos)) { |
214 if(!deleteScheme(&list->schemes, &list->schemeCount, pos)) { |
216 flib_scheme_release(elem); |
215 flib_scheme_destroy(elem); |
217 return 0; |
216 return 0; |
218 } |
217 } |
219 } |
218 } |
220 return -1; |
219 return -1; |
221 } |
220 } |