Просмотр исходного кода

product-mini/nuttx: Use readline for repl mode (#469)

The EOL of NuttX is configurable (CR/LF/CRLF), the implementation
of getline in NuttX need CR or LF as line delimiter(CRLF not supported).
Then we should use readline for better compatibility.

Signed-off-by: Huang Qi <huangqi3@xiaomi.com>

Co-authored-by: Huang Qi <huangqi3@xiaomi.com>
Huang Qi 5 лет назад
Родитель
Сommit
619c2b383c
1 измененных файлов с 13 добавлено и 4 удалено
  1. 13 4
      product-mini/platforms/nuttx/main.c

+ 13 - 4
product-mini/platforms/nuttx/main.c

@@ -10,6 +10,8 @@
 #include <stdio.h>
 #include <string.h>
 
+#include <system/readline.h>
+
 #include "bh_platform.h"
 #include "bh_read_file.h"
 #include "wasm_export.h"
@@ -119,13 +121,20 @@ split_string(char *str, int *count)
 static void *
 app_instance_repl(wasm_module_inst_t module_inst)
 {
-    char *cmd = NULL;
-    size_t len = 0;
+    size_t len = 128;
+    char *cmd = malloc(len);
     ssize_t n;
 
-    while ((printf("webassembly> "), n = getline(&cmd, &len, stdin)) != -1) {
+    if (NULL == cmd) {
+        LOG_ERROR("Wasm repl cmd buffer alloc failed.\n");
+        return NULL;
+    }
+
+    while (
+      (printf("webassembly> "), fflush(stdout), n = std_readline(cmd, len))
+      != -1) {
         bh_assert(n > 0);
-        if (cmd[n - 1] == '\n') {
+        if ((cmd[n - 1] == '\n') || (cmd[n - 1] == '\r')) {
             if (n == 1)
                 continue;
             else