From 6ce5c7668fdeed066afdef714e78a4aa6eddb949 Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Wed, 13 Mar 2019 20:17:25 +0800 Subject: [PATCH 1/2] console/linenoise: support buffered stdout --- components/console/linenoise/linenoise.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/components/console/linenoise/linenoise.c b/components/console/linenoise/linenoise.c index c0f551d67..f88a24620 100644 --- a/components/console/linenoise/linenoise.c +++ b/components/console/linenoise/linenoise.c @@ -106,6 +106,7 @@ #include #include #include +#include #include #include #include @@ -879,6 +880,9 @@ static int linenoiseEdit(char *buf, size_t buflen, const char *prompt) linenoiseEditDeletePrevWord(&l); break; } + if (__fbufsize(stdout) > 0) { + fflush(stdout); + } } return l.len; } From 64949277661757ee44a825e834374a266fce5af0 Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Wed, 13 Mar 2019 20:19:55 +0800 Subject: [PATCH 2/2] examples: don't enable buffering on stdout in console examples MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit newlib uses significantly more stack space when printing to an unbuffered stream. To reduce the amount of stack space required to use the console, don’t disable buffering. linenoise should support unbuffered stdout instead. --- examples/ethernet/iperf/main/iperf_example_main.c | 3 +-- .../peripherals/i2c/i2c_tools/main/i2ctools_example_main.c | 3 +-- examples/system/console/main/console_example_main.c | 3 +-- examples/wifi/iperf/main/iperf_example_main.c | 3 +-- .../wifi/simple_sniffer/main/simple_sniffer_example_main.c | 3 +-- 5 files changed, 5 insertions(+), 10 deletions(-) diff --git a/examples/ethernet/iperf/main/iperf_example_main.c b/examples/ethernet/iperf/main/iperf_example_main.c index b36ea1270..479a192fb 100644 --- a/examples/ethernet/iperf/main/iperf_example_main.c +++ b/examples/ethernet/iperf/main/iperf_example_main.c @@ -56,9 +56,8 @@ static void initialize_nvs() static void initialize_console() { - /* Disable buffering on stdin and stdout */ + /* Disable buffering on stdin */ setvbuf(stdin, NULL, _IONBF, 0); - setvbuf(stdout, NULL, _IONBF, 0); /* Minicom, screen, idf_monitor send CR when ENTER key is pressed */ esp_vfs_dev_uart_set_rx_line_endings(ESP_LINE_ENDINGS_CR); diff --git a/examples/peripherals/i2c/i2c_tools/main/i2ctools_example_main.c b/examples/peripherals/i2c/i2c_tools/main/i2ctools_example_main.c index 302a1d387..30c2d4049 100644 --- a/examples/peripherals/i2c/i2c_tools/main/i2ctools_example_main.c +++ b/examples/peripherals/i2c/i2c_tools/main/i2ctools_example_main.c @@ -56,9 +56,8 @@ static void initialize_nvs() static void initialize_console() { - /* Disable buffering on stdin and stdout */ + /* Disable buffering on stdin */ setvbuf(stdin, NULL, _IONBF, 0); - setvbuf(stdout, NULL, _IONBF, 0); /* Minicom, screen, idf_monitor send CR when ENTER key is pressed */ esp_vfs_dev_uart_set_rx_line_endings(ESP_LINE_ENDINGS_CR); diff --git a/examples/system/console/main/console_example_main.c b/examples/system/console/main/console_example_main.c index f56563f6c..5734a9428 100644 --- a/examples/system/console/main/console_example_main.c +++ b/examples/system/console/main/console_example_main.c @@ -59,9 +59,8 @@ static void initialize_nvs() static void initialize_console() { - /* Disable buffering on stdin and stdout */ + /* Disable buffering on stdin */ setvbuf(stdin, NULL, _IONBF, 0); - setvbuf(stdout, NULL, _IONBF, 0); /* Minicom, screen, idf_monitor send CR when ENTER key is pressed */ esp_vfs_dev_uart_set_rx_line_endings(ESP_LINE_ENDINGS_CR); diff --git a/examples/wifi/iperf/main/iperf_example_main.c b/examples/wifi/iperf/main/iperf_example_main.c index a3a666ed2..50779b3e2 100644 --- a/examples/wifi/iperf/main/iperf_example_main.c +++ b/examples/wifi/iperf/main/iperf_example_main.c @@ -28,9 +28,8 @@ static void initialize_console() { - /* Disable buffering on stdin and stdout */ + /* Disable buffering on stdin */ setvbuf(stdin, NULL, _IONBF, 0); - setvbuf(stdout, NULL, _IONBF, 0); /* Minicom, screen, idf_monitor send CR when ENTER key is pressed */ esp_vfs_dev_uart_set_rx_line_endings(ESP_LINE_ENDINGS_CR); diff --git a/examples/wifi/simple_sniffer/main/simple_sniffer_example_main.c b/examples/wifi/simple_sniffer/main/simple_sniffer_example_main.c index 404859056..d5a62460c 100644 --- a/examples/wifi/simple_sniffer/main/simple_sniffer_example_main.c +++ b/examples/wifi/simple_sniffer/main/simple_sniffer_example_main.c @@ -75,9 +75,8 @@ static void initialize_wifi() /* Initialize console component */ static void initialize_console() { - /* Disable buffering on stdin and stdout */ + /* Disable buffering on stdin */ setvbuf(stdin, NULL, _IONBF, 0); - setvbuf(stdout, NULL, _IONBF, 0); /* Minicom, screen, idf_monitor send CR when ENTER key is pressed */ esp_vfs_dev_uart_set_rx_line_endings(ESP_LINE_ENDINGS_CR);