aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/test/trace_SUITE_data/slow_drv.c
diff options
context:
space:
mode:
Diffstat (limited to 'erts/emulator/test/trace_SUITE_data/slow_drv.c')
-rw-r--r--erts/emulator/test/trace_SUITE_data/slow_drv.c205
1 files changed, 0 insertions, 205 deletions
diff --git a/erts/emulator/test/trace_SUITE_data/slow_drv.c b/erts/emulator/test/trace_SUITE_data/slow_drv.c
deleted file mode 100644
index c3e9db0fb8..0000000000
--- a/erts/emulator/test/trace_SUITE_data/slow_drv.c
+++ /dev/null
@@ -1,205 +0,0 @@
-/* ``The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved via the world wide web at http://www.erlang.org/.
- *
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
- *
- * The Initial Developer of the Original Code is Ericsson Utvecklings AB.
- * Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
- * AB. All Rights Reserved.''
- *
- * $Id$
- */
-
-#ifndef UNIX
-#if !defined(__WIN32__) && !defined(VXWORKS)
-#define UNIX 1
-#endif
-#endif
-
-/* We actually only want to run this on
- Unix machines which have the usleep call */
-#if defined(UNIX) && !defined(HAVE_USLEEP)
-#undef UNIX
-#endif
-
-#ifdef UNIX
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h> /* rand */
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#ifdef HAVE_POLL_H
-# include <poll.h>
-#endif
-#endif /* UNIX */
-
-#include "erl_driver.h"
-
-static int slow_drv_init(void);
-static void slow_drv_finish(void);
-static ErlDrvData slow_drv_start(ErlDrvPort, char *);
-static void slow_drv_stop(ErlDrvData);
-static void slow_drv_ready_input(ErlDrvData, ErlDrvEvent);
-static ErlDrvSSizeT slow_drv_control(ErlDrvData, unsigned int,
- char *, ErlDrvSizeT, char **, ErlDrvSizeT);
-
-static ErlDrvEntry slow_drv_entry = {
- slow_drv_init,
- slow_drv_start,
- slow_drv_stop,
- NULL, /* output */
- slow_drv_ready_input,
- NULL, /* ready_output */
- "slow_drv",
- slow_drv_finish,
- NULL, /* handle */
- slow_drv_control,
- NULL, /* timeout */
- NULL, /* outputv */
- NULL, /* ready_async */
- NULL, /* flush */
- NULL, /* call */
- NULL, /* event */
-
- ERL_DRV_EXTENDED_MARKER,
- ERL_DRV_EXTENDED_MAJOR_VERSION,
- ERL_DRV_EXTENDED_MINOR_VERSION,
- ERL_DRV_FLAG_USE_PORT_LOCKING,
- NULL,/* void *handle2 */
- NULL,/* process_exit */
- NULL /* stop select */
-};
-typedef struct {
- ErlDrvPort port;
- ErlDrvTermData id;
- int test;
- int s[2];
-} SlowDrvData;
-
-/* -------------------------------------------------------------------------
-** Entry functions
-**/
-
-DRIVER_INIT(slow_drv)
-{
- return &slow_drv_entry;
-}
-
-
-static int
-slow_drv_init(void)
-{
- return 0;
-}
-
-static void
-slow_drv_finish(void)
-{
-}
-
-
-static ErlDrvData
-slow_drv_start(ErlDrvPort port, char *command)
-{
-#ifndef UNIX
- return NULL;
-#else
- SlowDrvData *sddp = driver_alloc(sizeof(SlowDrvData));
- if (!sddp) {
- errno = ENOMEM;
- return ERL_DRV_ERROR_ERRNO;
- }
- sddp->port = port;
- sddp->id = driver_mk_port(port);
- sddp->test = 0;
- sddp->s[0] = sddp->s[1] = -1;
- return (ErlDrvData) sddp;
-#endif
-}
-
-static void
-slow_drv_stop(ErlDrvData drv_data) {
-#ifdef UNIX
- SlowDrvData *sddp = (SlowDrvData *) drv_data;
-
- if (sddp->test) {
- driver_select(sddp->port, (ErlDrvEvent) (ErlDrvSInt) sddp->s[0], DO_READ, 0);
- close(sddp->s[0]);
- close(sddp->s[1]);
- }
-
- driver_free((void *) sddp);
-
-#endif
-}
-
-static ErlDrvSSizeT
-slow_drv_control(ErlDrvData drv_data,
- unsigned int command,
- char *buf, ErlDrvSizeT len,
- char **rbuf, ErlDrvSizeT rlen)
-{
- SlowDrvData *sddp = (SlowDrvData *) drv_data;
- char *res_str = "ok";
- int res_len;
- switch (command) {
- case 0:
- /* just be slow */
- usleep(222000);
- break;
- case 1:
- /* create pipes and select on input */
- if (sddp->test) {
- res_str = "no";
- break;
- }
- sddp->test = 1;
- pipe(sddp->s);
- driver_select(sddp->port, (ErlDrvEvent) (ErlDrvSInt) sddp->s[0], DO_READ, 1);
- break;
- case 2:
- if (!sddp->test) {
- res_str = "no";
- break;
- }
- write(sddp->s[1],"boo",3);
- break;
- }
-
- res_len = strlen(res_str);
- if (res_len > rlen) {
- char *abuf = driver_alloc(sizeof(char)*res_len);
- if (!abuf)
- return 0;
- *rbuf = abuf;
- }
-
- memcpy((void *) *rbuf, (void *) res_str, res_len);
-
- return res_len;
-}
-
-static void
-slow_drv_ready_input(ErlDrvData drv_data, ErlDrvEvent event)
-{
-#ifdef UNIX
- SlowDrvData *sddp = (SlowDrvData *) drv_data;
- int fd = (int) (ErlDrvSInt) event;
- if (sddp->test) {
- char buff[3];
- usleep(212000);
- read(sddp->s[0],buff,3);
- driver_output(sddp->port, "TheEnd", 6);
- }
-
-#endif
-}