]> granicus.if.org Git - ejabberd/commitdiff
Support Erlang/OTP R15B driver (EJAB-1521)
authorBadlop <badlop@process-one.net>
Wed, 21 Dec 2011 11:15:21 +0000 (12:15 +0100)
committerBadlop <badlop@process-one.net>
Wed, 21 Dec 2011 11:15:21 +0000 (12:15 +0100)
src/ejabberd_zlib/ejabberd_zlib_drv.c
src/expat_erl.c
src/mod_irc/iconv_erl.c
src/stringprep/stringprep_drv.c
src/tls/sha_drv.c
src/tls/tls_drv.c

index ca3e7938a7e58b57570394c1b641ae51cc745ee4..bcd9ad304e7b4f25af916fde5478322119caf652 100644 (file)
 #include <erl_driver.h>
 #include <zlib.h>
 
+/*
+ * R15B changed several driver callbacks to use ErlDrvSizeT and
+ * ErlDrvSSizeT typedefs instead of int.
+ * This provides missing typedefs on older OTP versions.
+ */
+#if ERL_DRV_EXTENDED_MAJOR_VERSION < 2
+typedef int ErlDrvSizeT;
+typedef int ErlDrvSSizeT;
+#endif
 
 #define BUF_SIZE 1024
 
@@ -98,10 +107,10 @@ static void ejabberd_zlib_drv_stop(ErlDrvData handle)
         }
 
 
-static int ejabberd_zlib_drv_control(ErlDrvData handle,
+static ErlDrvSSizeT ejabberd_zlib_drv_control(ErlDrvData handle,
                                     unsigned int command,
-                                    char *buf, int len,
-                                    char **rbuf, int rlen)
+                                    char *buf, ErlDrvSizeT len,
+                                    char **rbuf, ErlDrvSizeT rlen)
 {
    ejabberd_zlib_data *d = (ejabberd_zlib_data *)handle;
    int err;
@@ -187,7 +196,19 @@ ErlDrvEntry ejabberd_zlib_driver_entry = {
    NULL,                       /* handle */
    ejabberd_zlib_drv_control,   /* F_PTR control, port_command callback */
    NULL,                       /* F_PTR timeout, reserved */
-   NULL                                /* F_PTR outputv, reserved */
+   NULL,                       /* F_PTR outputv, reserved */
+  /* Added in Erlang/OTP R15B: */
+  NULL,                 /* ready_async */
+  NULL,                 /* flush */
+  NULL,                 /* call */
+  NULL,                 /* event */
+  ERL_DRV_EXTENDED_MARKER,        /* extended_marker */
+  ERL_DRV_EXTENDED_MAJOR_VERSION, /* major_version */
+  ERL_DRV_EXTENDED_MINOR_VERSION, /* minor_version */
+  0,                    /* driver_flags */
+  NULL,                 /* handle2 */
+  NULL,                 /* process_exit */
+  NULL                  /* stop_select */
 };
 
 DRIVER_INIT(ejabberd_zlib_drv) /* must match name in driver_entry */
index 32826f2f7c0779238e9ef2ee990beb47b9b7f6ac..1ea17e5eecacf18dcf5843ad33b2b51a5d749747 100644 (file)
 #define PARSE_COMMAND 0
 #define PARSE_FINAL_COMMAND 1
 
+/*
+ * R15B changed several driver callbacks to use ErlDrvSizeT and
+ * ErlDrvSSizeT typedefs instead of int.
+ * This provides missing typedefs on older OTP versions.
+ */
+#if ERL_DRV_EXTENDED_MAJOR_VERSION < 2
+typedef int ErlDrvSizeT;
+typedef int ErlDrvSSizeT;
+#endif
+
 ei_x_buff event_buf;
 ei_x_buff xmlns_buf;
 
@@ -190,10 +200,10 @@ static void expat_erl_stop(ErlDrvData handle)
    driver_free((char*)handle);
 }
 
-static int expat_erl_control(ErlDrvData drv_data,
+static ErlDrvSSizeT expat_erl_control(ErlDrvData drv_data,
                             unsigned int command,
-                            char *buf, int len,
-                            char **rbuf, int rlen)
+                            char *buf, ErlDrvSizeT len,
+                            char **rbuf, ErlDrvSizeT rlen)
 {
    expat_data* d = (expat_data*)drv_data;
    int res, errcode;
@@ -251,7 +261,19 @@ ErlDrvEntry expat_driver_entry = {
    NULL,                       /* handle */
    expat_erl_control,          /* F_PTR control, port_command callback */
    NULL,                       /* F_PTR timeout, reserved */
-   NULL                                /* F_PTR outputv, reserved */
+   NULL,                       /* F_PTR outputv, reserved */
+  /* Added in Erlang/OTP R15B: */
+  NULL,                 /* ready_async */
+  NULL,                 /* flush */
+  NULL,                 /* call */
+  NULL,                 /* event */
+  ERL_DRV_EXTENDED_MARKER,        /* extended_marker */
+  ERL_DRV_EXTENDED_MAJOR_VERSION, /* major_version */
+  ERL_DRV_EXTENDED_MINOR_VERSION, /* minor_version */
+  0,                    /* driver_flags */
+  NULL,                 /* handle2 */
+  NULL,                 /* process_exit */
+  NULL                  /* stop_select */
 };
 
 DRIVER_INIT(expat_erl) /* must match name in driver_entry */
index 9f4850074d3b79fc73305bbbe6ca87b63a6720eb..cad415723579cbc375a7c8081e75650f865df0a8 100644 (file)
 #include <ei.h>
 #include <iconv.h>
 
+/*
+ * R15B changed several driver callbacks to use ErlDrvSizeT and
+ * ErlDrvSSizeT typedefs instead of int.
+ * This provides missing typedefs on older OTP versions.
+ */
+#if ERL_DRV_EXTENDED_MAJOR_VERSION < 2
+typedef int ErlDrvSizeT;
+typedef int ErlDrvSSizeT;
+#endif
+
 typedef struct {
       ErlDrvPort port;
       iconv_t cd;
@@ -46,10 +56,10 @@ static void iconv_erl_stop(ErlDrvData handle)
    driver_free((char*)handle);
 }
 
-static int iconv_erl_control(ErlDrvData drv_data,
+static ErlDrvSSizeT iconv_erl_control(ErlDrvData drv_data,
                             unsigned int command,
-                            char *buf, int len,
-                            char **rbuf, int rlen)
+                            char *buf, ErlDrvSizeT len,
+                            char **rbuf, ErlDrvSizeT rlen)
 {
    int i;
    int size;
@@ -144,7 +154,19 @@ ErlDrvEntry iconv_driver_entry = {
    NULL,                       /* handle */
    iconv_erl_control,          /* F_PTR control, port_command callback */
    NULL,                       /* F_PTR timeout, reserved */
-   NULL                        /* F_PTR outputv, reserved */
+   NULL,                       /* F_PTR outputv, reserved */
+  /* Added in Erlang/OTP R15B: */
+  NULL,                 /* ready_async */
+  NULL,                 /* flush */
+  NULL,                 /* call */
+  NULL,                 /* event */
+  ERL_DRV_EXTENDED_MARKER,        /* extended_marker */
+  ERL_DRV_EXTENDED_MAJOR_VERSION, /* major_version */
+  ERL_DRV_EXTENDED_MINOR_VERSION, /* minor_version */
+  0,                    /* driver_flags */
+  NULL,                 /* handle2 */
+  NULL,                 /* process_exit */
+  NULL                  /* stop_select */
 };
 
 DRIVER_INIT(iconv_erl) /* must match name in driver_entry */
index f4d98f842178b451d7e04c8d76d42f60e77741a7..e3246e80a6b965213f87040c4715a68b8b754b3c 100644 (file)
 #define NODEPREP_COMMAND 2
 #define RESOURCEPREP_COMMAND 3
 
+/*
+ * R15B changed several driver callbacks to use ErlDrvSizeT and
+ * ErlDrvSSizeT typedefs instead of int.
+ * This provides missing typedefs on older OTP versions.
+ */
+#if ERL_DRV_EXTENDED_MAJOR_VERSION < 2
+typedef int ErlDrvSizeT;
+typedef int ErlDrvSSizeT;
+#endif
+
 typedef struct {
       ErlDrvPort port;
 } stringprep_data;
@@ -194,10 +204,10 @@ static int compose(int ch1, int ch2)
 
 
 
-static int stringprep_erl_control(ErlDrvData drv_data,
+static ErlDrvSSizeT stringprep_erl_control(ErlDrvData drv_data,
                                  unsigned int command,
-                                 char *buf, int len,
-                                 char **rbuf, int rlen)
+                                 char *buf, ErlDrvSizeT len,
+                                 char **rbuf, ErlDrvSizeT rlen)
 {
    int i, j, pos=1;
    unsigned char c;
@@ -400,7 +410,19 @@ ErlDrvEntry stringprep_driver_entry = {
    NULL,                       /* handle */
    stringprep_erl_control,     /* F_PTR control, port_command callback */
    NULL,                       /* F_PTR timeout, reserved */
-   NULL                                /* F_PTR outputv, reserved */
+   NULL,                       /* F_PTR outputv, reserved */
+  /* Added in Erlang/OTP R15B: */
+  NULL,                 /* ready_async */
+  NULL,                 /* flush */
+  NULL,                 /* call */
+  NULL,                 /* event */
+  ERL_DRV_EXTENDED_MARKER,        /* extended_marker */
+  ERL_DRV_EXTENDED_MAJOR_VERSION, /* major_version */
+  ERL_DRV_EXTENDED_MINOR_VERSION, /* minor_version */
+  0,                    /* driver_flags */
+  NULL,                 /* handle2 */
+  NULL,                 /* process_exit */
+  NULL                  /* stop_select */
 };
 
 DRIVER_INIT(stringprep_erl) /* must match name in driver_entry */
index 22426703fd667698bb090d43f3a23cc38451c45e..fc8fb9a498f1adb1d0ee9bcf03da380af5035a83 100644 (file)
 #include <openssl/md2.h>
 #endif
 
+/*
+ * R15B changed several driver callbacks to use ErlDrvSizeT and
+ * ErlDrvSSizeT typedefs instead of int.
+ * This provides missing typedefs on older OTP versions.
+ */
+#if ERL_DRV_EXTENDED_MAJOR_VERSION < 2
+typedef int ErlDrvSizeT;
+typedef int ErlDrvSSizeT;
+#endif
+
 static ErlDrvData sha_drv_start(ErlDrvPort port, char *buf)
 {
   set_port_control_flags(port, PORT_CONTROL_FLAG_BINARY);
   return NULL;
 }
 
-static int sha_drv_control(ErlDrvData handle,
+static ErlDrvSSizeT sha_drv_control(ErlDrvData handle,
                           unsigned int command,
-                          char *buf, int len,
-                          char **rbuf, int rlen)
+                          char *buf, ErlDrvSizeT len,
+                          char **rbuf, ErlDrvSizeT rlen)
 {
   ErlDrvBinary *b = NULL;
 
@@ -89,7 +99,19 @@ ErlDrvEntry sha_driver_entry = {
   NULL,                        /* handle */
   sha_drv_control,     /* F_PTR control, port_command callback */
   NULL,                        /* F_PTR timeout, reserved */
-  NULL                 /* F_PTR outputv, reserved */
+  NULL,                        /* F_PTR outputv, reserved */
+  /* Added in Erlang/OTP R15B: */
+  NULL,                 /* ready_async */
+  NULL,                 /* flush */
+  NULL,                 /* call */
+  NULL,                 /* event */
+  ERL_DRV_EXTENDED_MARKER,        /* extended_marker */
+  ERL_DRV_EXTENDED_MAJOR_VERSION, /* major_version */
+  ERL_DRV_EXTENDED_MINOR_VERSION, /* minor_version */
+  0,                    /* driver_flags */
+  NULL,                 /* handle2 */
+  NULL,                 /* process_exit */
+  NULL                  /* stop_select */
 };
 
 DRIVER_INIT(sha_drv) /* must match name in driver_entry */
index bdb5446f2235acde953d022cbe70f84d2a252c14..c4210055a81670977638c5452ed1cc93532369a6 100644 (file)
@@ -44,6 +44,16 @@ typedef unsigned __int32 uint32_t;
 #define SSL_OP_NO_TICKET 0
 #endif
 
+/*
+ * R15B changed several driver callbacks to use ErlDrvSizeT and
+ * ErlDrvSSizeT typedefs instead of int.
+ * This provides missing typedefs on older OTP versions.
+ */
+#if ERL_DRV_EXTENDED_MAJOR_VERSION < 2
+typedef int ErlDrvSizeT;
+typedef int ErlDrvSSizeT;
+#endif
+
 /*
  * str_hash is based on the public domain code from
  * http://www.burtleburtle.net/bob/hash/doobs.html
@@ -305,10 +315,10 @@ static int verify_callback(int preverify_ok, X509_STORE_CTX *ctx)
         }
 
 
-static int tls_drv_control(ErlDrvData handle,
+static ErlDrvSSizeT tls_drv_control(ErlDrvData handle,
                           unsigned int command,
-                          char *buf, int len,
-                          char **rbuf, int rlen)
+                          char *buf, ErlDrvSizeT len,
+                          char **rbuf, ErlDrvSizeT rlen)
 {
    tls_data *d = (tls_data *)handle;
    int res;
@@ -503,7 +513,19 @@ ErlDrvEntry tls_driver_entry = {
    NULL,                       /* handle */
    tls_drv_control,            /* F_PTR control, port_command callback */
    NULL,                       /* F_PTR timeout, reserved */
-   NULL                                /* F_PTR outputv, reserved */
+   NULL,                       /* F_PTR outputv, reserved */
+  /* Added in Erlang/OTP R15B: */
+  NULL,                 /* ready_async */
+  NULL,                 /* flush */
+  NULL,                 /* call */
+  NULL,                 /* event */
+  ERL_DRV_EXTENDED_MARKER,        /* extended_marker */
+  ERL_DRV_EXTENDED_MAJOR_VERSION, /* major_version */
+  ERL_DRV_EXTENDED_MINOR_VERSION, /* minor_version */
+  0,                    /* driver_flags */
+  NULL,                 /* handle2 */
+  NULL,                 /* process_exit */
+  NULL                  /* stop_select */
 };
 
 DRIVER_INIT(tls_drv) /* must match name in driver_entry */