On VMS use --batch by default if in batch mode.
authorWerner Koch <wk@gnupg.org>
Mon, 12 Sep 2011 13:23:41 +0000 (15:23 +0200)
committerWerner Koch <wk@gnupg.org>
Mon, 12 Sep 2011 13:28:28 +0000 (15:28 +0200)
This problem was identified and solved by Steven M. Schweda.
Note that the vms specific code is not part of this repository.
See http://antinode.info/dec/sw/gnupg.html for the VMS port.

g10/ChangeLog
g10/gpg.c
util/ChangeLog
util/ttyio.c

index ecfb3db..d812cfd 100644 (file)
@@ -1,3 +1,9 @@
+2011-09-12  Werner Koch  <wk@g10code.com>
+
+       * gpg.c [__VMS]: Include vms.h.
+       (main) [__VMS]: Init batch mode according to actual process mode.
+       Suggested by Steven M. Schweda.
+
 2011-08-09  Werner Koch  <wk@g10code.com>
 
        * keyedit.c (show_key_with_all_names): Remove unused var.
index 28841c0..0190790 100644 (file)
--- a/g10/gpg.c
+++ b/g10/gpg.c
@@ -39,6 +39,9 @@
 #ifdef HAVE_W32_SYSTEM
 #include <windows.h>
 #endif
+#ifdef __VMS
+# include "vms.h"
+#endif
 
 #define INCLUDED_BY_MAIN_MODULE 1
 #include "packet.h"
@@ -1872,6 +1875,15 @@ main (int argc, char **argv )
     opt.lock_once = 1;
 #endif /* __riscos__ */
 
+#ifdef __VMS
+    /* On VMS, set the default value of the "--[no-]batch" flag
+     * according to the actual process mode.  The user can override
+     * this with an explicit command-line "--[no-]batch" option.  This
+     * avoids that the process stops while trying to initialize the
+     * tty in batch mode.  */
+    opt.batch = batch_mode_vms();
+#endif
+
     reopen_std();
     trap_unaligned();
     secmem_set_flags( secmem_get_flags() | 2 ); /* suspend warnings */
index 506e1f3..d4caac3 100644 (file)
@@ -1,3 +1,8 @@
+2011-09-12  Werner Koch  <wk@g10code.com>
+
+       * ttyio.c (init_ttyfp): Avoid endless loop due to a failed opening
+       of the tty.  Suggested by Steven M. Schweda.
+
 2011-08-09  Werner Koch  <wk@g10code.com>
 
        * pka.c (get_pka_info): Turn ANSWER into a union to avoid aliasing
index 05c0a37..c8177d7 100644 (file)
@@ -185,7 +185,10 @@ init_ttyfp(void)
 #else
     ttyfp = batchmode? stderr : fopen( tty_get_ttyname (), "r+");
     if( !ttyfp ) {
-       log_error("cannot open `%s': %s\n",
+        ttyfp = stderr;  /* Use stderr as fallback for log_error.  */
+        initialized = 1; /* Make sure log_error won't try to init
+                            the tty again.  */
+       log_error("cannot open tty `%s': %s\n",
                   tty_get_ttyname (), strerror(errno) );
        exit(2);
     }
@@ -258,7 +261,7 @@ tty_printf( const char *fmt, ... )
 
     va_start( arg_ptr, fmt ) ;
 #ifdef _WIN32
-    {   
+    {
         char *buf;
         int n;
        DWORD nwritten;
@@ -267,7 +270,7 @@ tty_printf( const char *fmt, ... )
        if (!buf)
           log_bug("xtryvasprintf() failed\n");
         n = strlen (buf);
-        
+
        if (!WriteConsoleA (con.out, buf, n, &nwritten, NULL))
            log_fatal ("WriteConsole failed: %s", w32_strerror (0));
        if( n != nwritten )
@@ -306,7 +309,7 @@ tty_fprintf (FILE *fp, const char *fmt, ... )
 
     va_start( arg_ptr, fmt ) ;
 #ifdef _WIN32
-    {   
+    {
         char *buf;
         int n;
        DWORD nwritten;
@@ -315,7 +318,7 @@ tty_fprintf (FILE *fp, const char *fmt, ... )
        if (!buf)
           log_bug ("xtryvasprintf() failed\n");
         n = strlen (buf);
-        
+
        if (!WriteConsoleA (con.out, buf, n, &nwritten, NULL))
            log_fatal ("WriteConsole failed: %s", w32_strerror (0));
        if (n != nwritten)