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)
|
||||
{
|
||||
struct edit_history *h;
|
||||
@ -1053,6 +1096,8 @@ int edit_init(void (*cmd_cb)(void *ctx, char *cmd),
|
||||
{
|
||||
dl_list_init(&history_list);
|
||||
history_curr = NULL;
|
||||
if (history_file)
|
||||
history_read(history_file);
|
||||
|
||||
edit_cb_ctx = ctx;
|
||||
edit_cmd_cb = cmd_cb;
|
||||
@ -1077,6 +1122,8 @@ void edit_deinit(const char *history_file,
|
||||
int (*filter_cb)(void *ctx, const char *cmd))
|
||||
{
|
||||
struct edit_history *h;
|
||||
if (history_file)
|
||||
history_write(history_file, filter_cb);
|
||||
while ((h = dl_list_first(&history_list, struct edit_history, list))) {
|
||||
dl_list_del(&h->list);
|
||||
os_free(h);
|
||||
|
Loading…
Reference in New Issue
Block a user