Update from HEAD
[oweals/openssl.git] / crypto / ui / ui_openssl.c
index ce1cb1dfcd13d217a60928f1dccb9a78c1082989..ef930bf2476e9c4fae856697750709add1241933 100644 (file)
 
 #include <openssl/e_os2.h>
 
+/* need for #define _POSIX_C_SOURCE arises whenever you pass -ansi to gcc
+ * [maybe others?], because it masks interfaces not discussed in standard,
+ * sigaction and fileno included. -pedantic would be more appropriate for
+ * the intended purposes, but we can't prevent users from adding -ansi.
+ */
 #define _POSIX_C_SOURCE 1
 #include <signal.h>
 #include <stdio.h>
-#undef _POSIX_C_SOURCE
 #include <string.h>
 #include <errno.h>
 
 #undef SGTTY
 #endif
 
+#if defined(OPENSSL_SYS_NETWARE)
+#undef TERMIOS
+#undef TERMIO
+#undef SGTTY
+#endif
+
 #ifdef TERMIOS
 # include <termios.h>
 # define TTY_STRUCT            struct termios
@@ -250,7 +260,7 @@ struct IOSB {
        typedef int sig_atomic_t;
 #endif
 
-#if defined(OPENSSL_SYS_MACINTOSH_CLASSIC) || defined(MAC_OS_GUSI_SOURCE)
+#if defined(OPENSSL_SYS_MACINTOSH_CLASSIC) || defined(MAC_OS_GUSI_SOURCE) || defined(OPENSSL_SYS_NETWARE)
 /*
  * This one needs work. As a matter of fact the code is unoperational
  * and this is only a trick to get it compiled.
@@ -463,7 +473,7 @@ static int open_console(UI *ui)
        CRYPTO_w_lock(CRYPTO_LOCK_UI);
        is_a_tty = 1;
 
-#if defined(OPENSSL_SYS_MACINTOSH_CLASSIC) || defined(OPENSSL_SYS_VXWORKS)
+#if defined(OPENSSL_SYS_MACINTOSH_CLASSIC) || defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_NETWARE)
        tty_in=stdin;
        tty_out=stderr;
 #else
@@ -568,7 +578,9 @@ static int close_console(UI *ui)
 /* Internal functions to handle signals and act on them */
 static void pushsig(void)
        {
+#ifndef OPENSSL_SYS_WIN32
        int i;
+#endif
 #ifdef SIGACTION
        struct sigaction sa;
 
@@ -576,6 +588,14 @@ static void pushsig(void)
        sa.sa_handler=recsig;
 #endif
 
+#ifdef OPENSSL_SYS_WIN32
+       savsig[SIGABRT]=signal(SIGABRT,recsig);
+       savsig[SIGFPE]=signal(SIGFPE,recsig);
+       savsig[SIGILL]=signal(SIGILL,recsig);
+       savsig[SIGINT]=signal(SIGINT,recsig);
+       savsig[SIGSEGV]=signal(SIGSEGV,recsig);
+       savsig[SIGTERM]=signal(SIGTERM,recsig);
+#else
        for (i=1; i<NX509_SIG; i++)
                {
 #ifdef SIGUSR1
@@ -596,6 +616,7 @@ static void pushsig(void)
                savsig[i]=signal(i,recsig);
 #endif
                }
+#endif
 
 #ifdef SIGWINCH
        signal(SIGWINCH,SIG_DFL);
@@ -604,8 +625,15 @@ static void pushsig(void)
 
 static void popsig(void)
        {
+#ifdef OPENSSL_SYS_WIN32
+       signal(SIGABRT,savsig[SIGABRT]);
+       signal(SIGFPE,savsig[SIGFPE]);
+       signal(SIGILL,savsig[SIGILL]);
+       signal(SIGINT,savsig[SIGINT]);
+       signal(SIGSEGV,savsig[SIGSEGV]);
+       signal(SIGTERM,savsig[SIGTERM]);
+#else
        int i;
-
        for (i=1; i<NX509_SIG; i++)
                {
 #ifdef SIGUSR1
@@ -622,6 +650,7 @@ static void popsig(void)
                signal(i,savsig[i]);
 #endif
                }
+#endif
        }
 
 static void recsig(int i)
@@ -648,6 +677,8 @@ static int noecho_fgets(char *buf, int size, FILE *tty)
                size--;
 #ifdef WIN16TTY
                i=_inchar();
+#elif defined(_WIN32)
+               i=_getch();
 #else
                i=getch();
 #endif