Actually increase buffer size of t-dns-cert.c.
[gnupg.git] / common / init.c
index 9023c8d..bcb0cd4 100644 (file)
 #ifdef HAVE_W32_SYSTEM
 #include <windows.h>
 #endif
-#ifdef HAVE_PTH      
+#ifdef HAVE_PTH
 #include <pth.h>
 #endif
+#ifdef HAVE_W32CE_SYSTEM
+# include <assuan.h> /* For _assuan_w32ce_finish_pipe. */
+#endif
 
 #include "util.h"
 
+
 #ifdef HAVE_W32CE_SYSTEM
-#include <assuan.h>
 static void parse_std_file_handles (int *argcp, char ***argvp);
+static void
+sleep_on_exit (void)
+{
+  /* The sshd on CE swallows some of the command output.  Sleeping a
+     while usually helps.  */
+  Sleep (400);
+}
 #endif /*HAVE_W32CE_SYSTEM*/
 
 
+/* If STRING is not NULL write string to es_stdout or es_stderr.  MODE
+   must be 1 or 2.  If STRING is NULL flush the respective stream.  */
+static int
+writestring_via_estream (int mode, const char *string)
+{
+  if (mode == 1 || mode == 2)
+    {
+      if (string)
+        return es_fputs (string, mode == 1? es_stdout : es_stderr);
+      else
+        return es_fflush (mode == 1? es_stdout : es_stderr);
+    }
+  else
+    return -1;
+}
+
+
 /* This function is to be used early at program startup to make sure
    that some subsystems are initialized.  This is in particular
    important for W32 to initialize the sockets so that our socket
@@ -52,7 +79,7 @@ void
 init_common_subsystems (int *argcp, char ***argvp)
 {
   /* Try to auto set the character set.  */
-  set_native_charset (NULL); 
+  set_native_charset (NULL);
 
 #ifdef HAVE_W32_SYSTEM
   /* For W32 we need to initialize the socket layer.  This is because
@@ -63,14 +90,22 @@ init_common_subsystems (int *argcp, char ***argvp)
 # ifdef HAVE_PTH
   pth_init ();
 # else
- {
-   WSADATA wsadat;
 {
+    WSADATA wsadat;
 
-   WSAStartup (0x202, &wsadat);
- }
+    WSAStartup (0x202, &wsadat);
 }
 # endif /*!HAVE_PTH*/
 #endif
 
+#ifdef HAVE_W32CE_SYSTEM
+  /* Register the sleep exit function before the estream init so that
+     the sleep will be called after the estream registered atexit
+     function which flushes the left open estream streams and in
+     particular es_stdout.  */
+  atexit (sleep_on_exit);
+#endif
+
   /* Initialize the Estream library. */
   es_init ();
 
@@ -82,6 +117,19 @@ init_common_subsystems (int *argcp, char ***argvp)
   (void)argcp;
   (void)argvp;
 #endif
+
+  /* Access the standard estreams as early as possible.  If we don't
+     do this the original stdio streams may have been closed when
+     _es_get_std_stream is first use and in turn it would connect to
+     the bit bucket.  */
+  {
+    int i;
+    for (i=0; i < 3; i++)
+      (void)_es_get_std_stream (i);
+  }
+
+  /* --version et al shall use estream as well.  */
+  argparse_register_outfnc (writestring_via_estream);
 }
 
 
@@ -125,7 +173,7 @@ parse_std_file_handles (int *argcp, char ***argvp)
       s = *argv;
       if (*s == '-' && s[1] == '&' && s[2] == 'S'
           && (s[3] == '0' || s[3] == '1' || s[3] == '2')
-          && s[4] == '=' 
+          && s[4] == '='
           && (strchr ("-01234567890", s[5]) || !strcmp (s+5, "null")))
         {
           if (s[5] == 'n')