static void __cleanup(void) { if (SDL_WasInit(SDL_INIT_VIDEO | SDL_INIT_TIMER)) { SDL_Quit(); } if (NULL != timer_id) { SDL_RemoveTimer(timer_id); timer_id = NULL; } if (NULL != tanks_timer_id) { SDL_RemoveTimer(tanks_timer_id); tanks_timer_id = NULL; } if (0 != display_lists) { glDeleteLists(display_lists, DISPLAY_LISTS_COUNT); display_lists = 0; } if (l) { landscape_destroy(l); l = NULL; } if (viewer_protocol.connected) { check(client_disconnect(&viewer_protocol, false), "Failed to disconnect.", ""); } if (shoots) { dynamic_array_destroy(shoots); shoots = NULL; } if (explosions) { dynamic_array_destroy(explosions); explosions = NULL; } static bool net_stopped = false; error: if (!net_stopped) { client_net_stop(); net_stopped = true; } }
void config_file_to_opt(const char *filename){ dynamic_array_t *a; if((a=config_file_read(filename))==NULL){ return; } /* Set options according to config file but only if they are not * Masked (overriden on the command line) */ options( dynamic_array_get_count(a), dynamic_array_get_vector(a), OPT_USE_MASK|OPT_FILE|OPT_ERR ); dynamic_array_destroy(a, DESTROY_STR); return; }
dynamic_array_t * config_stream_read(FILE * stream, const char *first_element) { char token[MAX_LINE_LENGTH]; char tail[2]; char format[MAX_LINE_LENGTH]; char format_whitespace[MAX_LINE_LENGTH]; int status; int ntoken; int comment = 0; char *s; int c; int flag; dynamic_array_t *a; if ((a = dynamic_array_create((size_t) 0)) == NULL) { perror("config_file_read: dynamic_array_create"); return (NULL); } /*insert a argv[0] into the dynamic array */ if ((a = dynamic_array_add_element(a, (first_element != NULL ? first_element : ""), DESTROY_STR, DUP_STR)) == NULL) { perror("config_file_read: dynamic_array_add_element"); return (NULL); } sprintf(format, "%%%d[^ \t\n\r]%%1[ \t\n\r]", MAX_LINE_LENGTH); sprintf(format_whitespace, "%%%d[ \t\r]%%1[\n]", MAX_LINE_LENGTH); ntoken = 0; while ((status = fscanf(stream, format, token, tail)) != EOF) { if (status == 0) { flag = 1; while (flag) { c = fgetc(stream); switch (c) { case EOF: dynamic_array_destroy(a, DESTROY_STR); return (NULL); case '\n': return (a); case '\t': case '\r': case ' ': break; default: ungetc(c, stream); flag = 0; } } continue; } if (!comment && strcmp(token, "ipvsadm")) { ntoken++; if ((a = dynamic_array_add_element(a, token, DESTROY_STR, DUP_STR)) == NULL) { perror("config_file_read: dynamic_array_add_element"); dynamic_array_destroy(a, DESTROY_STR); return (NULL); } } if ((s = strrchr(tail, '\n')) != NULL) { return (a); } if (!comment) { comment = (strchr((s != NULL ? s : tail), '#') == NULL) ? 0 : 1; } } if (ntoken == 0) { dynamic_array_destroy(a, DESTROY_STR); return (NULL); } return (a); }