From 79c4ec1102d1749ba2e05780158457fd27b0fcf9 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Mon, 16 Nov 2015 07:40:20 +0200 Subject: [PATCH] unix/input: Switch to POSIX I/O for history reading/writing. --- unix/input.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/unix/input.c b/unix/input.c index a38b63ae3c..b2cf8efa8a 100644 --- a/unix/input.c +++ b/unix/input.c @@ -27,6 +27,7 @@ #include #include #include +#include #include "py/mpstate.h" #include "py/mphal.h" @@ -100,14 +101,18 @@ void prompt_read_history(void) { vstr_t vstr; vstr_init(&vstr, 50); vstr_printf(&vstr, "%s/.micropython.history", home); - FILE *fp = fopen(vstr_null_terminated_str(&vstr), "r"); - if (fp != NULL) { + int fd = open(vstr_null_terminated_str(&vstr), O_RDONLY); + if (fd != -1) { vstr_reset(&vstr); for (;;) { - int c = fgetc(fp); - if (c == EOF || c == '\n') { + char c; + int sz = read(fd, &c, 1); + if (sz < 0) { + break; + } + if (sz == 0 || c == '\n') { readline_push_history(vstr_null_terminated_str(&vstr)); - if (c == EOF) { + if (sz == 0) { break; } vstr_reset(&vstr); @@ -115,7 +120,7 @@ void prompt_read_history(void) { vstr_add_byte(&vstr, c); } } - fclose(fp); + close(fd); } vstr_clear(&vstr); } @@ -133,16 +138,18 @@ void prompt_write_history(void) { vstr_t vstr; vstr_init(&vstr, 50); vstr_printf(&vstr, "%s/.micropython.history", home); - FILE *fp = fopen(vstr_null_terminated_str(&vstr), "w"); - if (fp != NULL) { + int fd = open(vstr_null_terminated_str(&vstr), O_CREAT | O_TRUNC | O_WRONLY, 0644); + if (fd != -1) { for (int i = MP_ARRAY_SIZE(MP_STATE_PORT(readline_hist)) - 1; i >= 0; i--) { const char *line = MP_STATE_PORT(readline_hist)[i]; if (line != NULL) { - fwrite(line, 1, strlen(line), fp); - fputc('\n', fp); + int res; + res = write(fd, line, strlen(line)); + res = write(fd, "\n", 1); + (void)res; } } - fclose(fp); + close(fd); } } #elif MICROPY_USE_READLINE == 2