On Fri, 2005-03-25 at 14:03 -0500, muppet wrote: > Scott T. Hildreth said: > > I am trying to call a function (from a structure that has a function > > pointer) from my XS code. It will return a char * that I will put on > > the stack. When it gets to the code where the code is called, perl > > just hangs. I've tried, > > > > directives->get() // get is declared as a func ptr in the struct. > > (char *)(*directives->get)() > > both of these syntaxes are valid, as the * (and the parens it necessitates) is > optional: > > char * try1 = (*directives->get) (); > char * try2 = directives->get (); > > > *(*directives->get)()'
Here is what I actually have in the code, } else { PUSHs(sv_2mortal( newSVpv(pfmt->directive[i], strlen(pfmt->directive[i])) )); directive = fmt_find_directive(pfmt->directive[i]); fprintf(stderr, "\n\n%s : %d\n\n", directive->str, directive->define_file_type); val = (*directive->get)(); if (val == NULL) { PUSHs(&PL_sv_undef); } else { PUSHs(sv_2mortal( newSVpv(val, strlen(val)) )); } > > this is not a good idea, as it immediately dereferences the returned value. > > i suspect your hang is only marginally related. what does gdb tell you? I have not used gdb with the XS, how would I do that? Do I need to compile a perl with -g & then put -g in the Makefile.PL ? Thanks. > > > > -- Scott T. Hildreth <[EMAIL PROTECTED]>