Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

help with XS (Newx and

by Bpl (Scribe)
on Sep 05, 2020 at 16:05 UTC ( [id://11121376]=perlquestion: print w/replies, xml ) Need Help??

Bpl has asked for the wisdom of the Perl Monks concerning the following question:

Hi monkers, in those days, I am writing an XS library but I am having some difficulties converting the C's malloc and memset instruction into the perl's equivalent (for the perlClib) the code snippet is:
# C code r = (AirLorconDriver *) malloc(sizeof(AirLorconDriver *)); # where AirLorconDriver is: struct lorcon_driver { struct lorcon_driver *next; char *name; char *details; lorcon_drv_init init_func; lorcon_drv_probe probe_func; }lorcon_driver_t; typedef lorcon_driver_t AirLorconDriver;
This was the malloc's problem, the memset snippet is:
# C code memset(l_packet, 0, sizeof(AirLorconDriver)); # where l_packet is: AirLorconDriver *l_packet;
Can anyone help me translating those 2 obscure C function into perl's Newx and Zero functions? Thanks Edoardo Mantovani, 2020

Replies are listed 'Best First'.
Re: help with XS (Newx and
by Corion (Patriarch) on Sep 05, 2020 at 18:33 UTC

    Without testing it and actually going from the perlapi documentation for Newxz, the following should give you an allocated buffer, filled with zeroes:

    AirLorconDriver * l_packet; Newxz( l_packet, 1, AirLorconDriver); /* Remember to use SafeFree() to release the memory pointed to by l_pa +cket */

    Update: Also see perlguts for more discussion of Newx() and friends

      Hi! sorry if I ask, but the
      Newxz( l_packet, 1, AirLorconDriver);
      would be referred to the memset or to the malloc function? because in the malloc case (r = (AirLorconDriver *) malloc(sizeof(AirLorconDriver *) );) there isn't any packet_l. thanks Edoardo Mantovani, 2020

        Newxz is a combined malloc() plus memset() call, see perlapi and perlguts on it.

        I think the usage would be to declare the pointer to your struct and then to have it allocated and zeroed like this:

        Newxz( r, 1, AirLorconDriver );

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://11121376]
Approved by marto
Front-paged by haukex
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others studying the Monastery: (3)
As of 2024-04-26 05:28 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found