]> Pileus Git - ~andy/fetchmail/blobdiff - getpass.c
Note Earl's regression fix for SSL_CTX_clear_options() on older OpenSSL.
[~andy/fetchmail] / getpass.c
index 7e08368ecb8d46929a785a8aa046ce9b2992acca..3c19ba7c832fb9f3825c3b98c6d29e7cd5024351 100644 (file)
--- a/getpass.c
+++ b/getpass.c
@@ -9,7 +9,7 @@
   description:         getpass() replacement which allows for long passwords.
                 This version hacked by Wilfred Teiken, allowing the
                 password to be piped to fetchmail.
-
  ***********************************************************************/
 
 #include "config.h"
 #include <stdio.h>
 #include <signal.h>
 #include <fcntl.h>
+#include <stdlib.h>
 #if defined(HAVE_UNISTD_H)
 #include <unistd.h>
 #endif
 #include "fetchmail.h"
+#include "i18n.h"
 
 #define INPUT_BUF_SIZE PASSWORDLEN
 
@@ -54,29 +56,27 @@ static int ttyfd;
 #endif
 #endif
 
-void static save_tty_state();
-void static disable_tty_echo();
-void static restore_tty_state();
-static RETSIGTYPE sigint_handler();
+static void save_tty_state(void);
+static void disable_tty_echo(void);
+static void restore_tty_state(void);
+static RETSIGTYPE sigint_handler(int);
 
-char *getpassword(prompt)
-char *prompt;
+char *fm_getpassword(char *prompt)
 {
 #if !(defined(HAVE_TCSETATTR) || defined(HAVE_TERMIO_H) || defined(HAVE_STTY))
 #if defined(HAVE_GETPASS) 
     char *getpass();
     return getpass(prompt);
 #else
-    fputs("ERROR: no support for getpassword() routine\n",stderr);
+    fputs(GT_("ERROR: no support for getpassword() routine\n"),stderr);
     exit(1);
 #endif
 #else
     register char *p;
-    register c;
+    register int c;
     FILE *fi;
     static char pbuf[INPUT_BUF_SIZE];
-    RETSIGTYPE (*sig)() = 0;   /* initialization pacifies -Wall */
-    RETSIGTYPE sigint_handler();
+    SIGHANDLERTYPE sig = 0;    /* initialization pacifies -Wall */
 
     int istty = isatty(0);
 
@@ -101,7 +101,7 @@ char *prompt;
 
        /* now that we have the current tty state, we can catch SIGINT and  
           exit gracefully */
-       sig = signal(SIGINT, sigint_handler);
+       sig = set_signal_handler(SIGINT, sigint_handler);
 
        /* turn off echo on the tty */
        disable_tty_echo();
@@ -127,16 +127,16 @@ char *prompt;
        restore_tty_state();
 
        /* restore previous state of SIGINT */
-       signal(SIGINT, sig);
+       set_signal_handler(SIGINT, sig);
     }
     if (fi != stdin)
-       fclose(fi);
+       fclose(fi);     /* not checking should be safe, file mode was "r" */
 
     return(pbuf);
 #endif /* !(defined(HAVE_TCSETATTR) || ... */
 }
 
-static void save_tty_state ()
+static void save_tty_state (void)
 {
 #if defined(HAVE_TCSETATTR)
     tcgetattr(ttyfd, &termb);
@@ -152,7 +152,7 @@ static void save_tty_state ()
 #endif
 }
 
-static void disable_tty_echo() 
+static void disable_tty_echo(void
 {
     /* turn off echo on the tty */
 #if defined(HAVE_TCSETATTR)
@@ -169,7 +169,7 @@ static void disable_tty_echo()
 #endif
 }
 
-static void restore_tty_state()
+static void restore_tty_state(void)
 {
     /* restore previous tty echo state */
 #if defined(HAVE_TCSETATTR)
@@ -186,10 +186,12 @@ static void restore_tty_state()
 #endif
 }
 
-static RETSIGTYPE sigint_handler()
+static RETSIGTYPE sigint_handler(int signum)
 {
+    (void)signum;
     restore_tty_state();
-    error(1, 0, "\nCaught signal... bailing out.");
+    report(stderr, GT_("\nCaught SIGINT... bailing out.\n"));
+    exit(1);
 }
 
 /* getpass.c ends here */