Re: [AD] mode selection |
[ Thread Index | Date Index | More lists.liballeg.org/allegro-developers Archives ]
> updated, my porting to 4.1.10 introduced a bug. + if (is_autodetect || + !(gfx_mode_list = get_gfx_mode_list(driver_list_entry->id))) { + size_t n, max_count = sizeof(default_mode_list) / sizeof(MODE_LIST); driver_list_entry->mode_count = 0; + driver_list_entry->mode_list = NULL; + driver_list_entry->fetch_mode_list_ptr = NULL; You leak memory by setting driver_list_entry->fetch_mode_list_ptr to NULL while dynamically allocating the list. And I think that using dynamic allocation even though there is no sieve function is inefficient. The code that dynamically grows the list is basically written twice. -int gfx_mode_select_ex(int *card, int *w, int *h, int *color_depth) +int gfx_mode_select_sieve( + int *card, int *w, int *h, int *color_depth, + int (*sieve)(int,int,int,int) +) Ouch! Weird formatting... +int gfx_mode_select_ex(int *card, int *w, int *h, int *color_depth) +{ + ASSERT(card); + ASSERT(w); + ASSERT(h); + ASSERT(color_depth); + return gfx_mode_select_sieve(card, w, h, color_depth, NULL); Take a look at what the function just below passes as 'color_depth'. You need either to remove the 4th assert or redirect gfx_mode_select(). +@@int @gfx_mode_select_sieve(int *card, int *w, int *h, int (); +@xref gfx_mode_select, gfx_mode_select_ex, set_color_depth, set_gfx_mode, gui_fg_color + Displays the Allegro graphics mode selection dialog, which allows the + user to select a screen mode and graphics card. Stores the selection in + the three variables, and returns zero if it was closed with the Cancel + button or non-zero if it was OK'd. Hum... I renamed gfx_mode_select_sieve into gfx_mode_select_filter and commited the attached patch to mainline. -- Eric Botcazou
Attachment:
modesel_filter.diff.gz
Description: GNU Zip compressed data
Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |