Fix the _rest_ of the Windows compile warnings. (ahem)
[u/mdw/putty] / windows / wincons.c
index 7b763a2..5694884 100644 (file)
@@ -294,8 +294,7 @@ void console_provide_logctx(void *logctx)
 
 void logevent(void *frontend, const char *string)
 {
-    if (console_logctx)
-       log_eventlog(console_logctx, string);
+    log_eventlog(console_logctx, string);
 }
 
 static void console_data_untrusted(HANDLE hout, const char *data, int len)
@@ -315,18 +314,35 @@ int console_get_userpass_input(prompts_t *p, unsigned char *in, int inlen)
      */
     {
        int i;
-       for (i = 0; i < p->n_prompts; i++)
+       for (i = 0; i < (int)p->n_prompts; i++)
            memset(p->prompts[i]->result, 0, p->prompts[i]->result_len);
     }
 
-    if (console_batch_mode)
-       return 0;
+    /*
+     * The prompts_t might contain a message to be displayed but no
+     * actual prompt. More usually, though, it will contain
+     * questions that the user needs to answer, in which case we
+     * need to ensure that we're able to get the answers.
+     */
+    if (p->n_prompts) {
+       if (console_batch_mode)
+           return 0;
+       hin = GetStdHandle(STD_INPUT_HANDLE);
+       if (hin == INVALID_HANDLE_VALUE) {
+           fprintf(stderr, "Cannot get standard input handle\n");
+           cleanup_exit(1);
+       }
+    }
 
-    hin = GetStdHandle(STD_INPUT_HANDLE);
-    hout = GetStdHandle(STD_OUTPUT_HANDLE);
-    if (hin == INVALID_HANDLE_VALUE || hout == INVALID_HANDLE_VALUE) {
-       fprintf(stderr, "Cannot get standard input/output handles\n");
-       cleanup_exit(1);
+    /*
+     * And if we have anything to print, we need standard output.
+     */
+    if ((p->name_reqd && p->name) || p->instruction || p->n_prompts) {
+       hout = GetStdHandle(STD_OUTPUT_HANDLE);
+       if (hout == INVALID_HANDLE_VALUE) {
+           fprintf(stderr, "Cannot get standard output handle\n");
+           cleanup_exit(1);
+       }
     }
 
     /*