home
·
contact
·
privacy
projects
/
plomrogue
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixed memory handling bug.
[plomrogue]
/
src
/
wincontrol.c
diff --git
a/src/wincontrol.c
b/src/wincontrol.c
index ba397721ae25c8a97d50497653fe374307d3b243..a9f8017f6a3ffb5fc2b75d08b888d37437105994 100644
(file)
--- a/
src/wincontrol.c
+++ b/
src/wincontrol.c
@@
-2,7
+2,7
@@
#include "wincontrol.h"
#include <stdlib.h> /* for free() */
#include "wincontrol.h"
#include <stdlib.h> /* for free() */
-#include <string.h> /* for strlen() */
+#include <string.h> /* for strlen()
, strchr(), strstr()
*/
#include <stdint.h> /* for uint8_t, uint16_t */
#include <stdio.h> /* for fwrite() */
#include <unistd.h> /* for access(), unlink() */
#include <stdint.h> /* for uint8_t, uint16_t */
#include <stdio.h> /* for fwrite() */
#include <unistd.h> /* for access(), unlink() */
@@
-55,11
+55,11
@@
static void set_winconf(struct World * world, char id);
/* Get WinConf by "id"; get id of WinConf mothering "win". */
static struct WinConf * get_winconf_by_id(struct World * world, char id);
/* Get WinConf by "id"; get id of WinConf mothering "win". */
static struct WinConf * get_winconf_by_id(struct World * world, char id);
-/* Get
window draw functin (Win->_draw) identified by "c"
. */
-static void * get_drawfunc_by_char(char c)
+/* Get
(Win->draw) function identified by "c"; NULL if c not mapped to one
. */
+static void * get_drawfunc_by_char(char c)
;
/* Iterate over bytes of world->winconf_ids array. Re-start after null byte. */
/* Iterate over bytes of world->winconf_ids array. Re-start after null byte. */
-static char get_next_winconf_id(struct World * world)
+static char get_next_winconf_id(struct World * world)
;
@@
-86,49
+86,59
@@
static void create_winconf(char id, struct WinConf * wcp)
static void init_winconf_from_file(struct World * world, char id)
{
static void init_winconf_from_file(struct World * world, char id)
{
- char * f_name = "init_winconf_from_file()";
+ char * tmp = "init_winconf_from_file() on window id '_'";
+ char * context = try_malloc(strlen(tmp) + 1, world,
+ "init_winconf_from_file()");
+ memcpy(context, tmp, strlen(tmp) + 1);
+ context[strlen(tmp) - 2] = id;
char * path = string_prefixed_id(world, "config/windows/Win_", id);
char * path = string_prefixed_id(world, "config/windows/Win_", id);
- FILE * file = try_fopen(path, "r", world,
f_name
);
+ FILE * file = try_fopen(path, "r", world,
context
);
free(path);
free(path);
- uint16_t linemax = get_linemax(file, world,
f_name
);
+ uint16_t linemax = get_linemax(file, world,
context
);
char line[linemax + 1];
struct WinConf * winconf = get_winconf_by_id(world, id);
char line[linemax + 1];
struct WinConf * winconf = get_winconf_by_id(world, id);
- try_fgets(line, linemax + 1, file, world,
f_name
);
- winconf->title = try_malloc(strlen(line), world,
f_name
);
+ try_fgets(line, linemax + 1, file, world,
context
);
+ winconf->title = try_malloc(strlen(line), world,
context
);
memcpy(winconf->title, line, strlen(line) - 1); /* Eliminate newline char */
winconf->title[strlen(line) - 1] = '\0'; /* char at end of string. */
memcpy(winconf->title, line, strlen(line) - 1); /* Eliminate newline char */
winconf->title[strlen(line) - 1] = '\0'; /* char at end of string. */
- try_fgets(line, linemax + 1, file, world,
f_name
);
+ try_fgets(line, linemax + 1, file, world,
context
);
winconf->draw = line[0];
winconf->draw = line[0];
- try_fgets(line, linemax + 1, file, world,
f_name
);
+ try_fgets(line, linemax + 1, file, world,
context
);
winconf->height = atoi(line);
if (0 >= winconf->height)
{
winconf->height_type = 1;
}
winconf->height = atoi(line);
if (0 >= winconf->height)
{
winconf->height_type = 1;
}
- try_fgets(line, linemax + 1, file, world,
f_name
);
+ try_fgets(line, linemax + 1, file, world,
context
);
winconf->width = atoi(line);
if (0 >= winconf->width)
{
winconf->width_type = 1;
}
winconf->width = atoi(line);
if (0 >= winconf->width)
{
winconf->width_type = 1;
}
- try_fclose(file, world, f_name);
+ try_fclose(file, world, context);
+ free(context);
}
static void init_win_from_winconf(struct World * world, char id)
{
}
static void init_win_from_winconf(struct World * world, char id)
{
- char * err = "Trouble in init_win_from_file() with init_win().";
+ char * tmp = "Trouble in init_win_from_file() with init_win() (win id: _).";
+ char * err = try_malloc(strlen(tmp) + 1, world, "init_win_from_file()");
+ memcpy(err, tmp, strlen(tmp) + 1);
+ err[strlen(tmp) - 3] = id;
struct WinConf * winconf = get_winconf_by_id(world, id);
struct WinConf * winconf = get_winconf_by_id(world, id);
+ void * f = get_drawfunc_by_char(winconf->draw);
+ exit_err(NULL == f, world, err);
exit_err(init_win(world->wmeta, &winconf->win, winconf->title,
exit_err(init_win(world->wmeta, &winconf->win, winconf->title,
- winconf->height, winconf->width, world,
- get_drawfunc_by_char(winconf->draw)),
+ winconf->height, winconf->width, world, f),
world, err);
world, err);
+ free(err);
}
}
@@
-294,7
+304,7
@@
extern void init_winconfs(struct World * world)
winconf_ids[i] = '\0';
exit_err(errno, world, err_r);
exit_err(closedir(dp), world, err_c);
winconf_ids[i] = '\0';
exit_err(errno, world, err_r);
exit_err(closedir(dp), world, err_c);
- world->winconf_ids = try_malloc(strlen(winconf_ids
+ 1)
, world, f_name);
+ world->winconf_ids = try_malloc(strlen(winconf_ids
) + 1
, world, f_name);
memcpy(world->winconf_ids, winconf_ids, strlen(winconf_ids) + 1);
free(winconf_ids);
memcpy(world->winconf_ids, winconf_ids, strlen(winconf_ids) + 1);
free(winconf_ids);
@@
-372,6
+382,10
@@
extern void sorted_wintoggle(struct World * world)
uint8_t i = 0;
for (; i < linemax - 1; i++)
{
uint8_t i = 0;
for (; i < linemax - 1; i++)
{
+ if (NULL == strchr(world->winconf_ids, win_order[i]))
+ {
+ continue;
+ }
toggle_window(world->wmeta, get_win_by_id(world, win_order[i]));
}
}
toggle_window(world->wmeta, get_win_by_id(world, win_order[i]));
}
}
@@
-408,13
+422,13
@@
extern void save_win_configs(struct World * world)
FILE * file = try_fopen(path_tmp, "w", world, f_name);
char line[6];
FILE * file = try_fopen(path_tmp, "w", world, f_name);
char line[6];
- struct Win * w_p = world->wmeta->
_
chain_start;
+ struct Win * w_p = world->wmeta->chain_start;
uint8_t i = 0;
while (0 != w_p)
{
struct WinConf * wc = get_winconf_by_win(world, w_p);
line[i] = wc->id;
uint8_t i = 0;
while (0 != w_p)
{
struct WinConf * wc = get_winconf_by_win(world, w_p);
line[i] = wc->id;
- w_p = w_p->
_
next;
+ w_p = w_p->next;
i++;
}
line[i] = '\n';
i++;
}
line[i] = '\n';
@@
-444,12
+458,12
@@
extern void toggle_winconfig(struct World * world, struct Win * win)
struct WinConf * wcp = get_winconf_by_win(world, win);
if (0 == wcp->view)
{
struct WinConf * wcp = get_winconf_by_win(world, win);
if (0 == wcp->view)
{
- win->
_
draw = draw_winconf;
+ win->draw = draw_winconf;
wcp->view = 1;
}
else
{
wcp->view = 1;
}
else
{
- win->
_draw = get_drawfunc_by_char(wcp->draw); // wcp->draw
;
+ win->
draw = get_drawfunc_by_char(wcp->draw)
;
wcp->view = 0;
}
}
wcp->view = 0;
}
}