See https://mail-archives.apache.org/mod_mbox/nuttx-dev/202012.mbox/%3CCAKFLXYwes3pcDA2zXsL2FcwgCS4PecdmiP9srkGEtTaOoLEhMg%40mail.gmail.com%3E

I don't think this is the correct solution since with Xiao Xiang's recent changes, stdin should never be closed.  But it does give some clues about the nature of the problem:  stdin is no valid; stdout is okay

On 12/13/2020 4:07 PM, Brennan Ashton wrote:
This is impacting all the usbnsh configurations.  I can take another
look later this evening
https://github.com/apache/incubator-nuttx/pull/2526

--Brennan

On Fri, Dec 11, 2020 at 5:05 AM Gregory Nutt <spudan...@gmail.com> wrote:
Several other PRs specifically removed support for fclose (stdin).  Are
you certain you want to restore it?  I think this needs more analysis
and resolution with the previous changes that removed the fclose() of
stdin, stdout, and stderr.

On 12/10/2020 5:37 PM, Masayuki Ishikawa wrote:
Suzuki-san,

Please send a PR (Pull Request) to
https://github.com/apache/incubator-nuttx-apps/

On Thu, Dec 10, 2020 at 5:24 PM SUZUKI Keiji <zuki.ebe...@gmail.com> wrote:

Hi,

I use STM32F407G-DISC1 (MB997D) and build nuttx on macOS Mojave (10.14.6).

The following error occurs with the default configuration of
stm32f4discovery:usbnsh.

    NuttShell (NSH) NuttX-10.0.0
    nsh> nsh: nsh_session: readline failed: 9

The reason seems that instream->fs_fd is -1 instead of 0 in the readline()
function called by
nsh_session().

This error occurs in version 10.0-RC0 and after (I checked 10.0-RC0, 10.0
and current master)
but does not occur in 9.1 and before (I checked 9.1, 8.2 and 7.31).

The following patch fixed it in my environment but I don't know this is a
correct fix.

=== from here ===

diff --git a/nshlib/nsh_usbconsole.c b/nshlib/nsh_usbconsole.c
index 28f63bcc..768a621b 100644
--- a/nshlib/nsh_usbconsole.c
+++ b/nshlib/nsh_usbconsole.c
@@ -77,8 +77,8 @@

static void nsh_configstdio(int fd, FAR struct console_stdio_s *pstate)
{
- /* Make sure the stdout, and stderr are flushed */
-
+ /* Make sure the stdin is closed and the stdout, and stderr are flushed
*/
+ fclose(stdin);
fflush(stdout);
fflush(stderr);

@@ -88,6 +88,9 @@ static void nsh_configstdio(int fd, FAR struct
console_stdio_s *pstate)
dup2(fd, 1);
dup2(fd, 2);

+ /* fdopen stdin */
+ fdopen(0, "r");
+
/* Setup the stdout */

pstate->cn_outfd = 1;

=====

Thanks,
SUZUKI Keiji

Reply via email to