equal
deleted
inserted
replaced
27 #include <string.h> |
27 #include <string.h> |
28 #include <stdlib.h> |
28 #include <stdlib.h> |
29 |
29 |
30 static flib_team *from_ini_handleError(flib_team *result, flib_ini *settingfile) { |
30 static flib_team *from_ini_handleError(flib_team *result, flib_ini *settingfile) { |
31 flib_ini_destroy(settingfile); |
31 flib_ini_destroy(settingfile); |
32 flib_team_release(result); |
32 flib_team_destroy(result); |
33 return NULL; |
33 return NULL; |
34 } |
34 } |
35 |
35 |
36 flib_team *flib_team_from_ini(const char *filename) { |
36 flib_team *flib_team_from_ini(const char *filename) { |
37 if(log_badargs_if(filename==NULL)) { |
37 if(log_badargs_if(filename==NULL)) { |
38 return NULL; |
38 return NULL; |
39 } |
39 } |
40 |
40 |
41 flib_team *result = flib_team_retain(flib_calloc(1, sizeof(flib_team))); |
41 flib_team *result = flib_calloc(1, sizeof(flib_team)); |
42 flib_ini *ini = NULL; |
42 flib_ini *ini = NULL; |
43 |
43 |
44 if(!result) { |
44 if(!result) { |
45 return from_ini_handleError(result, ini); |
45 return from_ini_handleError(result, ini); |
46 } |
46 } |
126 return from_ini_handleError(result, ini); |
126 return from_ini_handleError(result, ini); |
127 } |
127 } |
128 |
128 |
129 flib_ini_destroy(ini); |
129 flib_ini_destroy(ini); |
130 return result; |
130 return result; |
|
131 } |
|
132 |
|
133 void flib_team_destroy(flib_team *team) { |
|
134 if(team) { |
|
135 for(int i=0; i<HEDGEHOGS_PER_TEAM; i++) { |
|
136 free(team->hogs[i].name); |
|
137 free(team->hogs[i].hat); |
|
138 flib_weaponset_release(team->hogs[i].weaponset); |
|
139 } |
|
140 free(team->name); |
|
141 free(team->grave); |
|
142 free(team->fort); |
|
143 free(team->voicepack); |
|
144 free(team->flag); |
|
145 if(team->bindings) { |
|
146 for(int i=0; i<team->bindingCount; i++) { |
|
147 free(team->bindings[i].action); |
|
148 free(team->bindings[i].binding); |
|
149 } |
|
150 } |
|
151 free(team->bindings); |
|
152 free(team->ownerName); |
|
153 free(team); |
|
154 } |
131 } |
155 } |
132 |
156 |
133 static int writeTeamSection(const flib_team *team, flib_ini *ini) { |
157 static int writeTeamSection(const flib_team *team, flib_ini *ini) { |
134 if(flib_ini_create_section(ini, "team")) { |
158 if(flib_ini_create_section(ini, "team")) { |
135 return -1; |
159 return -1; |
205 flib_ini_destroy(ini); |
229 flib_ini_destroy(ini); |
206 } |
230 } |
207 return result; |
231 return result; |
208 } |
232 } |
209 |
233 |
210 flib_team *flib_team_retain(flib_team *team) { |
|
211 if(team) { |
|
212 flib_retain(&team->_referenceCount, "flib_team"); |
|
213 } |
|
214 return team; |
|
215 } |
|
216 |
|
217 void flib_team_release(flib_team *team) { |
|
218 if(team && flib_release(&team->_referenceCount, "flib_team")) { |
|
219 for(int i=0; i<HEDGEHOGS_PER_TEAM; i++) { |
|
220 free(team->hogs[i].name); |
|
221 free(team->hogs[i].hat); |
|
222 flib_weaponset_release(team->hogs[i].weaponset); |
|
223 } |
|
224 free(team->name); |
|
225 free(team->grave); |
|
226 free(team->fort); |
|
227 free(team->voicepack); |
|
228 free(team->flag); |
|
229 if(team->bindings) { |
|
230 for(int i=0; i<team->bindingCount; i++) { |
|
231 free(team->bindings[i].action); |
|
232 free(team->bindings[i].binding); |
|
233 } |
|
234 } |
|
235 free(team->bindings); |
|
236 free(team->ownerName); |
|
237 free(team); |
|
238 } |
|
239 } |
|
240 |
|
241 void flib_team_set_weaponset(flib_team *team, flib_weaponset *set) { |
234 void flib_team_set_weaponset(flib_team *team, flib_weaponset *set) { |
242 if(team) { |
235 if(team) { |
243 for(int i=0; i<HEDGEHOGS_PER_TEAM; i++) { |
236 for(int i=0; i<HEDGEHOGS_PER_TEAM; i++) { |
244 flib_weaponset_release(team->hogs[i].weaponset); |
237 flib_weaponset_release(team->hogs[i].weaponset); |
245 team->hogs[i].weaponset = flib_weaponset_retain(set); |
238 team->hogs[i].weaponset = flib_weaponset_retain(set); |
264 } |
257 } |
265 |
258 |
266 flib_team *flib_team_copy(const flib_team *team) { |
259 flib_team *flib_team_copy(const flib_team *team) { |
267 flib_team *result = NULL; |
260 flib_team *result = NULL; |
268 if(team) { |
261 if(team) { |
269 flib_team *tmpTeam = flib_team_retain(flib_calloc(1, sizeof(flib_team))); |
262 flib_team *tmpTeam = flib_calloc(1, sizeof(flib_team)); |
270 if(tmpTeam) { |
263 if(tmpTeam) { |
271 bool error = false; |
264 bool error = false; |
272 |
265 |
273 for(int i=0; i<HEDGEHOGS_PER_TEAM; i++) { |
266 for(int i=0; i<HEDGEHOGS_PER_TEAM; i++) { |
274 tmpTeam->hogs[i].name = strdupWithError(team->hogs[i].name, &error); |
267 tmpTeam->hogs[i].name = strdupWithError(team->hogs[i].name, &error); |
313 if(!error) { |
306 if(!error) { |
314 result = tmpTeam; |
307 result = tmpTeam; |
315 tmpTeam = 0; |
308 tmpTeam = 0; |
316 } |
309 } |
317 } |
310 } |
318 flib_team_release(tmpTeam); |
311 flib_team_destroy(tmpTeam); |
319 } |
312 } |
320 return result; |
313 return result; |
321 } |
314 } |