"John W. Murray" <[EMAIL PROTECTED]>:

> I am trying to understand the NO_STDIO flag.  I would like
> to build with it defined.  However, if I do that, bio.h
> does not compile properly:
> 
> Looking at the following piece of code from bio.h,
> If I define NO_STDIO, then NO_FP_API gets defined.
> However, WIN16 and _WINDLL are not defined so I still
> get the wrong half of the #if statement.

Possibly the NO_FP_API flag was only meant to be set by e_os.h.  It's
not at all clear (to me, anyway) what the difference between NO_FP_API
and NO_STDIO is meant to be -- if you don't have FILE *, you cannot
have stdin/out/err, and on the other hand we have
     #ifdef NO_STDIO
     #  define NO_FP_API
     #endif
(in e_os.h and in bio.h, possibly elsewhere too), so it looks that
having only one of these flags would be enough, i.e. change all
occurences of #if... NO_STDIO to #if... NO_FP_API.

CHANGES.SSLeay tells us only the following:
19-Sep-97
    - NO_FP_API and NO_STDIO added.
without revealing why they are separate flags.
 
> Is anyone using the NO_STDIO flag?

I asked the same question some time ago ...

>                                     I would like to rearrange
> these defines, but hesitate to do that if someone has a
> philosophy that works for these two flags.

... and also asked for that.  If anyone does have a philosophy on all
that, they certainly were not reading openssl-cvs in April.
A particularly strange thing about bio.h is that FILE * is used in
both cases of

#  if defined(WIN16) && defined(_WINDLL)
BIO_METHOD *BIO_s_file_internal(void);
BIO *BIO_new_file_internal(char *filename, char *mode);
BIO *BIO_new_fp_internal(FILE *stream, int close_flag);
#    define BIO_s_file  BIO_s_file_internal
#    define BIO_new_file        BIO_new_file_internal
#    define BIO_new_fp  BIO_new_fp_internal
#  else /* FP_API */
BIO_METHOD *BIO_s_file(void );
BIO *BIO_new_file(const char *filename, const char *mode);
BIO *BIO_new_fp(FILE *stream, int close_flag);
#    define BIO_s_file_internal         BIO_s_file
#    define BIO_new_file_internal       BIO_new_file
#    define BIO_new_fp_internal         BIO_s_file
#  endif /* FP_API */

That last define should probably be
#    define BIO_new_fp_internal         BIO_new_fp,
but I don't really have an idea of what all this is good for, given
that BIO_new_fp_internal occurs nowhere else in the library except in
the above section of bio.h.  The idea seems to be that you have those
three ..._internal functions if you want to use the library on a 16-bit
Windows, but it's all rather weird.  If you don't want to use stdio
at all, then maybe the above (both cases of it!) should be
put inside an #ifndef NO_STDIO (or #ifndef NO_FP_API, who knows).
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       [EMAIL PROTECTED]
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to