Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses

Re: Re: XS routine returns an extra depth of array refs

by mugwumpjism (Hermit)
on Nov 05, 2001 at 23:34 UTC ( #123392=note: print w/replies, xml ) Need Help??

in reply to Re: XS routine returns an extra depth of array refs
in thread XS routine returns an extra depth of array refs

If you really want to output arrays from C, you need to push your items on the stack.

Right, that's the ticket. This seems to work the way I want:

#include <sys/types.h> #include <dirent.h> #include <stdio.h> void readdir_inode(dirname) char* dirname INIT: struct dirent *ent; DIR* dir; SV* record[2]; AV *entry, *ret_val; PPCODE: dir = opendir(dirname); if (dir) { while ((ent=readdir(dir))) { printf("%ld %x\n", ent->d_ino, ent->d_name); record[0] = newSVpv(ent->d_name, 0); record[1] = newSViv((IV)ent->d_ino); PUSHs(newRV_noinc(av_make(2, record))); } closedir(dir); }

At least, I hope that last "newRV_noinc" shouldn't be a "newRV_inc"!

Replies are listed 'Best First'.
Re:{3} XS routine returns an extra depth of array refs
by jeroenes (Priest) on Nov 05, 2001 at 23:48 UTC
    It should be newRV_inc. :-)

    Only with inline the refcounter of the SV gets auto-incremented. With XS you have to that yourself.

    Update: For clarity, only the refcounter of the SV that gets returned! Other SV*'s you have to inc manually!

      The whole reason I'm not using Inline is because I want to be able to compile this as a module and not have it try to compile stuff at run time!
        Modules using Inline are compiled only once and this can be done during installation or even before distribution (for win32 for ex.).

        You have to modify your Makefile.PL for that, it's in the docs.

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://123392]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (2)
As of 2023-09-21 19:36 GMT
Find Nodes?
    Voting Booth?

    No recent polls found