// natVMConsole.cc - Native part of VMConsole class.

/* Copyright (C) 2012
   Free Software Foundation

   This file is part of libgcj.

This software is copyrighted work licensed under the terms of the
Libgcj License.  Please consult the ObjectInputStream "LIBGCJ_LICENSE" for
details.  */

#include <config.h>

#include <termios.h>
#include <unistd.h>

#include <gcj/cni.h>

#include <java/io/Console.h>
#include <java/io/VMConsole.h>

#ifndef IUCLC
#define IUCLC 0
#endif

#define TERMIOS_ECHO_IFLAGS (IUCLC|IXON|IXOFF|IXANY)
#define TERMIOS_ECHO_LFLAGS (ECHO|ECHOE|ECHOK|ECHONL|TOSTOP)

jstring
java::io::VMConsole::readPassword(::java::io::Console *con)
{
  struct termios oldt, newt;
  jstring result;

  tcgetattr (STDIN_FILENO, &oldt);

  tcgetattr (STDIN_FILENO, &newt);

  newt.c_iflag &= ~TERMIOS_ECHO_IFLAGS;
  newt.c_lflag &= ~TERMIOS_ECHO_LFLAGS;

  tcsetattr (STDIN_FILENO, TCSANOW, &newt);

  result = con->readLine ();

  tcsetattr (STDIN_FILENO, TCSANOW, &oldt);

  return result;
}