mirror of
https://github.com/vanhoefm/fragattacks.git
synced 2024-11-25 16:58:41 -05:00
edit: Implement history file read/write
This commit is contained in:
parent
19ec1f262e
commit
70de7d56fe
@ -250,6 +250,49 @@ static void history_next(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void history_read(const char *fname)
|
||||||
|
{
|
||||||
|
FILE *f;
|
||||||
|
char buf[CMD_BUF_LEN], *pos;
|
||||||
|
|
||||||
|
f = fopen(fname, "r");
|
||||||
|
if (f == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
while (fgets(buf, CMD_BUF_LEN, f)) {
|
||||||
|
for (pos = buf; *pos; pos++) {
|
||||||
|
if (*pos == '\r' || *pos == '\n') {
|
||||||
|
*pos = '\0';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
history_add(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void history_write(const char *fname,
|
||||||
|
int (*filter_cb)(void *ctx, const char *cmd))
|
||||||
|
{
|
||||||
|
FILE *f;
|
||||||
|
struct edit_history *h;
|
||||||
|
|
||||||
|
f = fopen(fname, "w");
|
||||||
|
if (f == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
dl_list_for_each_reverse(h, &history_list, struct edit_history, list) {
|
||||||
|
if (filter_cb && filter_cb(edit_cb_ctx, h->str))
|
||||||
|
continue;
|
||||||
|
fprintf(f, "%s\n", h->str);
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void history_debug_dump(void)
|
static void history_debug_dump(void)
|
||||||
{
|
{
|
||||||
struct edit_history *h;
|
struct edit_history *h;
|
||||||
@ -1053,6 +1096,8 @@ int edit_init(void (*cmd_cb)(void *ctx, char *cmd),
|
|||||||
{
|
{
|
||||||
dl_list_init(&history_list);
|
dl_list_init(&history_list);
|
||||||
history_curr = NULL;
|
history_curr = NULL;
|
||||||
|
if (history_file)
|
||||||
|
history_read(history_file);
|
||||||
|
|
||||||
edit_cb_ctx = ctx;
|
edit_cb_ctx = ctx;
|
||||||
edit_cmd_cb = cmd_cb;
|
edit_cmd_cb = cmd_cb;
|
||||||
@ -1077,6 +1122,8 @@ void edit_deinit(const char *history_file,
|
|||||||
int (*filter_cb)(void *ctx, const char *cmd))
|
int (*filter_cb)(void *ctx, const char *cmd))
|
||||||
{
|
{
|
||||||
struct edit_history *h;
|
struct edit_history *h;
|
||||||
|
if (history_file)
|
||||||
|
history_write(history_file, filter_cb);
|
||||||
while ((h = dl_list_first(&history_list, struct edit_history, list))) {
|
while ((h = dl_list_first(&history_list, struct edit_history, list))) {
|
||||||
dl_list_del(&h->list);
|
dl_list_del(&h->list);
|
||||||
os_free(h);
|
os_free(h);
|
||||||
|
Loading…
Reference in New Issue
Block a user