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"!
In reply to Re: Re: XS routine returns an extra depth of array refs
by mugwumpjism
in thread XS routine returns an extra depth of array refs
by mugwumpjism
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |