X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=crypto%2Fui%2Fui_openssl.c;h=a38c7581e6a0ca10376d05fc9994f4c74a41128a;hb=244ed51a0dad5f52233b46be716defcfe7bc77ff;hp=f186a714dc6ca8571303e12caf745dbc4029af6c;hpb=6d00101e9dae3b2a5a95d50d99b90f233d7f998b;p=oweals%2Fopenssl.git diff --git a/crypto/ui/ui_openssl.c b/crypto/ui/ui_openssl.c index f186a714dc..a38c7581e6 100644 --- a/crypto/ui/ui_openssl.c +++ b/crypto/ui/ui_openssl.c @@ -122,7 +122,15 @@ * 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 +#if defined(OPENSSL_SYSNAME_VXWORKS) +#include +#endif + +#if !defined(_POSIX_C_SOURCE) && defined(OPENSSL_SYS_VMS) +#ifndef _POSIX_C_SOURCE +#define _POSIX_C_SOURCE 2 +#endif +#endif #include #include #include @@ -297,7 +305,7 @@ static int is_a_tty; /* Declare static functions */ #if !defined(OPENSSL_SYS_WIN16) && !defined(OPENSSL_SYS_WINCE) -static void read_till_nl(FILE *); +static int read_till_nl(FILE *); static void recsig(int); static void pushsig(void); static void popsig(void); @@ -390,14 +398,16 @@ 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 void read_till_nl(FILE *in) +static int read_till_nl(FILE *in) { #define SIZE 4 char buf[SIZE+1]; do { - fgets(buf,SIZE,in); + if (!fgets(buf,SIZE,in)) + return 0; } while (strchr(buf,'\n') == NULL); + return 1; } static volatile sig_atomic_t intr_signal; @@ -445,7 +455,8 @@ static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl) *p='\0'; } else - read_till_nl(tty_in); + if (!read_till_nl(tty_in)) + goto error; if (UI_set_result(ui, uis, result) >= 0) ok=1; @@ -473,7 +484,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) || defined(OPENSSL_SYS_NETWARE) +#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 @@ -578,7 +589,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; @@ -623,8 +636,6 @@ static void pushsig(void) static void popsig(void) { - int i; - #ifdef OPENSSL_SYS_WIN32 signal(SIGABRT,savsig[SIGABRT]); signal(SIGFPE,savsig[SIGFPE]); @@ -633,6 +644,7 @@ static void popsig(void) signal(SIGSEGV,savsig[SIGSEGV]); signal(SIGTERM,savsig[SIGTERM]); #else + int i; for (i=1; i