static void free_components(dumb_ptr<component_t> *component_holder) { if (*component_holder == NULL) return; free_components(&(*component_holder)->next); (*component_holder).delete_(); *component_holder = NULL; }
static effect_set_t *check_spellguard(dumb_ptr<spellguard_t> guard, dumb_ptr<map_session_data> caster, dumb_ptr<env_t> env, int *near_miss) { spellguard_check_t check; effect_set_t *retval; check.catalysts = NULL; check.components = NULL; check.mana = 0; check.casttime = interval_t::zero(); retval = spellguard_check_sub(&check, guard, caster, env, near_miss); free_components(&check.catalysts); free_components(&check.components); return retval; }
int main(int argc, char *argv[]) { program *prog = (program *) malloc(sizeof(program)); player *user = (player *) malloc(sizeof(player)); whitespace_info *whitespace_prog = (whitespace_info *) malloc(sizeof(whitespace_info)); printing_board *first_board = (printing_board *) malloc(sizeof(printing_board)); password_info *pw_info = (password_info *) malloc(sizeof(password_info)); SDL_Simplewin sw; other_arg_type argument_indicator; check_initialisation(prog, user, whitespace_prog, first_board, pw_info); password_check(pw_info); if(pw_info -> pw_indicator == accept){ check_command_line_arguments(user, argc, &argument_indicator, argv, pw_info); initialisation(prog, user, first_board); if(argument_indicator == secret){ whitespace_functions(argv[1], whitespace_prog); open_program_file("ws_to_reg_translation.txt", prog); } else if(argument_indicator == combine_files){ combine_ws_reg_files(prog, whitespace_prog, argv[1], argv[2]); } else if(argument_indicator != password_change){ open_program_file(argv[1], prog); } if(argument_indicator == regular || argument_indicator == secret){ parse_text_and_interpret(prog, user, first_board); printing(user, first_board, &sw); } else if(argument_indicator != password_change){ write_file_to_whitespace(prog); } } free_components(first_board, prog, user, whitespace_prog, pw_info); return(0); }
static effect_set_t *spellguard_check_sub(spellguard_check_t *check, dumb_ptr<spellguard_t> guard, dumb_ptr<map_session_data> caster, dumb_ptr<env_t> env, int *near_miss) { if (guard == NULL) return NULL; switch (guard->ty) { case SPELLGUARD::CONDITION: if (!magic_eval_int(env, guard->s.s_condition)) return NULL; break; case SPELLGUARD::COMPONENTS: copy_components(&check->components, guard->s.s_components); break; case SPELLGUARD::CATALYSTS: copy_components(&check->catalysts, guard->s.s_catalysts); break; case SPELLGUARD::CHOICE: { spellguard_check_t altcheck = *check; effect_set_t *retval; altcheck.components = NULL; altcheck.catalysts = NULL; copy_components(&altcheck.catalysts, check->catalysts); copy_components(&altcheck.components, check->components); retval = spellguard_check_sub(&altcheck, guard->next, caster, env, near_miss); free_components(&altcheck.catalysts); free_components(&altcheck.components); if (retval) return retval; else return spellguard_check_sub(check, guard->s.s_alt, caster, env, near_miss); } case SPELLGUARD::MANA: check->mana += magic_eval_int(env, guard->s.s_mana); break; case SPELLGUARD::CASTTIME: check->casttime += static_cast<interval_t>(magic_eval_int(env, guard->s.s_mana)); break; case SPELLGUARD::EFFECT: if (spellguard_can_satisfy(check, caster, env, near_miss)) return &guard->s.s_effect; else return NULL; default: FPRINTF(stderr, "Unexpected spellguard type %d\n", guard->ty); return NULL; } return spellguard_check_sub(check, guard->next, caster, env, near_miss); }