gpg: Change OID of Ed25519 and add Brainpool oids.
[gnupg.git] / common / ttyio.c
index 4f30b4b..a3f6327 100644 (file)
@@ -4,12 +4,22 @@
  *
  * This file is part of GnuPG.
  *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
+ * This file is free software; you can redistribute it and/or modify
+ * it under the terms of either
  *
- * GnuPG is distributed in the hope that it will be useful,
+ *   - the GNU Lesser General Public License as published by the Free
+ *     Software Foundation; either version 3 of the License, or (at
+ *     your option) any later version.
+ *
+ * or
+ *
+ *   - the GNU General Public License as published by the Free
+ *     Software Foundation; either version 2 of the License, or (at
+ *     your option) any later version.
+ *
+ * or both in parallel, as here.
+ *
+ * This file is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
 #include <string.h>
 #include <stdarg.h>
 #include <unistd.h>
+
+#if defined(HAVE_W32_SYSTEM) && !defined(HAVE_W32CE_SYSTEM)
+# define USE_W32_CONSOLE 1
+#endif
+
 #ifdef HAVE_TCGETATTR
 #include <termios.h>
 #else
 #define HAVE_TCGETATTR
 #endif
 #endif
-#ifdef _WIN32 /* use the odd Win32 functions */
-#include <windows.h>
-#ifdef HAVE_TCGETATTR
-#error mingw32 and termios
-#endif
+#ifdef USE_W32_CONSOLE
+# include <windows.h>
+# ifdef HAVE_TCGETATTR
+#  error mingw32 and termios
+# endif
 #endif
 #include <errno.h>
 #include <ctype.h>
@@ -52,7 +67,8 @@
 
 #define CONTROL_D ('D' - 'A' + 1)
 
-#ifdef _WIN32 /* use the odd Win32 functions */
+
+#ifdef USE_W32_CONSOLE
 static struct {
     HANDLE in, out;
 } con;
@@ -116,7 +132,7 @@ tty_get_ttyname (void)
     }
 #endif /*HAVE_CTERMID*/
   /* Assume the standard tty on memory error or when tehre is no
-     certmid. */
+     ctermid. */
   return name? name : "/dev/tty";
 }
 
@@ -140,7 +156,7 @@ init_ttyfp(void)
     if( initialized )
        return;
 
-#if defined(_WIN32)
+#if defined(USE_W32_CONSOLE)
     {
        SECURITY_ATTRIBUTES sa;
 
@@ -168,17 +184,19 @@ init_ttyfp(void)
     ttyfp = stdout; /* Fixme: replace by the real functions: see wklib */
     if (my_rl_init_stream)
       my_rl_init_stream (ttyfp);
+#elif defined (HAVE_W32CE_SYSTEM)
+    ttyfp = stderr;
 #else
     ttyfp = batchmode? stderr : fopen (tty_get_ttyname (), "r+");
     if( !ttyfp ) {
-       log_error("cannot open `%s': %s\n", tty_get_ttyname (),
+       log_error("cannot open '%s': %s\n", tty_get_ttyname (),
                   strerror(errno) );
        exit(2);
     }
     if (my_rl_init_stream)
       my_rl_init_stream (ttyfp);
 #endif
-    
+
 
 #ifdef HAVE_TCGETATTR
     atexit( cleanup );
@@ -216,8 +234,8 @@ tty_printf( const char *fmt, ... )
        init_ttyfp();
 
     va_start( arg_ptr, fmt ) ;
-#ifdef _WIN32
-    {   
+#ifdef USE_W32_CONSOLE
+    {
         char *buf = NULL;
         int n;
        DWORD nwritten;
@@ -225,7 +243,7 @@ tty_printf( const char *fmt, ... )
        n = vasprintf(&buf, fmt, arg_ptr);
        if( !buf )
            log_bug("vasprintf() failed\n");
-        
+
        if( !WriteConsoleA( con.out, buf, n, &nwritten, NULL ) )
            log_fatal("WriteConsole failed: rc=%d", (int)GetLastError() );
        if( n != nwritten )
@@ -263,16 +281,16 @@ tty_fprintf (estream_t fp, const char *fmt, ... )
     init_ttyfp ();
 
   va_start (arg_ptr, fmt);
-#ifdef _WIN32
-  {   
+#ifdef USE_W32_CONSOLE
+  {
     char *buf = NULL;
     int n;
     DWORD nwritten;
-    
+
     n = vasprintf(&buf, fmt, arg_ptr);
     if (!buf)
       log_bug("vasprintf() failed\n");
-    
+
     if (!WriteConsoleA( con.out, buf, n, &nwritten, NULL ))
       log_fatal("WriteConsole failed: rc=%d", (int)GetLastError() );
     if (n != nwritten)
@@ -300,7 +318,7 @@ tty_print_string ( const byte *p, size_t n )
     if( !initialized )
        init_ttyfp();
 
-#ifdef _WIN32
+#ifdef USE_W32_CONSOLE
     /* not so effective, change it if you want */
     for( ; n; n--, p++ )
        if( iscntrl( *p ) ) {
@@ -394,7 +412,7 @@ do_get( const char *prompt, int hidden )
     buf = xmalloc((n=50));
     i = 0;
 
-#ifdef _WIN32 /* windoze version */
+#ifdef USE_W32_CONSOLE
     if( hidden )
        SetConsoleMode(con.in, HID_INPMODE );
 
@@ -428,9 +446,17 @@ do_get( const char *prompt, int hidden )
     if( hidden )
        SetConsoleMode(con.in, DEF_INPMODE );
 
-#elif defined(__riscos__)
+#elif defined(__riscos__) || defined(HAVE_W32CE_SYSTEM)
     do {
+#ifdef HAVE_W32CE_SYSTEM
+      /* Using getchar is not a correct solution but for now it
+         doesn't matter becuase we have no real console at all.  We
+         should rework this as soon as we have switched this entire
+         module to estream.  */
+        c = getchar();
+#else
         c = riscos_getchar();
+#endif
         if (c == 0xa || c == 0xd) { /* Return || Enter */
             c = (int) '\n';
         } else if (c == 0x8 || c == 0x7f) { /* Backspace || Delete */
@@ -468,7 +494,7 @@ do_get( const char *prompt, int hidden )
         }
     } while (c != '\n');
     i = (i>0) ? i-1 : 0;
-#else /* unix version */
+#else /* Other systems. */
     if( hidden ) {
 #ifdef HAVE_TCGETATTR
        struct termios term;
@@ -509,7 +535,6 @@ do_get( const char *prompt, int hidden )
        i = 1;
     }
 
-
     if( hidden ) {
 #ifdef HAVE_TCGETATTR
        if( tcsetattr(fileno(ttyfp), TCSAFLUSH, &termsave) )
@@ -530,7 +555,7 @@ tty_get( const char *prompt )
     {
       char *line;
       char *buf;
-      
+
       if (!initialized)
        init_ttyfp();
 
@@ -601,7 +626,7 @@ tty_kill_prompt()
        last_prompt_len = 0;
     if( !last_prompt_len )
        return;
-#ifdef _WIN32
+#ifdef USE_W32_CONSOLE
     tty_printf("\r%*s\r", last_prompt_len, "");
 #else
     {