[PD-cvs] pd/src s_loader.c,1.4.4.5.2.10.2.5,1.4.4.5.2.10.2.6
Mathieu Bouchard
matju at users.sourceforge.net
Wed Jul 18 22:52:40 CEST 2007
Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11855
Modified Files:
Tag: desiredata
s_loader.c
Log Message:
removed some MAXPDSTRING
Index: s_loader.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/s_loader.c,v
retrieving revision 1.4.4.5.2.10.2.5
retrieving revision 1.4.4.5.2.10.2.6
diff -C2 -d -r1.4.4.5.2.10.2.5 -r1.4.4.5.2.10.2.6
*** s_loader.c 18 Jul 2007 20:19:40 -0000 1.4.4.5.2.10.2.5
--- s_loader.c 18 Jul 2007 20:52:38 -0000 1.4.4.5.2.10.2.6
***************
*** 18,24 ****
--- 18,27 ----
#endif
#include <string.h>
+ #define PD_PLUSPLUS_FACE
#include "desire.h"
#include "s_stuff.h"
#include <stdio.h>
+ #include <sstream>
+ using namespace std;
typedef void (*t_xxx)();
***************
*** 79,87 ****
}
static int sys_do_load_lib(t_canvas *canvas, char *objectname) {
! char symname[MAXPDSTRING], filename[MAXPDSTRING], dirbuf[MAXPDSTRING], *classname, *nameptr;
void *dlobj;
t_xxx makeout = NULL;
! int i, hexmunge = 0, fd;
#ifdef MSW
HINSTANCE ntdll;
--- 82,111 ----
}
+ static char *make_setup_name(const char *s) {
+ bool hexmunge=0;
+ ostringstream buf;
+ for (; *s; s++) {
+ char c = *s;
+ if ((c>='0' && c<='9') || (c>='A' && c<='Z') || (c>='a' && c<='z' )|| c == '_') {
+ buf << c;
+ } else if (c=='~' && s[1]==0) { /* trailing tilde becomes "_tilde" */
+ buf << "_tilde";
+ } else { /* anything you can't put in a C symbol is sprintf'ed in hex */
+ // load_object: symbol "setup_0xbf861ee4" not found
+ oprintf(buf,"0x%02x",c);
+ hexmunge = 1;
+ }
+ }
+ char *r;
+ if (hexmunge) asprintf(&r,"setup_%s",buf.str().data());
+ else asprintf(&r,"%s_setup",buf.str().data());
+ return r;
+ }
+
static int sys_do_load_lib(t_canvas *canvas, char *objectname) {
! char filename[MAXPDSTRING], dirbuf[MAXPDSTRING], *classname, *nameptr;
void *dlobj;
t_xxx makeout = NULL;
! int fd;
#ifdef MSW
HINSTANCE ntdll;
***************
*** 93,119 ****
return 1;
}
! for (i = 0, nameptr = classname; i < MAXPDSTRING-7 && *nameptr; nameptr++) {
! char c = *nameptr;
! if ((c>='0' && c<='9') || (c>='A' && c<='Z') || (c>='a' && c<='z' )|| c == '_') {
! symname[i++] = c;
! } else if (c == '~' && nameptr[1] == 0) { /* trailing tilde becomes "_tilde" */
! strcpy(symname+i, "_tilde");
! i += strlen(symname+i);
! } else { /* anything you can't put in a C symbol is sprintf'ed in hex */
! sprintf(symname+i, "0x%02x", c);
! i+=4;
! hexmunge = 1;
! }
! }
! symname[i] = 0;
! post("symname=%s",symname);
! if (hexmunge) {
! memmove(symname+6, symname, strlen(symname)+1);
! strncpy(symname, "setup_", 6);
! } else strcat(symname, "_setup");
! post("symname=%s",symname);
! #if 0
! fprintf(stderr, "lib: %s\n", classname);
! #endif
/* try looking in the path for (objectname).(sys_dllextent) ... */
if ((fd = canvas_open(canvas, objectname, sys_dllextent , dirbuf, &nameptr, MAXPDSTRING, 1)) >= 0) goto gotone;
--- 117,121 ----
return 1;
}
! char *symname = make_setup_name(classname);
/* try looking in the path for (objectname).(sys_dllextent) ... */
if ((fd = canvas_open(canvas, objectname, sys_dllextent , dirbuf, &nameptr, MAXPDSTRING, 1)) >= 0) goto gotone;
***************
*** 132,136 ****
close(fd);
class_set_extern_dir(gensym(dirbuf));
-
/* rebuild the absolute pathname */
strncpy(filename, dirbuf, MAXPDSTRING);
--- 134,137 ----
***************
*** 139,143 ****
strncat(filename, nameptr, MAXPDSTRING-strlen(filename));
filename[MAXPDSTRING-1] = 0;
-
#ifdef DL_OPEN
dlobj = dlopen(filename, RTLD_NOW | RTLD_GLOBAL);
--- 140,143 ----
***************
*** 145,151 ****
post("%s: %s", filename, dlerror());
class_set_extern_dir(&s_);
return 0;
}
! makeout = (t_xxx)dlsym(dlobj, symname);
#endif
#ifdef MSW
--- 145,152 ----
post("%s: %s", filename, dlerror());
class_set_extern_dir(&s_);
+ free(symname);
return 0;
}
! makeout = (t_xxx)dlsym(dlobj, symname);
#endif
#ifdef MSW
***************
*** 155,165 ****
post("%s: couldn't load", filename);
class_set_extern_dir(&s_);
return 0;
}
! makeout = (t_xxx)GetProcAddress(ntdll, symname);
#endif
if (!makeout) {
! post("load_object: Symbol \"%s\" not found", symname);
class_set_extern_dir(&s_);
return 0;
}
--- 156,168 ----
post("%s: couldn't load", filename);
class_set_extern_dir(&s_);
+ free(symname);
return 0;
}
! makeout = (t_xxx)GetProcAddress(ntdll);
#endif
if (!makeout) {
! post("%s: can't find symbol '%s' in library", filename, symname);
class_set_extern_dir(&s_);
+ free(symname);
return 0;
}
***************
*** 167,170 ****
--- 170,174 ----
class_set_extern_dir(&s_);
sys_putonloadlist(objectname);
+ free(symname);
return 1;
}
More information about the Pd-cvs
mailing list