static void input_loop(bool interactive) { static const int kInputBufferSize = 100 * 1024; char* inputBuffer = new char[kInputBufferSize]; for (;;) { // read command line if (interactive) { if (!read_command_line(inputBuffer, kInputBufferSize)) break; } else { if (!get_external_command(inputBuffer, kInputBufferSize)) break; } // construct argv vector int result = FSSH_B_BAD_VALUE; ArgVector argVector; if (argVector.Parse(inputBuffer) && argVector.Argc() > 0) { int argc = argVector.Argc(); const char* const* argv = argVector.Argv(); // find command Command* command = CommandManager::Default()->FindCommand(argv[0]); if (command) { // execute it result = command->Do(argc, argv); if (result == COMMAND_RESULT_EXIT) { if (!interactive) reply_to_external_command(0); break; } } else { fprintf(stderr, "Error: Invalid command \"%s\". Type \"help\" " "for a list of supported commands\n", argv[0]); } } if (!interactive) reply_to_external_command(fssh_to_host_error(result)); } if (!interactive) external_command_cleanup(); delete[] inputBuffer; }