project_files/frontlib/model/schemelist.c
changeset 7482 d70a5b0d1190
parent 7464 859ab6859854
child 7497 7e1d72fc03c7
equal deleted inserted replaced
7479:c8c552ee3acb 7482:d70a5b0d1190
    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);
   177 }
   177 }
   178 
   178 
   179 void flib_schemelist_destroy(flib_schemelist *list) {
   179 void flib_schemelist_destroy(flib_schemelist *list) {
   180 	if(list) {
   180 	if(list) {
   181 		for(int i=0; i<list->schemeCount; i++) {
   181 		for(int i=0; i<list->schemeCount; i++) {
   182 			flib_scheme_release(list->schemes[i]);
   182 			flib_scheme_destroy(list->schemes[i]);
   183 		}
   183 		}
   184 		free(list->schemes);
   184 		free(list->schemes);
   185 		free(list);
   185 		free(list);
   186 	}
   186 	}
   187 }
   187 }
   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 }