Can't send a long from a driver?

Vance Shipley <>
Thu Aug 21 08:53:52 CEST 2003


It seems the "driver term format" does not include support for
integers greater than a signed int.  To send an integer in from
a driver you can do this:

    ErlDriverTermData reply[] = {
            ERL_DRV_INT, 100,
    };

    driver_output_term(port, reply, (sizeof(reply) / sizeof(reply[0]));

Despite the fact that ErlDriverTermData is actually an unsigned long
If you try and send a long driver_output_term() will return -1 and the
term won't be received.

There are probably a few things missing from this list:

    Term type            Argument(s)
    ===========================================
    ERL_DRV_NIL          None
    ERL_DRV_ATOM         driver_mk_atom(string)
    ERL_DRV_INT          int
    ERL_DRV_PORT         driver_mk_port(ix)
    ERL_DRV_BINARY       ErlDriverBinary*, int len, int offset
    ERL_DRV_STRING       char*, int len
    ERL_DRV_TUPLE        int size
    ERL_DRV_LIST         int size
    ERL_DRV_PID          driver_connected,...
    ERL_DRV_STRING_CONS  char*, int len

I was beginning to panic but I realized that I can always send in a
binary and make it into what I need on the other side.  This is however 
rather kludgy for something as simple as an unsigned long (my current
dilema).  The strange thing is that ErlDriverTermData is actually an
unsigned long!

	-Vance




More information about the erlang-questions mailing list