#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.
- */
-#if defined(OPENSSL_SYSNAME_VXWORKS)
-#include <sys/types.h>
-#endif
-
-#if !defined(_POSIX_C_SOURCE) && defined(OPENSSL_SYS_VMS)
-#ifndef _POSIX_C_SOURCE
-#define _POSIX_C_SOURCE 2
-#endif
-#endif
#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
-#if !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_VMS)
-# ifdef OPENSSL_UNISTD
-# include OPENSSL_UNISTD
-# else
-# include <unistd.h>
-# endif
+#include <unistd.h>
/* If unistd.h defines _POSIX_VERSION, we conclude that we
* are on a POSIX system and have sigaction and termios. */
# if defined(_POSIX_VERSION)
# endif
# endif
-#endif
-#ifdef WIN16TTY
-# undef OPENSSL_SYS_WIN16
-# undef WIN16
-# undef _WINDOWS
-# include <graph.h>
-#endif
-
-/* 06-Apr-92 Luke Brennan Support for VMS */
#include "ui_locl.h"
#include "cryptlib.h"
-#ifdef OPENSSL_SYS_VMS /* prototypes for sys$whatever */
-# include <starlet.h>
-# ifdef __DECC
-# pragma message disable DOLLARID
-# endif
-#endif
-
-#ifdef WIN_CONSOLE_BUG
-# include <windows.h>
-#ifndef OPENSSL_SYS_WINCE
-# include <wincon.h>
-#endif
-#endif
-
/* There are 5 types of terminal interface supported,
* TERMIO, TERMIOS, VMS, MSDOS and SGTTY
*/
-#if defined(__sgi) && !defined(TERMIOS)
-# define TERMIOS
-# undef TERMIO
-# undef SGTTY
-#endif
-
-#if defined(linux) && !defined(TERMIO)
-# undef TERMIOS
-# define TERMIO
-# undef SGTTY
-#endif
-
#ifdef _LIBC
# undef TERMIOS
# define TERMIO
# undef SGTTY
#endif
-#if !defined(TERMIO) && !defined(TERMIOS) && !defined(OPENSSL_SYS_VMS) && !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_MACINTOSH_CLASSIC) && !defined(MAC_OS_GUSI_SOURCE)
-# undef TERMIOS
-# undef TERMIO
-# define SGTTY
-#endif
-
-#if defined(OPENSSL_SYS_VXWORKS)
-#undef TERMIOS
-#undef TERMIO
-#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
# define TTY_set(tty,data) ioctl(tty,TCSETA,data)
#endif
-#ifdef SGTTY
-# include <sgtty.h>
-# define TTY_STRUCT struct sgttyb
-# define TTY_FLAGS sg_flags
-# define TTY_get(tty,data) ioctl(tty,TIOCGETP,data)
-# define TTY_set(tty,data) ioctl(tty,TIOCSETP,data)
-#endif
-
-#if !defined(_LIBC) && !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_VMS) && !defined(OPENSSL_SYS_MACINTOSH_CLASSIC) && !defined(OPENSSL_SYS_SUNOS)
# include <sys/ioctl.h>
-#endif
-
-#ifdef OPENSSL_SYS_MSDOS
-# include <conio.h>
-#endif
-
-#ifdef OPENSSL_SYS_VMS
-# include <ssdef.h>
-# include <iodef.h>
-# include <ttdef.h>
-# include <descrip.h>
-struct IOSB {
- short iosb$w_value;
- short iosb$w_count;
- long iosb$l_info;
- };
-#endif
-
-#ifdef OPENSSL_SYS_SUNOS
- typedef int sig_atomic_t;
-#endif
-
-#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.
- * <appro@fy.chalmers.se>
- */
-# define TTY_STRUCT int
-#endif
#ifndef NX509_SIG
# define NX509_SIG 32
static void (*savsig[NX509_SIG])(int );
#endif
-#ifdef OPENSSL_SYS_VMS
-static struct IOSB iosb;
-static $DESCRIPTOR(terminal,"TT");
-static long tty_orig[3], tty_new[3]; /* XXX Is there any guarantee that this will always suffice for the actual structures? */
-static long status;
-static unsigned short channel = 0;
-#else
-#if !defined(OPENSSL_SYS_MSDOS) || defined(__DJGPP__)
static TTY_STRUCT tty_orig,tty_new;
-#endif
-#endif
static FILE *tty_in, *tty_out;
static int is_a_tty;
/* Declare static functions */
-#if !defined(OPENSSL_SYS_WIN16) && !defined(OPENSSL_SYS_WINCE)
static int read_till_nl(FILE *);
static void recsig(int);
static void pushsig(void);
static void popsig(void);
-#endif
-#if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN16)
-static int noecho_fgets(char *buf, int size, FILE *tty);
-#endif
static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl);
static int read_string(UI *ui, UI_STRING *uis);
}
-#if !defined(OPENSSL_SYS_WIN16) && !defined(OPENSSL_SYS_WINCE)
/* Internal functions to read a string without echoing */
static int read_till_nl(FILE *in)
{
}
static volatile sig_atomic_t intr_signal;
-#endif
static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl)
{
int ok;
char result[BUFSIZ];
int maxsize = BUFSIZ-1;
-#if !defined(OPENSSL_SYS_WIN16) && !defined(OPENSSL_SYS_WINCE)
char *p;
intr_signal=0;
ps=2;
result[0]='\0';
-#ifdef OPENSSL_SYS_MSDOS
- if (!echo)
- {
- noecho_fgets(result,maxsize,tty_in);
- p=result; /* FIXME: noecho_fgets doesn't return errors */
- }
- else
- p=fgets(result,maxsize,tty_in);
-#else
p=fgets(result,maxsize,tty_in);
-#endif
if(!p)
goto error;
if (feof(tty_in)) goto error;
if (ps >= 1)
popsig();
-#else
- ok=1;
-#endif
OPENSSL_cleanse(result,BUFSIZ);
return ok;
CRYPTO_w_lock(CRYPTO_LOCK_UI);
is_a_tty = 1;
-#if defined(OPENSSL_SYS_MACINTOSH_CLASSIC) || defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_NETWARE) || defined(OPENSSL_SYS_BEOS)
- tty_in=stdin;
- tty_out=stderr;
-#else
-# ifdef OPENSSL_SYS_MSDOS
-# define DEV_TTY "con"
-# else
# define DEV_TTY "/dev/tty"
-# endif
if ((tty_in=fopen(DEV_TTY,"r")) == NULL)
tty_in=stdin;
if ((tty_out=fopen(DEV_TTY,"w")) == NULL)
tty_out=stderr;
-#endif
-#if defined(TTY_get) && !defined(OPENSSL_SYS_VMS)
+#if defined(TTY_get)
if (TTY_get(fileno(tty_in),&tty_orig) == -1)
{
-#ifdef ENOTTY
if (errno == ENOTTY)
is_a_tty=0;
else
-#endif
-#ifdef EINVAL
/* Ariel Glenn ariel@columbia.edu reports that solaris
* can return EINVAL instead. This should be ok */
if (errno == EINVAL)
is_a_tty=0;
else
-#endif
return 0;
}
-#endif
-#ifdef OPENSSL_SYS_VMS
- status = sys$assign(&terminal,&channel,0,0);
- if (status != SS$_NORMAL)
- return 0;
- status=sys$qiow(0,channel,IO$_SENSEMODE,&iosb,0,0,tty_orig,12,0,0,0,0);
- if ((status != SS$_NORMAL) || (iosb.iosb$w_value != SS$_NORMAL))
- return 0;
#endif
return 1;
}
tty_new.TTY_FLAGS &= ~ECHO;
#endif
-#if defined(TTY_set) && !defined(OPENSSL_SYS_VMS)
+#if defined(TTY_set)
if (is_a_tty && (TTY_set(fileno(tty_in),&tty_new) == -1))
return 0;
-#endif
-#ifdef OPENSSL_SYS_VMS
- tty_new[0] = tty_orig[0];
- tty_new[1] = tty_orig[1] | TT$M_NOECHO;
- tty_new[2] = tty_orig[2];
- status = sys$qiow(0,channel,IO$_SETMODE,&iosb,0,0,tty_new,12,0,0,0,0);
- if ((status != SS$_NORMAL) || (iosb.iosb$w_value != SS$_NORMAL))
- return 0;
#endif
return 1;
}
static int echo_console(UI *ui)
{
-#if defined(TTY_set) && !defined(OPENSSL_SYS_VMS)
+#if defined(TTY_set)
memcpy(&(tty_new),&(tty_orig),sizeof(tty_orig));
tty_new.TTY_FLAGS |= ECHO;
#endif
-#if defined(TTY_set) && !defined(OPENSSL_SYS_VMS)
+#if defined(TTY_set)
if (is_a_tty && (TTY_set(fileno(tty_in),&tty_new) == -1))
return 0;
-#endif
-#ifdef OPENSSL_SYS_VMS
- tty_new[0] = tty_orig[0];
- tty_new[1] = tty_orig[1] & ~TT$M_NOECHO;
- tty_new[2] = tty_orig[2];
- status = sys$qiow(0,channel,IO$_SETMODE,&iosb,0,0,tty_new,12,0,0,0,0);
- if ((status != SS$_NORMAL) || (iosb.iosb$w_value != SS$_NORMAL))
- return 0;
#endif
return 1;
}
{
if (tty_in != stdin) fclose(tty_in);
if (tty_out != stderr) fclose(tty_out);
-#ifdef OPENSSL_SYS_VMS
- status = sys$dassgn(channel);
-#endif
CRYPTO_w_unlock(CRYPTO_LOCK_UI);
return 1;
}
-#if !defined(OPENSSL_SYS_WIN16) && !defined(OPENSSL_SYS_WINCE)
/* 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;
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
savsig[i]=signal(i,recsig);
#endif
}
-#endif
#ifdef SIGWINCH
signal(SIGWINCH,SIG_DFL);
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
if (i == SIGUSR1)
continue;
-#endif
-#ifdef SIGUSR2
if (i == SIGUSR2)
continue;
-#endif
#ifdef SIGACTION
sigaction(i,&savsig[i],NULL);
#else
signal(i,savsig[i]);
#endif
}
-#endif
}
static void recsig(int i)
{
intr_signal=i;
}
-#endif
-
-/* Internal functions specific for Windows */
-#if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN16) && !defined(OPENSSL_SYS_WINCE)
-static int noecho_fgets(char *buf, int size, FILE *tty)
- {
- int i;
- char *p;
-
- p=buf;
- for (;;)
- {
- if (size == 0)
- {
- *p='\0';
- break;
- }
- size--;
-#ifdef WIN16TTY
- i=_inchar();
-#elif defined(_WIN32)
- i=_getch();
-#else
- i=getch();
-#endif
- if (i == '\r') i='\n';
- *(p++)=i;
- if (i == '\n')
- {
- *p='\0';
- break;
- }
- }
-#ifdef WIN_CONSOLE_BUG
-/* Win95 has several evil console bugs: one of these is that the
- * last character read using getch() is passed to the next read: this is
- * usually a CR so this can be trouble. No STDIO fix seems to work but
- * flushing the console appears to do the trick.
- */
- {
- HANDLE inh;
- inh = GetStdHandle(STD_INPUT_HANDLE);
- FlushConsoleInputBuffer(inh);
- }
-#endif
- return(strlen(buf));
- }
-#endif
#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.
- */
-#if defined(OPENSSL_SYSNAME_VXWORKS)
-#include <sys/types.h>
-#endif
-
-#if !defined(_POSIX_C_SOURCE) && defined(OPENSSL_SYS_VMS)
-#ifndef _POSIX_C_SOURCE
-#define _POSIX_C_SOURCE 2
-#endif
-#endif
#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
-#if !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_VMS)
-# ifdef OPENSSL_UNISTD
-# include OPENSSL_UNISTD
-# else
-# include <unistd.h>
-# endif
+#include <unistd.h>
/* If unistd.h defines _POSIX_VERSION, we conclude that we
* are on a POSIX system and have sigaction and termios. */
# if defined(_POSIX_VERSION)
# endif
# endif
-#endif
-#ifdef WIN16TTY
-# undef OPENSSL_SYS_WIN16
-# undef WIN16
-# undef _WINDOWS
-# include <graph.h>
-#endif
-
-/* 06-Apr-92 Luke Brennan Support for VMS */
#include "ui_locl.h"
#include "cryptlib.h"
-#ifdef OPENSSL_SYS_VMS /* prototypes for sys$whatever */
-# include <starlet.h>
-# ifdef __DECC
-# pragma message disable DOLLARID
-# endif
-#endif
-
-#ifdef WIN_CONSOLE_BUG
-# include <windows.h>
-#ifndef OPENSSL_SYS_WINCE
-# include <wincon.h>
-#endif
-#endif
-
/* There are 5 types of terminal interface supported,
* TERMIO, TERMIOS, VMS, MSDOS and SGTTY
*/
-#if defined(__sgi) && !defined(TERMIOS)
-# define TERMIOS
-# undef TERMIO
-# undef SGTTY
-#endif
-
-#if defined(linux) && !defined(TERMIO)
-# undef TERMIOS
-# define TERMIO
-# undef SGTTY
-#endif
-
#ifdef _LIBC
# undef TERMIOS
# define TERMIO
# undef SGTTY
#endif
-#if !defined(TERMIO) && !defined(TERMIOS) && !defined(OPENSSL_SYS_VMS) && !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_MACINTOSH_CLASSIC) && !defined(MAC_OS_GUSI_SOURCE)
-# undef TERMIOS
-# undef TERMIO
-# define SGTTY
-#endif
-
-#if defined(OPENSSL_SYS_VXWORKS)
-#undef TERMIOS
-#undef TERMIO
-#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
# define TTY_set(tty,data) ioctl(tty,TCSETA,data)
#endif
-#ifdef SGTTY
-# include <sgtty.h>
-# define TTY_STRUCT struct sgttyb
-# define TTY_FLAGS sg_flags
-# define TTY_get(tty,data) ioctl(tty,TIOCGETP,data)
-# define TTY_set(tty,data) ioctl(tty,TIOCSETP,data)
-#endif
-
-#if !defined(_LIBC) && !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_VMS) && !defined(OPENSSL_SYS_MACINTOSH_CLASSIC) && !defined(OPENSSL_SYS_SUNOS)
# include <sys/ioctl.h>
-#endif
-
-#ifdef OPENSSL_SYS_MSDOS
-# include <conio.h>
-#endif
-
-#ifdef OPENSSL_SYS_VMS
-# include <ssdef.h>
-# include <iodef.h>
-# include <ttdef.h>
-# include <descrip.h>
-struct IOSB {
- short iosb$w_value;
- short iosb$w_count;
- long iosb$l_info;
- };
-#endif
-
-#ifdef OPENSSL_SYS_SUNOS
- typedef int sig_atomic_t;
-#endif
-
-#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.
- * <appro@fy.chalmers.se>
- */
-# define TTY_STRUCT int
-#endif
#ifndef NX509_SIG
# define NX509_SIG 32
static void (*savsig[NX509_SIG])(int );
#endif
-#ifdef OPENSSL_SYS_VMS
-static struct IOSB iosb;
-static $DESCRIPTOR(terminal,"TT");
-static long tty_orig[3], tty_new[3]; /* XXX Is there any guarantee that this will always suffice for the actual structures? */
-static long status;
-static unsigned short channel = 0;
-#else
-#if !defined(OPENSSL_SYS_MSDOS) || defined(__DJGPP__)
static TTY_STRUCT tty_orig,tty_new;
-#endif
-#endif
static FILE *tty_in, *tty_out;
static int is_a_tty;
/* Declare static functions */
-#if !defined(OPENSSL_SYS_WIN16) && !defined(OPENSSL_SYS_WINCE)
static int read_till_nl(FILE *);
static void recsig(int);
static void pushsig(void);
static void popsig(void);
-#endif
-#if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN16)
-static int noecho_fgets(char *buf, int size, FILE *tty);
-#endif
static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl);
static int read_string(UI *ui, UI_STRING *uis);
}
-#if !defined(OPENSSL_SYS_WIN16) && !defined(OPENSSL_SYS_WINCE)
/* Internal functions to read a string without echoing */
static int read_till_nl(FILE *in)
{
}
static volatile sig_atomic_t intr_signal;
-#endif
static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl)
{
int ok;
char result[BUFSIZ];
int maxsize = BUFSIZ-1;
-#if !defined(OPENSSL_SYS_WIN16) && !defined(OPENSSL_SYS_WINCE)
char *p;
intr_signal=0;
ps=2;
result[0]='\0';
-#ifdef OPENSSL_SYS_MSDOS
- if (!echo)
- {
- noecho_fgets(result,maxsize,tty_in);
- p=result; /* FIXME: noecho_fgets doesn't return errors */
- }
- else
- p=fgets(result,maxsize,tty_in);
-#else
p=fgets(result,maxsize,tty_in);
-#endif
if(!p)
goto error;
if (feof(tty_in)) goto error;
if (ps >= 1)
popsig();
-#else
- ok=1;
-#endif
OPENSSL_cleanse(result,BUFSIZ);
return ok;
CRYPTO_w_lock(CRYPTO_LOCK_UI);
is_a_tty = 1;
-#if defined(OPENSSL_SYS_MACINTOSH_CLASSIC) || defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_NETWARE) || defined(OPENSSL_SYS_BEOS)
- tty_in=stdin;
- tty_out=stderr;
-#else
-# ifdef OPENSSL_SYS_MSDOS
-# define DEV_TTY "con"
-# else
# define DEV_TTY "/dev/tty"
-# endif
if ((tty_in=fopen(DEV_TTY,"r")) == NULL)
tty_in=stdin;
if ((tty_out=fopen(DEV_TTY,"w")) == NULL)
tty_out=stderr;
-#endif
-#if defined(TTY_get) && !defined(OPENSSL_SYS_VMS)
+#if defined(TTY_get)
if (TTY_get(fileno(tty_in),&tty_orig) == -1)
{
-#ifdef ENOTTY
if (errno == ENOTTY)
is_a_tty=0;
else
-#endif
-#ifdef EINVAL
/* Ariel Glenn ariel@columbia.edu reports that solaris
* can return EINVAL instead. This should be ok */
if (errno == EINVAL)
is_a_tty=0;
else
-#endif
return 0;
}
-#endif
-#ifdef OPENSSL_SYS_VMS
- status = sys$assign(&terminal,&channel,0,0);
- if (status != SS$_NORMAL)
- return 0;
- status=sys$qiow(0,channel,IO$_SENSEMODE,&iosb,0,0,tty_orig,12,0,0,0,0);
- if ((status != SS$_NORMAL) || (iosb.iosb$w_value != SS$_NORMAL))
- return 0;
#endif
return 1;
}
tty_new.TTY_FLAGS &= ~ECHO;
#endif
-#if defined(TTY_set) && !defined(OPENSSL_SYS_VMS)
+#if defined(TTY_set)
if (is_a_tty && (TTY_set(fileno(tty_in),&tty_new) == -1))
return 0;
-#endif
-#ifdef OPENSSL_SYS_VMS
- tty_new[0] = tty_orig[0];
- tty_new[1] = tty_orig[1] | TT$M_NOECHO;
- tty_new[2] = tty_orig[2];
- status = sys$qiow(0,channel,IO$_SETMODE,&iosb,0,0,tty_new,12,0,0,0,0);
- if ((status != SS$_NORMAL) || (iosb.iosb$w_value != SS$_NORMAL))
- return 0;
#endif
return 1;
}
static int echo_console(UI *ui)
{
-#if defined(TTY_set) && !defined(OPENSSL_SYS_VMS)
+#if defined(TTY_set)
memcpy(&(tty_new),&(tty_orig),sizeof(tty_orig));
tty_new.TTY_FLAGS |= ECHO;
#endif
-#if defined(TTY_set) && !defined(OPENSSL_SYS_VMS)
+#if defined(TTY_set)
if (is_a_tty && (TTY_set(fileno(tty_in),&tty_new) == -1))
return 0;
-#endif
-#ifdef OPENSSL_SYS_VMS
- tty_new[0] = tty_orig[0];
- tty_new[1] = tty_orig[1] & ~TT$M_NOECHO;
- tty_new[2] = tty_orig[2];
- status = sys$qiow(0,channel,IO$_SETMODE,&iosb,0,0,tty_new,12,0,0,0,0);
- if ((status != SS$_NORMAL) || (iosb.iosb$w_value != SS$_NORMAL))
- return 0;
#endif
return 1;
}
{
if (tty_in != stdin) fclose(tty_in);
if (tty_out != stderr) fclose(tty_out);
-#ifdef OPENSSL_SYS_VMS
- status = sys$dassgn(channel);
-#endif
CRYPTO_w_unlock(CRYPTO_LOCK_UI);
return 1;
}
-#if !defined(OPENSSL_SYS_WIN16) && !defined(OPENSSL_SYS_WINCE)
/* 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;
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
savsig[i]=signal(i,recsig);
#endif
}
-#endif
#ifdef SIGWINCH
signal(SIGWINCH,SIG_DFL);
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
if (i == SIGUSR1)
continue;
-#endif
-#ifdef SIGUSR2
if (i == SIGUSR2)
continue;
-#endif
#ifdef SIGACTION
sigaction(i,&savsig[i],NULL);
#else
signal(i,savsig[i]);
#endif
}
-#endif
}
static void recsig(int i)
{
intr_signal=i;
}
-#endif
-
-/* Internal functions specific for Windows */
-#if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN16) && !defined(OPENSSL_SYS_WINCE)
-static int noecho_fgets(char *buf, int size, FILE *tty)
- {
- int i;
- char *p;
-
- p=buf;
- for (;;)
- {
- if (size == 0)
- {
- *p='\0';
- break;
- }
- size--;
-#ifdef WIN16TTY
- i=_inchar();
-#elif defined(_WIN32)
- i=_getch();
-#else
- i=getch();
-#endif
- if (i == '\r') i='\n';
- *(p++)=i;
- if (i == '\n')
- {
- *p='\0';
- break;
- }
- }
-#ifdef WIN_CONSOLE_BUG
-/* Win95 has several evil console bugs: one of these is that the
- * last character read using getch() is passed to the next read: this is
- * usually a CR so this can be trouble. No STDIO fix seems to work but
- * flushing the console appears to do the trick.
- */
- {
- HANDLE inh;
- inh = GetStdHandle(STD_INPUT_HANDLE);
- FlushConsoleInputBuffer(inh);
- }
-#endif
- return(strlen(buf));
- }
-#endif