3 * Platform: Macintosh CFM
4 * Author: Matthias Neeracher <neeri@iis.ee.ethz.ch>
5 * Adapted from dl_dlopen.xs reference implementation by
6 * Paul Marquess (pmarquess@bfsec.bt.co.uk)
8 * Revision 1.3 1998/04/07 01:47:24 neeri
11 * Revision 1.2 1997/08/08 16:39:18 neeri
12 * MacPerl 5.1.4b1 + time() fix
14 * Revision 1.1 1997/04/07 20:48:23 neeri
15 * Synchronized with MacPerl 5.1.4a1
24 #include <CodeFragments.h>
26 typedef CFragConnectionID ConnectionID;
29 ConnectionID ** x_connections;
30 } my_cxtx_t; /* this *must* be named my_cxtx_t */
32 #define DL_CXT_EXTRA /* ask for dl_cxtx to be defined in dlutils.c */
33 #include "dlutils.c" /* SaveError() etc */
35 #define dl_connections (dl_cxtx.x_connections)
37 static void terminate(void)
40 int size = GetHandleSize((Handle) dl_connections) / sizeof(ConnectionID);
41 HLock((Handle) dl_connections);
43 CloseConnection(*dl_connections + --size);
44 DisposeHandle((Handle) dl_connections);
51 (void)dl_generic_private_init(aTHX);
54 MODULE = DynaLoader PACKAGE = DynaLoader
57 (void)dl_private_init(aTHX);
61 dl_load_file(filename, flags=0)
71 DLDEBUG(1,PerlIO_printf(Perl_debug_log,"dl_load_file(%s):\n", filename));
72 err = GUSIPath2FSp(filename, &spec);
76 &spec, 0, 0, spec.name, kLoadCFrag, &connID, &mainAddr, errName);
79 if (!dl_connections) {
80 dl_connections = (ConnectionID **)NewHandle(0);
83 PtrAndHand((Ptr) &connID, (Handle) dl_connections, sizeof(ConnectionID));
86 RETVAL = (ConnectionID) 0;
87 DLDEBUG(2,PerlIO_printf(Perl_debug_log," libref=%d\n", RETVAL));
88 ST(0) = sv_newmortal() ;
90 SaveError(aTHX_ "DynaLoader error [%d, %#s]", err, errName) ;
92 sv_setiv( ST(0), (IV)RETVAL);
95 dl_find_symbol(connID, symbol)
102 CFragSymbolClass symClass;
103 DLDEBUG(2,PerlIO_printf(Perl_debug_log,"dl_find_symbol(handle=%x, symbol=%#s)\n",
105 err = FindSymbol(connID, symbol, &symAddr, &symClass);
108 RETVAL = (void *) symAddr;
109 DLDEBUG(2,PerlIO_printf(Perl_debug_log," symbolref = %x\n", RETVAL));
110 ST(0) = sv_newmortal() ;
112 SaveError(aTHX_ "DynaLoader error [%d]!", err) ;
114 sv_setiv( ST(0), (IV)RETVAL);
123 # These functions should not need changing on any platform:
126 dl_install_xsub(perl_name, symref, filename="$Package")
131 DLDEBUG(2,PerlIO_printf(Perl_debug_log,"dl_install_xsub(name=%s, symref=%x)\n",
133 ST(0)=sv_2mortal(newRV((SV*)newXS(perl_name, (void(*)())symref, filename)));
140 RETVAL = dl_last_error ;