Typesafe Thought Police part 4.
[oweals/openssl.git] / crypto / bio / bio.h
index 37750726958e57466f9780f76c51db2a7e8be82e..2e25516cf379bae84185930219775bb196c14a27 100644 (file)
@@ -207,19 +207,21 @@ extern "C" {
 #define BIO_method_name(b)             ((b)->method->name)
 #define BIO_method_type(b)             ((b)->method->type)
 
+typedef struct bio_st BIO;
+
 #ifndef WIN16
 typedef struct bio_method_st
        {
        int type;
        const char *name;
-       int (*bwrite)();
-       int (*bread)();
-       int (*bputs)();
-       int (*bgets)();
-       long (*ctrl)();
-       int (*create)();
-       int (*destroy)();
-       long (*callback_ctrl)();
+       int (*bwrite)(BIO *, const char *, int);
+       int (*bread)(BIO *, char *, int);
+       int (*bputs)(BIO *, const char *);
+       int (*bgets)(BIO *, char *, int);
+       long (*ctrl)(BIO *, int, long, void *);
+       int (*create)(BIO *);
+       int (*destroy)(BIO *);
+       long (*callback_ctrl)(BIO *, int, void (*)(struct bio_st *, int, const char *, int, long, long));
        } BIO_METHOD;
 #else
 typedef struct bio_method_st
@@ -237,7 +239,7 @@ typedef struct bio_method_st
        } BIO_METHOD;
 #endif
 
-typedef struct bio_st
+struct bio_st
        {
        BIO_METHOD *method;
        /* bio, mode, argp, argi, argl, ret */
@@ -257,7 +259,9 @@ typedef struct bio_st
        unsigned long num_write;
 
        CRYPTO_EX_DATA ex_data;
-       } BIO;
+       };
+
+DECLARE_STACK_OF(BIO)
 
 typedef struct bio_f_buffer_ctx_struct
        {
@@ -505,12 +509,13 @@ BIO *BIO_new_fp(FILE *stream, int close_flag);
 BIO *  BIO_new(BIO_METHOD *type);
 int    BIO_set(BIO *a,BIO_METHOD *type);
 int    BIO_free(BIO *a);
+void   BIO_vfree(BIO *a);
 int    BIO_read(BIO *b, void *data, int len);
 int    BIO_gets(BIO *bp,char *buf, int size);
 int    BIO_write(BIO *b, const void *data, int len);
 int    BIO_puts(BIO *bp,const char *buf);
 long   BIO_ctrl(BIO *bp,int cmd,long larg,void *parg);
-long   BIO_callback_ctrl(BIO *bp,int cmd,void (*fp)());
+long BIO_callback_ctrl(BIO *b, int cmd, void (*fp)(struct bio_st *, int, const char *, int, long, long));
 char * BIO_ptr_ctrl(BIO *bp,int cmd,long larg);
 long   BIO_int_ctrl(BIO *bp,int cmd,long larg,int iarg);
 BIO *  BIO_push(BIO *b,BIO *append);