From 84adefa331c4159d432d22840663c38f155cd4c1 Mon Sep 17 00:00:00 2001 From: Erlang/OTP Date: Fri, 20 Nov 2009 14:54:40 +0000 Subject: The R13B03 release. --- erts/emulator/test/ddll_SUITE_data/lock_drv.c | 55 +++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 erts/emulator/test/ddll_SUITE_data/lock_drv.c (limited to 'erts/emulator/test/ddll_SUITE_data/lock_drv.c') diff --git a/erts/emulator/test/ddll_SUITE_data/lock_drv.c b/erts/emulator/test/ddll_SUITE_data/lock_drv.c new file mode 100644 index 0000000000..2ec8fa3a29 --- /dev/null +++ b/erts/emulator/test/ddll_SUITE_data/lock_drv.c @@ -0,0 +1,55 @@ +#include +#include "erl_driver.h" + +static ErlDrvPort erlang_port; +static ErlDrvData echo_start(ErlDrvPort, char *); +static void from_erlang(ErlDrvData, char*, int); +static int echo_call(ErlDrvData drv_data, unsigned int command, char *buf, + int len, char **rbuf, int rlen, unsigned *ret_flags); +static ErlDrvEntry echo_driver_entry = { + NULL, /* Init */ + echo_start, + NULL, /* Stop */ + from_erlang, + NULL, /* Ready input */ + NULL, /* Ready output */ + "lock_drv", + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + echo_call +}; + +DRIVER_INIT(echo_drv) +{ + return &echo_driver_entry; +} + +static ErlDrvData +echo_start(ErlDrvPort port, char *buf) +{ + driver_lock_driver(port); + return (ErlDrvData) port; +} + +static void +from_erlang(ErlDrvData data, char *buf, int count) +{ + driver_output((ErlDrvPort) data, buf, count); +} + +static int +echo_call(ErlDrvData drv_data, unsigned int command, char *buf, + int len, char **rbuf, int rlen, unsigned *ret_flags) +{ + ErlDrvPort port = (ErlDrvPort) drv_data; + driver_lock_driver(port); + *rbuf = buf; + *ret_flags |= DRIVER_CALL_KEEP_BUFFER; + return len; +} + -- cgit v1.2.3