This is the mail archive of the guile@cygnus.com mailing list for the guile project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

gh_list


Alexander Asteroth writes:
 > Does gh_list work?
 > 
 > The following c-source illustrates the problem:
 > 
 > #include <guile/gh.h>
 > 
 > void main_prog(int argc, char **argv) {
 >   SCM l1, l2;
 >   l1 = SCM_LIST2(gh_str02scm("filename"), gh_str02scm("bla"));
 >   gh_display(l1); gh_display(gh_str02scm(" is OK"));gh_newline();
 >   l2 = gh_list(gh_str02scm("filename"), gh_str02scm("bla"));
 > }
 > 
 > int main (int argc, char **argv) {gh_enter (argc, argv, main_prog);}
 > 
 > =>
 > (filename bla) is OK
 > Segmentation fault
 > 
 > Did I got somthing wrong on how gh_list should work?
 > 
 > Any help?

looks like `gh_list()' is really `scm_listify()', which has the
following as part of its implementation:

  while (elt != SCM_UNDEFINED)
    {
      *pos = scm_cons (elt, SCM_EOL);
      pos = SCM_CDRLOC (*pos);
      elt = va_arg (foo, SCM);
    }

what is happening is that the varargs walker `elt' is not finding
`SCM_UNDEFINED' and so walks off and weird things happen.  you should
use something like:

	l2 = gh_list (something, something_else, SCM_UNDEFINED);

happy hacking,
thi