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] |
> Cc: guile@cygnus.com > Content-Type: text/plain; charset=US-ASCII > From: Marius Vollmer <mvo@zagadka.ping.de> > Date: 22 Nov 1997 17:33:33 +0100 > > Many thanks for fixing the underscore problem! But of course, I have > some nits to pick: > > DLSYM_NEEDS_USCORE would be a better name, no? I thought so, but I was sticking as closely as possible to hag's original fix in SCSH, to reduce the likelihood of typos or other dumb goofs. Remember, DLSYM_NEEDS_USCORE is the opposite of DLSYM_ADDS_USCORE, so all of the logic would have to be reversed. The name of the macro didn't seem to make much difference, so I didn't change it. > libguile/ChangeLog talks about DLSYM_ADDS_UNDERSCORE, which is a typo, > I think. Yes, it is -- thanks for pointing this out. (As long as we're talking about the name of the macro, I'd probably prefer something like DLSYM_NEEDS_UNDERSCORE, which would even be more accurate. But I don't see a major reason for changing it.) > sysdep_dynl_func now always copies the symbol string into fresh > storage, even if no changes need to be done to it. Is this necessary? > > The symbol string memory is not freed when an error is thrown (due to > unresolvable symbols, for example). I've always been sloppy about memory leaks, so thanks for pointing this out! Here's the new sysdep_dynl_func, committed a few minutes ago. static void * sysdep_dynl_func (symb, handle, subr) char *symb; void *handle; char *subr; { void *fptr; char *err; char *usymb; #ifdef DLSYM_ADDS_USCORE fptr = dlsym (handle, symb); #else usymb = (char *) malloc (strlen (symb) + 2); *usymb = '_'; strcpy (usymb + 1, symb); fptr = dlsym (handle, usymb); free (usymb); #endif err = (char *)dlerror (); if (!fptr) { SCM_ALLOW_INTS; scm_misc_error (subr, err? err : "symbol has NULL address", SCM_EOL); } return fptr; }