X-Git-Url: https://plomlompom.com/repos/test.html?a=blobdiff_plain;f=src%2Fwincontrol.c;h=6ce1f324f6801ed7e3d61bab73b5d7d410145684;hb=ab6bfe8653ea22262bd277874fd1e0073e17b647;hp=6fb9acb8a4c9f575ff93761efa9ccac9405c9615;hpb=52f02f0f8614afa7d4776e90d955eff9c3659f80;p=plomrogue diff --git a/src/wincontrol.c b/src/wincontrol.c index 6fb9acb..6ce1f32 100644 --- a/src/wincontrol.c +++ b/src/wincontrol.c @@ -324,14 +324,15 @@ extern void init_winconfs() char * f_name = "init_winconfs()"; /* Fill world.winconf_ids with config/windows/Win_* filenames' end chars. */ + uint8_t max_wins = 255; /* Maximum number of window ids to store. */ DIR * dp = opendir("config/windows"); exit_trouble(NULL == dp, f_name, "opendir()"); struct dirent * fn; errno = 0; - char * winconf_ids = try_malloc(256, f_name); + char * winconf_ids = try_malloc(max_wins + 1, f_name); uint8_t i = 0; char id; - while (NULL != (fn = readdir(dp))) + while (NULL != (fn = readdir(dp)) && i < max_wins) { if (5 == strlen(fn->d_name) && fn->d_name == strstr(fn->d_name, "Win_")) { @@ -388,17 +389,17 @@ extern void sorted_wintoggle_and_activate() { char * f_name = "sorted_wintoggle_and_activate()"; + /* Read from file order of windows to be toggled + active win selection. */ char * path = "config/windows/toggle_order_and_active"; FILE * file = try_fopen(path, "r", f_name); uint16_t linemax = get_linemax(file, f_name); char win_order[linemax + 1]; try_fgets(win_order, linemax + 1, file, f_name); - - uint8_t a = 0; + uint8_t a; exit_trouble(read_uint8(file, &a), f_name, "read_uint8()"); - try_fclose(file, f_name); + /* Toggle windows and set active window selection. */ uint8_t i = 0; for (; i < strlen(win_order) - 1; i++) { @@ -407,7 +408,6 @@ extern void sorted_wintoggle_and_activate() continue; } toggle_window(win_order[i]); - if (a == (uint8_t) win_order[i]) { world.wmeta->active = get_win_by_id(win_order[i]); @@ -421,20 +421,22 @@ extern void save_win_configs() { char * f_name = "save_win_configs()"; + /* Save individual world.winconfs to their proper files. */ + uint8_t max_wins = 255; /* So many winconf ids fit into world.winconf_ids.*/ char id; while (0 != (id = get_next_winconf_id())) { save_win_config(id); } + /* Save order of windows to toggle on start / which to select as active. */ char * path = "config/windows/toggle_order_and_active"; char * path_tmp = "config/windows/toggle_order_and_active_tmp"; FILE * file = try_fopen(path_tmp, "w", f_name); - - char line[6]; + char line[max_wins + 2]; struct Win * w_p = world.wmeta->chain_start; uint8_t i = 0; - while (0 != w_p) + while (0 != w_p && i < max_wins) { struct WinConf * wc = get_winconf_by_win(w_p); line[i] = wc->id; @@ -442,13 +444,13 @@ extern void save_win_configs() i++; } line[i] = '\n'; + line[i + 1] = '\0'; try_fwrite(line, sizeof(char), strlen(line), file, f_name); if (0 != world.wmeta->active) { struct WinConf * wc = get_winconf_by_win(world.wmeta->active); write_uint8(wc->id, file); } - try_fclose_unlink_rename(file, path_tmp, path, f_name); }