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 | |
by mugwumpjism (Hermit) on Nov 06, 2001 at 00:01 UTC | |
by busunsl (Vicar) on Nov 06, 2001 at 11:56 UTC |
In Section
Seekers of Perl Wisdom