gio/tests/gtlsconsoleinteraction: Work around missing getpass() on win32
authorKalev Lember <kalevlember@gmail.com>
Mon, 15 Aug 2011 13:09:18 +0000 (16:09 +0300)
committerKalev Lember <kalevlember@gmail.com>
Sun, 28 Aug 2011 13:45:53 +0000 (16:45 +0300)
Loosely based on a patch by Sam Thursfield <ssssam@gmail.com>.
https://bugzilla.gnome.org/show_bug.cgi?id=656341

gio/tests/gtlsconsoleinteraction.c

index c56ca6a..62e21c7 100644 (file)
 
 #include "config.h"
 
+#include <glib.h>
 #include <string.h>
 
+#ifdef G_OS_WIN32
+#include <glib/gprintf.h>
+#include <conio.h>
+#endif
+
 #include "gtlsconsoleinteraction.h"
 
 /*
 
 G_DEFINE_TYPE (GTlsConsoleInteraction, g_tls_console_interaction, G_TYPE_TLS_INTERACTION);
 
+#ifdef G_OS_WIN32
+/* win32 doesn't have getpass() */
+static gchar *
+getpass (const gchar *prompt)
+{
+  static gchar buf[BUFSIZ];
+  gint i;
+
+  g_printf ("%s", prompt);
+  fflush (stdout);
+
+  for (i = 0; i < BUFSIZ - 1; ++i)
+    {
+      buf[i] = _getch ();
+      if (buf[i] == '\r')
+        break;
+    }
+  buf[i] = '\0';
+
+  g_printf ("\n");
+
+  return &buf[0];
+}
+#endif
+
 static GTlsInteractionResult
 g_tls_console_interaction_ask_password (GTlsInteraction    *interaction,
                                         GTlsPassword       *password,