/[guile]/guile/guile-core/libguile/dynl.c
ViewVC logotype

Diff of /guile/guile-core/libguile/dynl.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.67 by ossau, Tue Jan 22 23:31:38 2002 UTC revision 1.68 by mvo, Mon Feb 11 18:06:49 2002 UTC
# Line 89  maybe_drag_in_eprintf () Line 89  maybe_drag_in_eprintf ()
89     (Dirk: IMO strings.c is not the right place.) */     (Dirk: IMO strings.c is not the right place.) */
90    
91  static char **  static char **
92  scm_make_argv_from_stringlist (SCM args,int *argcp,const char *subr,int argn)  scm_make_argv_from_stringlist (SCM args, int *argcp, const char *subr,
93                                   int argn)
94  {  {
95    char **argv;    char **argv;
96    int argc;    int argc;
# Line 97  scm_make_argv_from_stringlist (SCM args, Line 98  scm_make_argv_from_stringlist (SCM args,
98    
99    argc = scm_ilength (args);    argc = scm_ilength (args);
100    SCM_ASSERT (argc >= 0, args, argn, subr);    SCM_ASSERT (argc >= 0, args, argn, subr);
101    argv = (char **) scm_must_malloc ((argc + 1) * sizeof (char *), subr);    argv = (char **) scm_malloc ((argc + 1) * sizeof (char *));
102    for (i = 0; !SCM_NULL_OR_NIL_P (args); args = SCM_CDR (args), ++i) {    for (i = 0; !SCM_NULL_OR_NIL_P (args); args = SCM_CDR (args), ++i) {
103      SCM arg = SCM_CAR (args);      SCM arg = SCM_CAR (args);
104      size_t len;      size_t len;
# Line 107  scm_make_argv_from_stringlist (SCM args, Line 108  scm_make_argv_from_stringlist (SCM args,
108      SCM_ASSERT (SCM_STRINGP (arg), args, argn, subr);      SCM_ASSERT (SCM_STRINGP (arg), args, argn, subr);
109      len = SCM_STRING_LENGTH (arg);      len = SCM_STRING_LENGTH (arg);
110      src = SCM_STRING_CHARS (arg);      src = SCM_STRING_CHARS (arg);
111      dst = (char *) scm_must_malloc (len + 1, subr);      dst = (char *) scm_malloc (len + 1);
112      memcpy (dst, src, len);      memcpy (dst, src, len);
113      dst[len] = 0;      dst[len] = 0;
114      argv[i] = dst;      argv[i] = dst;
# Line 120  scm_make_argv_from_stringlist (SCM args, Line 121  scm_make_argv_from_stringlist (SCM args,
121  }  }
122    
123  static void  static void
124  scm_must_free_argv(char **argv)  scm_free_argv (char **argv)
125  {  {
126    char **av = argv;    char **av = argv;
127    while (*av)    while (*av)
# Line 398  SCM_DEFINE (scm_dynamic_args_call, "dyna Line 399  SCM_DEFINE (scm_dynamic_args_call, "dyna
399    SCM_DEFER_INTS;    SCM_DEFER_INTS;
400    argv = scm_make_argv_from_stringlist (args, &argc, FUNC_NAME, SCM_ARG3);    argv = scm_make_argv_from_stringlist (args, &argc, FUNC_NAME, SCM_ARG3);
401    result = (*fptr) (argc, argv);    result = (*fptr) (argc, argv);
402    scm_must_free_argv (argv);    scm_free_argv (argv);
403    SCM_ALLOW_INTS;    SCM_ALLOW_INTS;
404    
405    return SCM_MAKINUM (0L + result);    return SCM_MAKINUM (0L + result);

Legend:
Removed from v.1.67  
changed lines
  Added in v.1.68

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26