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"!