2 * Author: Mark Klein (mklein@dis.com)
3 * Version: 2.1, 1996/07/25
4 * Version: 2.2, 1997/09/25 Mark Bixby (markb@cccd.edu)
12 extern void HPGETPROCPLABEL( int parms,
24 #pragma intrinsic HPGETPROCPLABEL
26 #include "dlutils.c" /* for SaveError() etc */
29 char filename[PATH_MAX + 3];
30 } t_mpe_dld, *p_mpe_dld;
32 static AV *dl_resolve_using = Nullav;
37 (void)dl_generic_private_init();
38 dl_resolve_using = perl_get_av("DynaLoader::dl_resolve_using", 0x4);
41 MODULE = DynaLoader PACKAGE = DynaLoader
44 (void)dl_private_init();
47 dl_load_file(filename, flags=0)
51 char buf[PATH_MAX + 3];
55 DLDEBUG(1,PerlIO_printf(PerlIO_stderr(), "dl_load_file(%s,%x):\n", filename,
58 warn("Can't make loaded symbols global on this platform while loading %s
60 obj = (p_mpe_dld) safemalloc(sizeof(t_mpe_dld));
61 memzero(obj, sizeof(t_mpe_dld));
62 if (filename[0] == '.')
64 getcwd(buf,sizeof(buf));
65 sprintf(obj->filename,"$%s/%s$",buf,filename);
68 sprintf(obj->filename,"$%s$",filename);
70 DLDEBUG(2,PerlIO_printf(PerlIO_stderr()," libref=%x\n", obj));
72 ST(0) = sv_newmortal() ;
74 SaveError("%s",Strerror(errno));
76 sv_setiv( ST(0), (IV)obj);
79 dl_find_symbol(libhandle, symbolname)
84 p_mpe_dld obj = (p_mpe_dld) libhandle;
85 char symname[PATH_MAX + 3];
86 void * symaddr = NULL;
88 DLDEBUG(2,PerlIO_printf(PerlIO_stderr(),"dl_find_symbol(handle=%x, symbol=%s)\n",
89 libhandle, symbolname));
90 ST(0) = sv_newmortal() ;
93 sprintf(symname, "$%s$", symbolname);
94 HPGETPROCPLABEL(8, symname, &symaddr, &status, obj->filename, 1,
95 0, &datalen, 1, 0, 0);
97 DLDEBUG(2,PerlIO_printf(PerlIO_stderr()," symbolref(PROCEDURE) = %x\n", symaddr));
100 SaveError("%s",(errno) ? Strerror(errno) : "Symbol not found") ;
102 sv_setiv( ST(0), (IV)symaddr);
109 # These functions should not need changing on any platform:
112 dl_install_xsub(perl_name, symref, filename="$Package")
117 DLDEBUG(2,PerlIO_printf(PerlIO_stderr(),"dl_install_xsub(name=%s, symref=%x)\n",
119 ST(0)=sv_2mortal(newRV((SV*)newXS(perl_name, (void(*)())symref, filename)));