Attachment "357.patch" to
ticket [2891616fff]
added by
kennykb
2010-03-17 10:22:27.
0000: 3f 20 4e 53 4b 31 32 30 30 30 30 32 38 35 32 41 ? NSK1200002852A
0010: 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f .Index: generic/
0020: 74 63 6c 2e 64 65 63 6c 73 0a 3d 3d 3d 3d 3d 3d tcl.decls.======
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0050: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0060: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 =============.RC
0070: 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 S file: /cvsroot
0080: 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 63 /tcl/tcl/generic
0090: 2f 74 63 6c 2e 64 65 63 6c 73 2c 76 0a 72 65 74 /tcl.decls,v.ret
00a0: 72 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e rieving revision
00b0: 20 31 2e 31 37 32 0a 64 69 66 66 20 2d 72 31 2e 1.172.diff -r1.
00c0: 31 37 32 20 74 63 6c 2e 64 65 63 6c 73 0a 32 33 172 tcl.decls.23
00d0: 30 37 61 32 33 30 38 2c 32 33 32 31 0a 3e 20 23 07a2308,2321.> #
00e0: 20 54 49 50 20 23 33 35 37 20 28 45 78 70 6f 72 TIP #357 (Expor
00f0: 74 20 54 63 6c 4c 6f 61 64 46 69 6c 65 20 61 6e t TclLoadFile an
0100: 64 20 54 63 6c 70 46 69 6e 64 53 79 6d 62 6f 6c d TclpFindSymbol
0110: 29 20 6b 62 6b 0a 3e 20 64 65 63 6c 61 72 65 20 ) kbk.> declare
0120: 36 32 37 20 67 65 6e 65 72 69 63 20 7b 0a 3e 20 627 generic {.>
0130: 20 20 20 20 69 6e 74 20 54 63 6c 5f 4c 6f 61 64 int Tcl_Load
0140: 46 69 6c 65 28 54 63 6c 5f 49 6e 74 65 72 70 20 File(Tcl_Interp
0150: 2a 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a *interp, Tcl_Obj
0160: 20 2a 70 61 74 68 50 74 72 2c 0a 3e 20 09 09 20 *pathPtr,.> ..
0170: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
0180: 73 79 6d 76 5b 5d 2c 20 69 6e 74 20 66 6c 61 67 symv[], int flag
0190: 73 2c 20 76 6f 69 64 2a 20 70 72 6f 63 50 74 72 s, void* procPtr
01a0: 73 2c 0a 3e 20 09 09 20 20 20 20 20 54 63 6c 5f s,.> .. Tcl_
01b0: 4c 6f 61 64 48 61 6e 64 6c 65 2a 20 68 61 6e 64 LoadHandle* hand
01c0: 6c 65 50 74 72 29 0a 3e 20 7d 0a 3e 20 64 65 63 lePtr).> }.> dec
01d0: 6c 61 72 65 20 36 32 38 20 67 65 6e 65 72 69 63 lare 628 generic
01e0: 20 7b 0a 3e 20 20 20 20 20 76 6f 69 64 2a 20 54 {.> void* T
01f0: 63 6c 5f 46 69 6e 64 53 79 6d 62 6f 6c 28 54 63 cl_FindSymbol(Tc
0200: 6c 5f 49 6e 74 65 72 70 2a 20 69 6e 74 65 72 70 l_Interp* interp
0210: 2c 20 54 63 6c 5f 4c 6f 61 64 48 61 6e 64 6c 65 , Tcl_LoadHandle
0220: 20 68 61 6e 64 6c 65 2c 0a 3e 20 09 09 09 20 63 handle,.> ... c
0230: 6f 6e 73 74 20 63 68 61 72 2a 20 73 79 6d 62 6f onst char* symbo
0240: 6c 29 0a 3e 20 7d 0a 3e 20 64 65 63 6c 61 72 65 l).> }.> declare
0250: 20 36 32 39 20 67 65 6e 65 72 69 63 20 7b 0a 3e 629 generic {.>
0260: 20 20 20 20 20 69 6e 74 20 54 63 6c 5f 46 53 55 int Tcl_FSU
0270: 6e 6c 6f 61 64 46 69 6c 65 28 54 63 6c 5f 49 6e nloadFile(Tcl_In
0280: 74 65 72 70 2a 20 69 6e 74 65 72 70 2c 20 54 63 terp* interp, Tc
0290: 6c 5f 4c 6f 61 64 48 61 6e 64 6c 65 20 68 61 6e l_LoadHandle han
02a0: 64 6c 65 50 74 72 29 0a 3e 20 7d 0a 3e 20 0a 49 dlePtr).> }.> .I
02b0: 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f 74 63 ndex: generic/tc
02c0: 6c 44 65 63 6c 73 2e 68 0a 3d 3d 3d 3d 3d 3d 3d lDecls.h.=======
02d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
02e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
02f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0300: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 ============.RCS
0310: 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f file: /cvsroot/
0320: 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 63 2f tcl/tcl/generic/
0330: 74 63 6c 44 65 63 6c 73 2e 68 2c 76 0a 72 65 74 tclDecls.h,v.ret
0340: 72 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e rieving revision
0350: 20 31 2e 31 37 34 0a 64 69 66 66 20 2d 72 31 2e 1.174.diff -r1.
0360: 31 37 34 20 74 63 6c 44 65 63 6c 73 2e 68 0a 33 174 tclDecls.h.3
0370: 36 38 36 61 33 36 38 37 2c 33 37 30 35 0a 3e 20 686a3687,3705.>
0380: 23 69 66 6e 64 65 66 20 54 63 6c 5f 4c 6f 61 64 #ifndef Tcl_Load
0390: 46 69 6c 65 5f 54 43 4c 5f 44 45 43 4c 41 52 45 File_TCL_DECLARE
03a0: 44 0a 3e 20 23 64 65 66 69 6e 65 20 54 63 6c 5f D.> #define Tcl_
03b0: 4c 6f 61 64 46 69 6c 65 5f 54 43 4c 5f 44 45 43 LoadFile_TCL_DEC
03c0: 4c 41 52 45 44 0a 3e 20 2f 2a 20 36 32 37 20 2a LARED.> /* 627 *
03d0: 2f 0a 3e 20 45 58 54 45 52 4e 20 69 6e 74 09 09 /.> EXTERN int..
03e0: 54 63 6c 5f 4c 6f 61 64 46 69 6c 65 28 54 63 6c Tcl_LoadFile(Tcl
03f0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c _Interp *interp,
0400: 20 54 63 6c 5f 4f 62 6a 20 2a 70 61 74 68 50 74 Tcl_Obj *pathPt
0410: 72 2c 0a 3e 20 09 09 09 09 63 6f 6e 73 74 20 63 r,.> ....const c
0420: 68 61 72 20 2a 73 79 6d 76 5b 5d 2c 20 69 6e 74 har *symv[], int
0430: 20 66 6c 61 67 73 2c 20 76 6f 69 64 2a 70 72 6f flags, void*pro
0440: 63 50 74 72 73 2c 0a 3e 20 09 09 09 09 54 63 6c cPtrs,.> ....Tcl
0450: 5f 4c 6f 61 64 48 61 6e 64 6c 65 2a 68 61 6e 64 _LoadHandle*hand
0460: 6c 65 50 74 72 29 3b 0a 3e 20 23 65 6e 64 69 66 lePtr);.> #endif
0470: 0a 3e 20 23 69 66 6e 64 65 66 20 54 63 6c 5f 46 .> #ifndef Tcl_F
0480: 69 6e 64 53 79 6d 62 6f 6c 5f 54 43 4c 5f 44 45 indSymbol_TCL_DE
0490: 43 4c 41 52 45 44 0a 3e 20 23 64 65 66 69 6e 65 CLARED.> #define
04a0: 20 54 63 6c 5f 46 69 6e 64 53 79 6d 62 6f 6c 5f Tcl_FindSymbol_
04b0: 54 43 4c 5f 44 45 43 4c 41 52 45 44 0a 3e 20 2f TCL_DECLARED.> /
04c0: 2a 20 36 32 38 20 2a 2f 0a 3e 20 45 58 54 45 52 * 628 */.> EXTER
04d0: 4e 20 76 6f 69 64 2a 09 09 54 63 6c 5f 46 69 6e N void*..Tcl_Fin
04e0: 64 53 79 6d 62 6f 6c 28 54 63 6c 5f 49 6e 74 65 dSymbol(Tcl_Inte
04f0: 72 70 2a 69 6e 74 65 72 70 2c 0a 3e 20 09 09 09 rp*interp,.> ...
0500: 09 54 63 6c 5f 4c 6f 61 64 48 61 6e 64 6c 65 20 .Tcl_LoadHandle
0510: 68 61 6e 64 6c 65 2c 20 63 6f 6e 73 74 20 63 68 handle, const ch
0520: 61 72 2a 73 79 6d 62 6f 6c 29 3b 0a 3e 20 23 65 ar*symbol);.> #e
0530: 6e 64 69 66 0a 3e 20 23 69 66 6e 64 65 66 20 54 ndif.> #ifndef T
0540: 63 6c 5f 46 53 55 6e 6c 6f 61 64 46 69 6c 65 5f cl_FSUnloadFile_
0550: 54 43 4c 5f 44 45 43 4c 41 52 45 44 0a 3e 20 23 TCL_DECLARED.> #
0560: 64 65 66 69 6e 65 20 54 63 6c 5f 46 53 55 6e 6c define Tcl_FSUnl
0570: 6f 61 64 46 69 6c 65 5f 54 43 4c 5f 44 45 43 4c oadFile_TCL_DECL
0580: 41 52 45 44 0a 3e 20 2f 2a 20 36 32 39 20 2a 2f ARED.> /* 629 */
0590: 0a 3e 20 45 58 54 45 52 4e 20 69 6e 74 09 09 54 .> EXTERN int..T
05a0: 63 6c 5f 46 53 55 6e 6c 6f 61 64 46 69 6c 65 28 cl_FSUnloadFile(
05b0: 54 63 6c 5f 49 6e 74 65 72 70 2a 69 6e 74 65 72 Tcl_Interp*inter
05c0: 70 2c 0a 3e 20 09 09 09 09 54 63 6c 5f 4c 6f 61 p,.> ....Tcl_Loa
05d0: 64 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 50 74 dHandle handlePt
05e0: 72 29 3b 0a 3e 20 23 65 6e 64 69 66 0a 34 33 34 r);.> #endif.434
05f0: 38 61 34 33 36 38 2c 34 33 37 30 0a 3e 20 20 20 8a4368,4370.>
0600: 20 20 69 6e 74 20 28 2a 74 63 6c 5f 4c 6f 61 64 int (*tcl_Load
0610: 46 69 6c 65 29 20 28 54 63 6c 5f 49 6e 74 65 72 File) (Tcl_Inter
0620: 70 20 2a 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f p *interp, Tcl_O
0630: 62 6a 20 2a 70 61 74 68 50 74 72 2c 20 63 6f 6e bj *pathPtr, con
0640: 73 74 20 63 68 61 72 20 2a 73 79 6d 76 5b 5d 2c st char *symv[],
0650: 20 69 6e 74 20 66 6c 61 67 73 2c 20 76 6f 69 64 int flags, void
0660: 2a 70 72 6f 63 50 74 72 73 2c 20 54 63 6c 5f 4c *procPtrs, Tcl_L
0670: 6f 61 64 48 61 6e 64 6c 65 2a 68 61 6e 64 6c 65 oadHandle*handle
0680: 50 74 72 29 3b 20 2f 2a 20 36 32 37 20 2a 2f 0a Ptr); /* 627 */.
0690: 3e 20 20 20 20 20 76 6f 69 64 2a 20 28 2a 74 63 > void* (*tc
06a0: 6c 5f 46 69 6e 64 53 79 6d 62 6f 6c 29 20 28 54 l_FindSymbol) (T
06b0: 63 6c 5f 49 6e 74 65 72 70 2a 69 6e 74 65 72 70 cl_Interp*interp
06c0: 2c 20 54 63 6c 5f 4c 6f 61 64 48 61 6e 64 6c 65 , Tcl_LoadHandle
06d0: 20 68 61 6e 64 6c 65 2c 20 63 6f 6e 73 74 20 63 handle, const c
06e0: 68 61 72 2a 73 79 6d 62 6f 6c 29 3b 20 2f 2a 20 har*symbol); /*
06f0: 36 32 38 20 2a 2f 0a 3e 20 20 20 20 20 69 6e 74 628 */.> int
0700: 20 28 2a 74 63 6c 5f 46 53 55 6e 6c 6f 61 64 46 (*tcl_FSUnloadF
0710: 69 6c 65 29 20 28 54 63 6c 5f 49 6e 74 65 72 70 ile) (Tcl_Interp
0720: 2a 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4c 6f 61 *interp, Tcl_Loa
0730: 64 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 50 74 dHandle handlePt
0740: 72 29 3b 20 2f 2a 20 36 32 39 20 2a 2f 0a 36 38 r); /* 629 */.68
0750: 38 36 61 36 39 30 39 2c 36 39 32 30 0a 3e 20 23 86a6909,6920.> #
0760: 69 66 6e 64 65 66 20 54 63 6c 5f 4c 6f 61 64 46 ifndef Tcl_LoadF
0770: 69 6c 65 0a 3e 20 23 64 65 66 69 6e 65 20 54 63 ile.> #define Tc
0780: 6c 5f 4c 6f 61 64 46 69 6c 65 20 5c 0a 3e 20 09 l_LoadFile \.> .
0790: 28 74 63 6c 53 74 75 62 73 50 74 72 2d 3e 74 63 (tclStubsPtr->tc
07a0: 6c 5f 4c 6f 61 64 46 69 6c 65 29 20 2f 2a 20 36 l_LoadFile) /* 6
07b0: 32 37 20 2a 2f 0a 3e 20 23 65 6e 64 69 66 0a 3e 27 */.> #endif.>
07c0: 20 23 69 66 6e 64 65 66 20 54 63 6c 5f 46 69 6e #ifndef Tcl_Fin
07d0: 64 53 79 6d 62 6f 6c 0a 3e 20 23 64 65 66 69 6e dSymbol.> #defin
07e0: 65 20 54 63 6c 5f 46 69 6e 64 53 79 6d 62 6f 6c e Tcl_FindSymbol
07f0: 20 5c 0a 3e 20 09 28 74 63 6c 53 74 75 62 73 50 \.> .(tclStubsP
0800: 74 72 2d 3e 74 63 6c 5f 46 69 6e 64 53 79 6d 62 tr->tcl_FindSymb
0810: 6f 6c 29 20 2f 2a 20 36 32 38 20 2a 2f 0a 3e 20 ol) /* 628 */.>
0820: 23 65 6e 64 69 66 0a 3e 20 23 69 66 6e 64 65 66 #endif.> #ifndef
0830: 20 54 63 6c 5f 46 53 55 6e 6c 6f 61 64 46 69 6c Tcl_FSUnloadFil
0840: 65 0a 3e 20 23 64 65 66 69 6e 65 20 54 63 6c 5f e.> #define Tcl_
0850: 46 53 55 6e 6c 6f 61 64 46 69 6c 65 20 5c 0a 3e FSUnloadFile \.>
0860: 20 09 28 74 63 6c 53 74 75 62 73 50 74 72 2d 3e .(tclStubsPtr->
0870: 74 63 6c 5f 46 53 55 6e 6c 6f 61 64 46 69 6c 65 tcl_FSUnloadFile
0880: 29 20 2f 2a 20 36 32 39 20 2a 2f 0a 3e 20 23 65 ) /* 629 */.> #e
0890: 6e 64 69 66 0a 49 6e 64 65 78 3a 20 67 65 6e 65 ndif.Index: gene
08a0: 72 69 63 2f 74 63 6c 49 4f 55 74 69 6c 2e 63 0a ric/tclIOUtil.c.
08b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
08c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
08d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
08e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
08f0: 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 ===.RCS file: /c
0900: 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67 vsroot/tcl/tcl/g
0910: 65 6e 65 72 69 63 2f 74 63 6c 49 4f 55 74 69 6c eneric/tclIOUtil
0920: 2e 63 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 .c,v.retrieving
0930: 72 65 76 69 73 69 6f 6e 20 31 2e 31 37 30 0a 64 revision 1.170.d
0940: 69 66 66 20 2d 72 31 2e 31 37 30 20 74 63 6c 49 iff -r1.170 tclI
0950: 4f 55 74 69 6c 2e 63 0a 34 34 61 34 35 2c 34 38 OUtil.c.44a45,48
0960: 0a 3e 20 73 74 61 74 69 63 20 76 6f 69 64 2a 09 .> static void*.
0970: 09 44 69 76 65 72 74 46 69 6e 64 53 79 6d 62 6f .DivertFindSymbo
0980: 6c 28 54 63 6c 5f 49 6e 74 65 72 70 2a 20 69 6e l(Tcl_Interp* in
0990: 74 65 72 70 2c 0a 3e 20 09 09 09 09 09 20 54 63 terp,.> ..... Tc
09a0: 6c 5f 4c 6f 61 64 48 61 6e 64 6c 65 20 6c 6f 61 l_LoadHandle loa
09b0: 64 48 61 6e 64 6c 65 2c 0a 3e 20 09 09 09 09 09 dHandle,.> .....
09c0: 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 73 79 6d const char* sym
09d0: 62 6f 6c 29 3b 0a 3e 20 73 74 61 74 69 63 20 76 bol);.> static v
09e0: 6f 69 64 09 09 44 69 76 65 72 74 55 6e 6c 6f 61 oid..DivertUnloa
09f0: 64 46 69 6c 65 28 54 63 6c 5f 4c 6f 61 64 48 61 dFile(Tcl_LoadHa
0a00: 6e 64 6c 65 20 6c 6f 61 64 48 61 6e 64 6c 65 29 ndle loadHandle)
0a10: 3b 0a 32 39 37 30 2c 32 39 37 32 63 32 39 37 34 ;.2970,2972c2974
0a20: 2c 32 39 37 35 0a 3c 20 20 20 20 20 63 6f 6e 73 ,2975.< cons
0a30: 74 20 63 68 61 72 20 2a 73 79 6d 62 6f 6c 73 5b t char *symbols[
0a40: 32 5d 3b 0a 3c 20 20 20 20 20 54 63 6c 5f 50 61 2];.< Tcl_Pa
0a50: 63 6b 61 67 65 49 6e 69 74 50 72 6f 63 20 2a 2a ckageInitProc **
0a60: 70 72 6f 63 50 74 72 73 5b 32 5d 3b 0a 3c 20 20 procPtrs[2];.<
0a70: 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c ClientData cl
0a80: 69 65 6e 74 44 61 74 61 3b 0a 2d 2d 2d 0a 3e 20 ientData;.---.>
0a90: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
0aa0: 73 79 6d 62 6f 6c 73 5b 33 5d 3b 0a 3e 20 20 20 symbols[3];.>
0ab0: 20 20 76 6f 69 64 20 2a 70 72 6f 63 50 74 72 73 void *procPtrs
0ac0: 5b 32 5d 3b 0a 32 39 38 31 2c 32 39 38 32 63 32 [2];.2981,2982c2
0ad0: 39 38 34 0a 3c 20 20 20 20 20 70 72 6f 63 50 74 984.< procPt
0ae0: 72 73 5b 30 5d 20 3d 20 70 72 6f 63 31 50 74 72 rs[0] = proc1Ptr
0af0: 3b 0a 3c 20 20 20 20 20 70 72 6f 63 50 74 72 73 ;.< procPtrs
0b00: 5b 31 5d 20 3d 20 70 72 6f 63 32 50 74 72 3b 0a [1] = proc2Ptr;.
0b10: 2d 2d 2d 0a 3e 20 20 20 20 20 73 79 6d 62 6f 6c ---.> symbol
0b20: 73 5b 32 5d 20 3d 20 4e 55 4c 4c 3b 0a 32 39 38 s[2] = NULL;.298
0b30: 38 2c 33 30 30 30 63 32 39 39 30 2c 32 39 39 36 8,3000c2990,2996
0b40: 0a 3c 20 20 20 20 20 72 65 73 20 3d 20 54 63 6c .< res = Tcl
0b50: 4c 6f 61 64 46 69 6c 65 28 69 6e 74 65 72 70 2c LoadFile(interp,
0b60: 20 70 61 74 68 50 74 72 2c 20 32 2c 20 73 79 6d pathPtr, 2, sym
0b70: 62 6f 6c 73 2c 20 70 72 6f 63 50 74 72 73 2c 20 bols, procPtrs,
0b80: 68 61 6e 64 6c 65 50 74 72 2c 0a 3c 20 09 20 20 handlePtr,.< .
0b90: 20 20 26 63 6c 69 65 6e 74 44 61 74 61 2c 20 75 &clientData, u
0ba0: 6e 6c 6f 61 64 50 72 6f 63 50 74 72 29 3b 0a 3c nloadProcPtr);.<
0bb0: 20 0a 3c 20 20 20 20 20 2f 2a 0a 3c 20 20 20 20 .< /*.<
0bc0: 20 20 2a 20 44 75 65 20 74 6f 20 61 6e 20 75 6e * Due to an un
0bd0: 66 6f 72 74 75 6e 61 74 65 20 6d 69 73 2d 64 65 fortunate mis-de
0be0: 73 69 67 6e 20 69 6e 20 54 63 6c 20 38 2e 34 20 sign in Tcl 8.4
0bf0: 66 73 2c 20 77 68 65 6e 20 6c 6f 61 64 69 6e 67 fs, when loading
0c00: 20 61 20 73 68 61 72 65 64 0a 3c 20 20 20 20 20 a shared.<
0c10: 20 2a 20 6c 69 62 72 61 72 79 2c 20 77 65 20 64 * library, we d
0c20: 6f 6e 27 74 20 6b 65 65 70 20 74 68 65 20 6c 6f on't keep the lo
0c30: 61 64 48 61 6e 64 6c 65 20 28 66 6f 72 20 54 63 adHandle (for Tc
0c40: 6c 70 46 69 6e 64 53 79 6d 62 6f 6c 29 20 61 6e lpFindSymbol) an
0c50: 64 20 74 68 65 0a 3c 20 20 20 20 20 20 2a 20 63 d the.< * c
0c60: 6c 69 65 6e 74 44 61 74 61 20 28 66 6f 72 20 74 lientData (for t
0c70: 68 65 20 75 6e 6c 6f 61 64 50 72 6f 63 29 20 73 he unloadProc) s
0c80: 65 70 61 72 61 74 65 6c 79 2e 20 49 6e 20 66 61 eparately. In fa
0c90: 63 74 20 77 65 20 65 66 66 65 63 74 69 76 65 6c ct we effectivel
0ca0: 79 0a 3c 20 20 20 20 20 20 2a 20 74 68 72 6f 77 y.< * throw
0cb0: 20 61 77 61 79 20 74 68 65 20 6c 6f 61 64 48 61 away the loadHa
0cc0: 6e 64 6c 65 20 61 6e 64 20 6f 6e 6c 79 20 75 73 ndle and only us
0cd0: 65 20 74 68 65 20 63 6c 69 65 6e 74 44 61 74 61 e the clientData
0ce0: 2e 20 49 74 20 6a 75 73 74 20 73 6f 0a 3c 20 20 . It just so.<
0cf0: 20 20 20 20 2a 20 68 61 70 70 65 6e 73 2c 20 66 * happens, f
0d00: 6f 72 20 74 68 65 20 6e 61 74 69 76 65 20 66 69 or the native fi
0d10: 6c 65 73 79 73 74 65 6d 20 6f 6e 6c 79 2c 20 74 lesystem only, t
0d20: 68 61 74 20 74 68 65 73 65 20 74 77 6f 20 61 72 hat these two ar
0d30: 65 20 69 64 65 6e 74 69 63 61 6c 2e 0a 3c 20 20 e identical..<
0d40: 20 20 20 20 2a 0a 3c 20 20 20 20 20 20 2a 20 54 *.< * T
0d50: 68 69 73 20 61 6c 73 6f 20 6d 65 61 6e 73 20 74 his also means t
0d60: 68 61 74 20 74 68 65 20 73 69 67 6e 61 74 75 72 hat the signatur
0d70: 65 73 20 54 63 6c 5f 46 53 55 6e 6c 6f 61 64 46 es Tcl_FSUnloadF
0d80: 69 6c 65 50 72 6f 63 20 61 6e 64 0a 3c 20 20 20 ileProc and.<
0d90: 20 20 20 2a 20 54 63 6c 5f 46 53 4c 6f 61 64 46 * Tcl_FSLoadF
0da0: 69 6c 65 50 72 6f 63 20 61 72 65 20 62 6f 74 68 ileProc are both
0db0: 20 6d 69 73 6c 65 61 64 69 6e 67 2e 0a 3c 20 20 misleading..<
0dc0: 20 20 20 20 2a 2f 0a 2d 2d 2d 0a 3e 20 20 20 20 */.---.>
0dd0: 20 72 65 73 20 3d 20 54 63 6c 5f 4c 6f 61 64 46 res = Tcl_LoadF
0de0: 69 6c 65 28 69 6e 74 65 72 70 2c 20 70 61 74 68 ile(interp, path
0df0: 50 74 72 2c 20 73 79 6d 62 6f 6c 73 2c 20 30 2c Ptr, symbols, 0,
0e00: 20 70 72 6f 63 50 74 72 73 2c 20 68 61 6e 64 6c procPtrs, handl
0e10: 65 50 74 72 29 3b 0a 3e 20 20 20 20 20 69 66 20 ePtr);.> if
0e20: 28 72 65 73 20 3d 3d 20 54 43 4c 5f 4f 4b 29 20 (res == TCL_OK)
0e30: 7b 0a 3e 20 09 2a 70 72 6f 63 31 50 74 72 20 3d {.> .*proc1Ptr =
0e40: 20 28 54 63 6c 5f 50 61 63 6b 61 67 65 49 6e 69 (Tcl_PackageIni
0e50: 74 50 72 6f 63 2a 29 20 70 72 6f 63 50 74 72 73 tProc*) procPtrs
0e60: 5b 30 5d 3b 0a 3e 20 09 2a 70 72 6f 63 32 50 74 [0];.> .*proc2Pt
0e70: 72 20 3d 20 28 54 63 6c 5f 50 61 63 6b 61 67 65 r = (Tcl_Package
0e80: 49 6e 69 74 50 72 6f 63 2a 29 20 70 72 6f 63 50 InitProc*) procP
0e90: 74 72 73 5b 31 5d 3b 0a 3e 20 20 20 20 20 7d 20 trs[1];.> }
0ea0: 65 6c 73 65 20 7b 0a 3e 20 09 2a 70 72 6f 63 31 else {.> .*proc1
0eb0: 50 74 72 20 3d 20 2a 70 72 6f 63 32 50 74 72 20 Ptr = *proc2Ptr
0ec0: 3d 20 4e 55 4c 4c 3b 0a 3e 20 20 20 20 20 7d 0a = NULL;.> }.
0ed0: 33 30 30 32 64 32 39 39 37 0a 3c 20 20 20 20 20 3002d2997.<
0ee0: 2a 68 61 6e 64 6c 65 50 74 72 20 3d 20 63 6c 69 *handlePtr = cli
0ef0: 65 6e 74 44 61 74 61 3b 0a 33 30 30 39 63 33 30 entData;.3009c30
0f00: 30 34 0a 3c 20 20 2a 20 54 63 6c 4c 6f 61 64 46 04.< * TclLoadF
0f10: 69 6c 65 20 2d 2d 0a 2d 2d 2d 0a 3e 20 20 2a 20 ile --.---.> *
0f20: 54 63 6c 5f 4c 6f 61 64 46 69 6c 65 20 2d 2d 0a Tcl_LoadFile --.
0f30: 33 30 32 33 2c 33 30 32 38 64 33 30 31 37 0a 3c 3023,3028d3017.<
0f40: 20 20 2a 09 54 68 69 73 20 66 75 6e 63 74 69 6f *.This functio
0f50: 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 n is currently p
0f60: 72 69 76 61 74 65 20 74 6f 20 54 63 6c 2e 20 49 rivate to Tcl. I
0f70: 74 20 6d 61 79 20 62 65 20 65 78 70 6f 72 74 65 t may be exporte
0f80: 64 20 69 6e 20 74 68 65 0a 3c 20 20 2a 09 66 75 d in the.< *.fu
0f90: 74 75 72 65 20 61 6e 64 20 69 74 73 20 69 6e 74 ture and its int
0fa0: 65 72 66 61 63 65 20 66 69 78 65 64 20 28 62 75 erface fixed (bu
0fb0: 74 20 77 65 20 73 68 6f 75 6c 64 20 63 6c 65 61 t we should clea
0fc0: 6e 20 75 70 20 74 68 65 0a 3c 20 20 2a 09 6c 6f n up the.< *.lo
0fd0: 61 64 48 61 6e 64 6c 65 2f 63 6c 69 65 6e 74 44 adHandle/clientD
0fe0: 61 74 61 20 63 6f 6e 66 75 73 69 6f 6e 20 61 74 ata confusion at
0ff0: 20 74 68 61 74 20 74 69 6d 65 20 2d 2d 20 73 65 that time -- se
1000: 65 20 74 68 65 20 61 62 6f 76 65 20 63 6f 6d 6d e the above comm
1010: 65 6e 74 73 0a 3c 20 20 2a 09 69 6e 20 54 63 6c ents.< *.in Tcl
1020: 5f 46 53 4c 6f 61 64 46 69 6c 65 20 66 6f 72 20 _FSLoadFile for
1030: 64 65 74 61 69 6c 73 29 2e 20 46 6f 72 20 61 20 details). For a
1040: 70 75 62 6c 69 63 20 66 75 6e 63 74 69 6f 6e 2c public function,
1050: 20 73 65 65 0a 3c 20 20 2a 09 54 63 6c 5f 46 53 see.< *.Tcl_FS
1060: 4c 6f 61 64 46 69 6c 65 2e 0a 3c 20 20 2a 0a 33 LoadFile..< *.3
1070: 30 33 35 63 33 30 32 34 0a 3c 20 20 2a 09 70 61 035c3024.< *.pa
1080: 73 73 69 6e 67 20 74 68 65 20 63 6c 69 65 6e 74 ssing the client
1090: 44 61 74 61 20 74 6f 20 74 68 65 20 75 6e 6c 6f Data to the unlo
10a0: 61 64 50 72 6f 63 2e 0a 2d 2d 2d 0a 3e 20 20 2a adProc..---.> *
10b0: 09 63 61 6c 6c 69 6e 67 20 54 63 6c 46 53 5f 55 .calling TclFS_U
10c0: 6e 6c 6f 61 64 46 69 6c 65 2e 0a 33 30 34 31 63 nloadFile..3041c
10d0: 33 30 33 30 0a 3c 20 54 63 6c 4c 6f 61 64 46 69 3030.< TclLoadFi
10e0: 6c 65 28 0a 2d 2d 2d 0a 3e 20 54 63 6c 5f 4c 6f le(.---.> Tcl_Lo
10f0: 61 64 46 69 6c 65 28 0a 33 30 34 35 2c 33 30 34 adFile(.3045,304
1100: 36 64 33 30 33 33 0a 3c 20 20 20 20 20 69 6e 74 6d3033.< int
1110: 20 73 79 6d 63 2c 09 09 09 2f 2a 20 4e 75 6d 62 symc,.../* Numb
1120: 65 72 20 6f 66 20 73 79 6d 62 6f 6c 73 2f 70 72 er of symbols/pr
1130: 6f 63 50 74 72 73 20 69 6e 20 74 68 65 20 6e 65 ocPtrs in the ne
1140: 78 74 20 74 77 6f 0a 3c 20 09 09 09 09 20 2a 20 xt two.< .... *
1150: 61 72 72 61 79 73 2e 20 2a 2f 0a 33 30 34 39 2c arrays. */.3049,
1160: 33 30 35 30 63 33 30 33 36 2c 33 30 33 37 0a 3c 3050c3036,3037.<
1170: 20 20 20 20 20 54 63 6c 5f 50 61 63 6b 61 67 65 Tcl_Package
1180: 49 6e 69 74 50 72 6f 63 20 2a 2a 70 72 6f 63 50 InitProc **procP
1190: 74 72 73 5b 5d 2c 0a 3c 20 09 09 09 09 2f 2a 20 trs[],.< ..../*
11a0: 57 68 65 72 65 20 74 6f 20 72 65 74 75 72 6e 20 Where to return
11b0: 74 68 65 20 61 64 64 72 65 73 73 65 73 20 63 6f the addresses co
11c0: 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2d 2d 2d 0a rresponding.---.
11d0: 3e 20 20 20 20 20 69 6e 74 20 66 6c 61 67 73 2c > int flags,
11e0: 09 09 09 2f 2a 20 46 6c 61 67 73 20 28 75 6e 75 .../* Flags (unu
11f0: 73 65 64 29 20 2a 2f 0a 3e 20 20 20 20 20 76 6f sed) */.> vo
1200: 69 64 20 2a 70 72 6f 63 56 50 74 72 73 2c 09 09 id *procVPtrs,..
1210: 2f 2a 20 57 68 65 72 65 20 74 6f 20 72 65 74 75 /* Where to retu
1220: 72 6e 20 74 68 65 20 61 64 64 72 65 73 73 65 73 rn the addresses
1230: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 33 corresponding.3
1240: 30 35 32 63 33 30 33 39 0a 3c 20 20 20 20 20 54 052c3039.< T
1250: 63 6c 5f 4c 6f 61 64 48 61 6e 64 6c 65 20 2a 68 cl_LoadHandle *h
1260: 61 6e 64 6c 65 50 74 72 2c 09 2f 2a 20 46 69 6c andlePtr,./* Fil
1270: 6c 65 64 20 77 69 74 68 20 74 6f 6b 65 6e 20 66 led with token f
1280: 6f 72 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 or shared librar
1290: 79 0a 2d 2d 2d 0a 3e 20 20 20 20 20 54 63 6c 5f y.---.> Tcl_
12a0: 4c 6f 61 64 48 61 6e 64 6c 65 20 2a 68 61 6e 64 LoadHandle *hand
12b0: 6c 65 50 74 72 29 09 2f 2a 20 46 69 6c 6c 65 64 lePtr)./* Filled
12c0: 20 77 69 74 68 20 74 6f 6b 65 6e 20 66 6f 72 20 with token for
12d0: 73 68 61 72 65 64 20 6c 69 62 72 61 72 79 0a 33 shared library.3
12e0: 30 35 35 2c 33 30 36 31 64 33 30 34 31 0a 3c 20 055,3061d3041.<
12f0: 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 2a ClientData *
1300: 63 6c 69 65 6e 74 44 61 74 61 50 74 72 2c 09 2f clientDataPtr,./
1310: 2a 20 46 69 6c 6c 65 64 20 77 69 74 68 20 74 6f * Filled with to
1320: 6b 65 6e 20 66 6f 72 20 64 79 6e 61 6d 69 63 61 ken for dynamica
1330: 6c 6c 79 20 6c 6f 61 64 65 64 0a 3c 20 09 09 09 lly loaded.< ...
1340: 09 20 2a 20 66 69 6c 65 20 77 68 69 63 68 20 77 . * file which w
1350: 69 6c 6c 20 62 65 20 70 61 73 73 65 64 20 62 61 ill be passed ba
1360: 63 6b 20 74 6f 0a 3c 20 09 09 09 09 20 2a 20 28 ck to.< .... * (
1370: 2a 75 6e 6c 6f 61 64 50 72 6f 63 50 74 72 29 28 *unloadProcPtr)(
1380: 29 20 74 6f 20 75 6e 6c 6f 61 64 20 74 68 65 20 ) to unload the
1390: 66 69 6c 65 2e 20 2a 2f 0a 3c 20 20 20 20 20 54 file. */.< T
13a0: 63 6c 5f 46 53 55 6e 6c 6f 61 64 46 69 6c 65 50 cl_FSUnloadFileP
13b0: 72 6f 63 20 2a 2a 75 6e 6c 6f 61 64 50 72 6f 63 roc **unloadProc
13c0: 50 74 72 29 0a 3c 20 09 09 09 09 2f 2a 20 46 69 Ptr).< ..../* Fi
13d0: 6c 6c 65 64 20 77 69 74 68 20 61 64 64 72 65 73 lled with addres
13e0: 73 20 6f 66 20 54 63 6c 5f 46 53 55 6e 6c 6f 61 s of Tcl_FSUnloa
13f0: 64 46 69 6c 65 50 72 6f 63 0a 3c 20 09 09 09 09 dFileProc.< ....
1400: 20 2a 20 66 75 6e 63 74 69 6f 6e 20 77 68 69 63 * function whic
1410: 68 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 h should be used
1420: 20 66 6f 72 20 74 68 69 73 0a 3c 20 09 09 09 09 for this.< ....
1430: 20 2a 20 66 69 6c 65 2e 20 2a 2f 0a 33 30 36 32 * file. */.3062
1440: 61 33 30 34 33 0a 3e 20 20 20 20 20 76 6f 69 64 a3043.> void
1450: 2a 2a 20 70 72 6f 63 50 74 72 73 20 3d 20 28 76 ** procPtrs = (v
1460: 6f 69 64 2a 2a 29 20 70 72 6f 63 56 50 74 72 73 oid**) procVPtrs
1470: 3b 0a 33 30 36 34 61 33 30 34 36 0a 3e 20 20 20 ;.3064a3046.>
1480: 20 20 54 63 6c 5f 46 53 55 6e 6c 6f 61 64 46 69 Tcl_FSUnloadFi
1490: 6c 65 50 72 6f 63 2a 20 75 6e 6c 6f 61 64 50 72 leProc* unloadPr
14a0: 6f 63 50 74 72 3b 0a 33 30 36 37 63 33 30 34 39 ocPtr;.3067c3049
14b0: 0a 3c 20 20 20 20 20 43 6c 69 65 6e 74 44 61 74 .< ClientDat
14c0: 61 20 6e 65 77 43 6c 69 65 6e 74 44 61 74 61 20 a newClientData
14d0: 3d 20 4e 55 4c 4c 3b 0a 2d 2d 2d 0a 3e 20 20 20 = NULL;.---.>
14e0: 20 20 54 63 6c 5f 4c 6f 61 64 48 61 6e 64 6c 65 Tcl_LoadHandle
14f0: 20 64 69 76 65 72 74 65 64 4c 6f 61 64 48 61 6e divertedLoadHan
1500: 64 6c 65 20 3d 20 4e 55 4c 4c 3b 0a 33 30 37 30 dle = NULL;.3070
1510: 61 33 30 35 33 0a 3e 20 20 20 20 20 69 6e 74 20 a3053.> int
1520: 69 3b 0a 33 30 37 39 63 33 30 36 32 0a 3c 20 09 i;.3079c3062.< .
1530: 09 75 6e 6c 6f 61 64 50 72 6f 63 50 74 72 29 3b .unloadProcPtr);
1540: 0a 2d 2d 2d 0a 3e 20 09 09 26 75 6e 6c 6f 61 64 .---.> ..&unload
1550: 50 72 6f 63 50 74 72 29 3b 0a 33 30 38 35 2c 33 ProcPtr);.3085,3
1560: 30 39 30 64 33 30 36 37 0a 3c 20 0a 3c 20 09 20 090d3067.< .< .
1570: 20 20 20 2f 2a 0a 3c 20 09 20 20 20 20 20 2a 20 /*.< . *
1580: 43 6f 70 79 20 74 68 69 73 20 61 63 72 6f 73 73 Copy this across
1590: 2c 20 73 69 6e 63 65 20 62 6f 74 68 20 61 72 65 , since both are
15a0: 20 65 71 75 61 6c 20 66 6f 72 20 74 68 65 20 6e equal for the n
15b0: 61 74 69 76 65 20 66 73 2e 0a 3c 20 09 20 20 20 ative fs..< .
15c0: 20 20 2a 2f 0a 3c 20 0a 3c 20 09 20 20 20 20 2a */.< .< . *
15d0: 63 6c 69 65 6e 74 44 61 74 61 50 74 72 20 3d 20 clientDataPtr =
15e0: 2a 68 61 6e 64 6c 65 50 74 72 3b 0a 33 31 35 30 *handlePtr;.3150
15f0: 63 33 31 32 37 0a 3c 20 09 09 75 6e 6c 6f 61 64 c3127.< ..unload
1600: 50 72 6f 63 50 74 72 29 3b 0a 2d 2d 2d 0a 3e 20 ProcPtr);.---.>
1610: 09 09 26 75 6e 6c 6f 61 64 50 72 6f 63 50 74 72 ..&unloadProcPtr
1620: 29 3b 0a 33 31 36 36 2c 33 31 37 31 63 33 31 34 );.3166,3171c314
1630: 33 0a 3c 20 20 20 20 20 63 6f 70 79 54 6f 50 74 3.< copyToPt
1640: 72 20 3d 20 54 63 6c 70 54 65 6d 70 46 69 6c 65 r = TclpTempFile
1650: 4e 61 6d 65 28 29 3b 0a 3c 20 20 20 20 20 69 66 Name();.< if
1660: 20 28 63 6f 70 79 54 6f 50 74 72 20 3d 3d 20 4e (copyToPtr == N
1670: 55 4c 4c 29 20 7b 0a 3c 20 09 54 63 6c 5f 41 70 ULL) {.< .Tcl_Ap
1680: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 pendResult(inter
1690: 70 2c 20 22 63 6f 75 6c 64 6e 27 74 20 63 72 65 p, "couldn't cre
16a0: 61 74 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69 ate temporary fi
16b0: 6c 65 3a 20 22 2c 0a 3c 20 09 09 54 63 6c 5f 50 le: ",.< ..Tcl_P
16c0: 6f 73 69 78 45 72 72 6f 72 28 69 6e 74 65 72 70 osixError(interp
16d0: 29 2c 20 4e 55 4c 4c 29 3b 0a 3c 20 09 72 65 74 ), NULL);.< .ret
16e0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 3c urn TCL_ERROR;.<
16f0: 20 20 20 20 20 7d 0a 2d 2d 2d 0a 3e 20 20 20 20 }.---.>
1700: 20 63 6f 70 79 54 6f 50 74 72 20 3d 20 54 63 6c copyToPtr = Tcl
1710: 70 54 65 6d 70 46 69 6c 65 4e 61 6d 65 46 6f 72 pTempFileNameFor
1720: 4c 69 62 72 61 72 79 28 69 6e 74 65 72 70 2c 20 Library(interp,
1730: 70 61 74 68 50 74 72 29 3b 0a 33 32 32 36 2c 33 pathPtr);.3226,3
1740: 32 32 37 63 33 31 39 38 2c 33 31 39 39 0a 3c 20 227c3198,3199.<
1750: 20 20 20 20 72 65 74 56 61 6c 20 3d 20 54 63 6c retVal = Tcl
1760: 4c 6f 61 64 46 69 6c 65 28 69 6e 74 65 72 70 2c LoadFile(interp,
1770: 20 63 6f 70 79 54 6f 50 74 72 2c 20 73 79 6d 63 copyToPtr, symc
1780: 2c 20 73 79 6d 62 6f 6c 73 2c 20 70 72 6f 63 50 , symbols, procP
1790: 74 72 73 2c 0a 3c 20 09 20 20 20 20 26 6e 65 77 trs,.< . &new
17a0: 4c 6f 61 64 48 61 6e 64 6c 65 2c 20 26 6e 65 77 LoadHandle, &new
17b0: 43 6c 69 65 6e 74 44 61 74 61 2c 20 26 6e 65 77 ClientData, &new
17c0: 55 6e 6c 6f 61 64 50 72 6f 63 50 74 72 29 3b 0a UnloadProcPtr);.
17d0: 2d 2d 2d 0a 3e 20 20 20 20 20 72 65 74 56 61 6c ---.> retVal
17e0: 20 3d 20 54 63 6c 5f 4c 6f 61 64 46 69 6c 65 28 = Tcl_LoadFile(
17f0: 69 6e 74 65 72 70 2c 20 63 6f 70 79 54 6f 50 74 interp, copyToPt
1800: 72 2c 20 73 79 6d 62 6f 6c 73 2c 20 30 2c 20 70 r, symbols, 0, p
1810: 72 6f 63 50 74 72 73 2c 0a 3e 20 09 09 09 20 26 rocPtrs,.> ... &
1820: 6e 65 77 4c 6f 61 64 48 61 6e 64 6c 65 29 3b 0a newLoadHandle);.
1830: 33 32 35 34 2c 33 32 35 35 64 33 32 32 35 0a 3c 3254,3255d3225.<
1840: 20 09 2a 63 6c 69 65 6e 74 44 61 74 61 50 74 72 .*clientDataPtr
1850: 20 3d 20 6e 65 77 43 6c 69 65 6e 74 44 61 74 61 = newClientData
1860: 3b 0a 3c 20 09 2a 75 6e 6c 6f 61 64 50 72 6f 63 ;.< .*unloadProc
1870: 50 74 72 20 3d 20 6e 65 77 55 6e 6c 6f 61 64 50 Ptr = newUnloadP
1880: 72 6f 63 50 74 72 3b 0a 33 33 31 30 2c 33 33 31 rocPtr;.3310,331
1890: 32 63 33 32 38 30 2c 33 32 38 37 0a 3c 20 20 20 2c3280,3287.<
18a0: 20 20 2a 68 61 6e 64 6c 65 50 74 72 20 3d 20 6e *handlePtr = n
18b0: 65 77 4c 6f 61 64 48 61 6e 64 6c 65 3b 0a 3c 20 ewLoadHandle;.<
18c0: 20 20 20 20 2a 63 6c 69 65 6e 74 44 61 74 61 50 *clientDataP
18d0: 74 72 20 3d 20 74 76 64 6c 50 74 72 3b 0a 3c 20 tr = tvdlPtr;.<
18e0: 20 20 20 20 2a 75 6e 6c 6f 61 64 50 72 6f 63 50 *unloadProcP
18f0: 74 72 20 3d 20 54 63 6c 46 53 55 6e 6c 6f 61 64 tr = TclFSUnload
1900: 54 65 6d 70 46 69 6c 65 3b 0a 2d 2d 2d 0a 3e 20 TempFile;.---.>
1910: 0a 3e 20 20 20 20 20 0a 3e 20 20 20 20 20 64 69 .> .> di
1920: 76 65 72 74 65 64 4c 6f 61 64 48 61 6e 64 6c 65 vertedLoadHandle
1930: 20 3d 20 28 54 63 6c 5f 4c 6f 61 64 48 61 6e 64 = (Tcl_LoadHand
1940: 6c 65 29 0a 3e 20 09 63 6b 61 6c 6c 6f 63 28 73 le).> .ckalloc(s
1950: 69 7a 65 6f 66 20 28 73 74 72 75 63 74 20 54 63 izeof (struct Tc
1960: 6c 5f 4c 6f 61 64 48 61 6e 64 6c 65 5f 29 29 3b l_LoadHandle_));
1970: 0a 3e 20 20 20 20 20 64 69 76 65 72 74 65 64 4c .> divertedL
1980: 6f 61 64 48 61 6e 64 6c 65 2d 3e 63 6c 69 65 6e oadHandle->clien
1990: 74 44 61 74 61 20 3d 20 28 43 6c 69 65 6e 74 44 tData = (ClientD
19a0: 61 74 61 29 20 74 76 64 6c 50 74 72 3b 0a 3e 20 ata) tvdlPtr;.>
19b0: 20 20 20 20 64 69 76 65 72 74 65 64 4c 6f 61 64 divertedLoad
19c0: 48 61 6e 64 6c 65 2d 3e 66 69 6e 64 53 79 6d 62 Handle->findSymb
19d0: 6f 6c 50 72 6f 63 50 74 72 20 3d 20 44 69 76 65 olProcPtr = Dive
19e0: 72 74 46 69 6e 64 53 79 6d 62 6f 6c 3b 0a 3e 20 rtFindSymbol;.>
19f0: 20 20 20 20 64 69 76 65 72 74 65 64 4c 6f 61 64 divertedLoad
1a00: 48 61 6e 64 6c 65 2d 3e 75 6e 6c 6f 61 64 46 69 Handle->unloadFi
1a10: 6c 65 50 72 6f 63 50 74 72 20 3d 20 44 69 76 65 leProcPtr = Dive
1a20: 72 74 55 6e 6c 6f 61 64 46 69 6c 65 3b 0a 3e 20 rtUnloadFile;.>
1a30: 20 20 20 20 2a 68 61 6e 64 6c 65 50 74 72 20 3d *handlePtr =
1a40: 20 64 69 76 65 72 74 65 64 4c 6f 61 64 48 61 6e divertedLoadHan
1a50: 64 6c 65 3b 0a 33 33 31 38 2c 33 33 32 33 63 33 dle;.3318,3323c3
1a60: 32 39 33 2c 33 33 30 39 0a 3c 20 20 20 20 20 7b 293,3309.< {
1a70: 0a 3c 20 09 69 6e 74 20 69 3b 0a 3c 20 0a 3c 20 .< .int i;.< .<
1a80: 09 66 6f 72 20 28 69 3d 30 20 3b 20 69 3c 73 79 .for (i=0 ; i<sy
1a90: 6d 63 20 3b 20 69 2b 2b 29 20 7b 0a 3c 20 09 20 mc ; i++) {.< .
1aa0: 20 20 20 69 66 20 28 73 79 6d 62 6f 6c 73 5b 69 if (symbols[i
1ab0: 5d 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 3c 20 09 ] != NULL) {.< .
1ac0: 09 2a 70 72 6f 63 50 74 72 73 5b 69 5d 20 3d 20 .*procPtrs[i] =
1ad0: 54 63 6c 70 46 69 6e 64 53 79 6d 62 6f 6c 28 69 TclpFindSymbol(i
1ae0: 6e 74 65 72 70 2c 20 2a 68 61 6e 64 6c 65 50 74 nterp, *handlePt
1af0: 72 2c 20 73 79 6d 62 6f 6c 73 5b 69 5d 29 3b 0a r, symbols[i]);.
1b00: 2d 2d 2d 0a 3e 20 20 20 20 20 2f 2a 20 0a 3e 20 ---.> /* .>
1b10: 20 20 20 20 20 2a 20 41 74 20 74 68 69 73 20 70 * At this p
1b20: 6f 69 6e 74 2c 20 2a 68 61 6e 64 6c 65 50 74 72 oint, *handlePtr
1b30: 20 69 73 20 61 6c 72 65 61 64 79 20 73 65 74 20 is already set
1b40: 75 70 20 74 6f 20 74 68 65 20 68 61 6e 64 6c 65 up to the handle
1b50: 20 66 6f 72 20 74 68 65 0a 3e 20 20 20 20 20 20 for the.>
1b60: 2a 20 6c 6f 61 64 65 64 20 6c 69 62 72 61 72 79 * loaded library
1b70: 2e 20 57 65 20 6e 6f 77 20 74 72 79 20 74 6f 20 . We now try to
1b80: 72 65 73 6f 6c 76 65 20 74 68 65 20 73 79 6d 62 resolve the symb
1b90: 6f 6c 73 2e 0a 3e 20 20 20 20 20 20 2a 2f 0a 3e ols..> */.>
1ba0: 20 20 20 20 20 69 66 20 28 73 79 6d 62 6f 6c 73 if (symbols
1bb0: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 3e 20 09 66 != NULL) {.> .f
1bc0: 6f 72 20 28 69 3d 30 20 3b 20 73 79 6d 62 6f 6c or (i=0 ; symbol
1bd0: 73 5b 69 5d 20 21 3d 20 4e 55 4c 4c 3b 20 69 2b s[i] != NULL; i+
1be0: 2b 29 20 7b 0a 3e 20 09 20 20 20 20 70 72 6f 63 +) {.> . proc
1bf0: 50 74 72 73 5b 69 5d 20 3d 20 54 63 6c 5f 46 69 Ptrs[i] = Tcl_Fi
1c00: 6e 64 53 79 6d 62 6f 6c 28 69 6e 74 65 72 70 2c ndSymbol(interp,
1c10: 20 2a 68 61 6e 64 6c 65 50 74 72 2c 20 73 79 6d *handlePtr, sym
1c20: 62 6f 6c 73 5b 69 5d 29 3b 0a 3e 20 09 20 20 20 bols[i]);.> .
1c30: 20 69 66 20 28 70 72 6f 63 50 74 72 73 5b 69 5d if (procPtrs[i]
1c40: 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 3e 20 09 09 == NULL) {.> ..
1c50: 2f 2a 20 0a 3e 20 09 09 20 2a 20 41 74 20 6c 65 /* .> .. * At le
1c60: 61 73 74 20 6f 6e 65 20 73 79 6d 62 6f 6c 20 69 ast one symbol i
1c70: 6e 20 74 68 65 20 6c 69 73 74 20 77 61 73 20 6e n the list was n
1c80: 6f 74 20 66 6f 75 6e 64 2e 0a 3e 20 09 09 20 2a ot found..> .. *
1c90: 20 55 6e 6c 6f 61 64 20 74 68 65 20 66 69 6c 65 Unload the file
1ca0: 2c 20 61 6e 64 20 72 65 70 6f 72 74 20 74 68 65 , and report the
1cb0: 20 70 72 6f 62 6c 65 6d 20 62 61 63 6b 20 74 6f problem back to
1cc0: 20 74 68 65 20 0a 3e 20 09 09 20 2a 20 63 61 6c the .> .. * cal
1cd0: 6c 65 72 2e 20 28 54 63 6c 5f 46 69 6e 64 53 79 ler. (Tcl_FindSy
1ce0: 6d 62 6f 6c 20 73 68 6f 75 6c 64 20 61 6c 72 65 mbol should alre
1cf0: 61 64 79 20 68 61 76 65 20 6c 65 66 74 20 61 6e ady have left an
1d00: 0a 3e 20 09 09 20 2a 20 61 70 70 72 6f 70 72 69 .> .. * appropri
1d10: 61 74 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 ate error messag
1d20: 65 2e 29 0a 3e 20 09 09 20 2a 2f 09 0a 3e 20 09 e.).> .. */..> .
1d30: 09 28 2a 68 61 6e 64 6c 65 50 74 72 29 2d 3e 75 .(*handlePtr)->u
1d40: 6e 6c 6f 61 64 46 69 6c 65 50 72 6f 63 50 74 72 nloadFileProcPtr
1d50: 28 2a 68 61 6e 64 6c 65 50 74 72 29 3b 0a 3e 20 (*handlePtr);.>
1d60: 09 09 2a 68 61 6e 64 6c 65 50 74 72 20 3d 20 4e ..*handlePtr = N
1d70: 55 4c 4c 3b 0a 3e 20 09 09 72 65 74 75 72 6e 20 ULL;.> ..return
1d80: 54 43 4c 5f 45 52 52 4f 52 3b 0a 33 33 33 30 61 TCL_ERROR;.3330a
1d90: 33 33 31 37 2c 33 34 32 33 0a 3e 20 20 2a 2d 2d 3317,3423.> *--
1da0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1db0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1dc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1dd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1de0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 3e 20 20 2a -----------.> *
1df0: 0a 3e 20 20 2a 20 44 69 76 65 72 74 46 69 6e 64 .> * DivertFind
1e00: 53 79 6d 62 6f 6c 20 2d 2d 0a 3e 20 20 2a 09 0a Symbol --.> *..
1e10: 3e 20 20 2a 09 46 69 6e 64 20 61 20 73 79 6d 62 > *.Find a symb
1e20: 6f 6c 20 69 6e 20 61 20 73 68 61 72 65 64 20 6c ol in a shared l
1e30: 69 62 72 61 72 79 20 6c 6f 61 64 65 64 20 62 79 ibrary loaded by
1e40: 20 63 6f 70 79 2d 66 72 6f 6d 2d 56 46 53 2e 0a copy-from-VFS..
1e50: 3e 20 20 2a 0a 3e 20 20 2a 2d 2d 2d 2d 2d 2d 2d > *.> *-------
1e60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1e80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1e90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1ea0: 2d 2d 2d 2d 2d 2d 0a 3e 20 20 2a 2f 0a 3e 20 0a ------.> */.> .
1eb0: 3e 20 73 74 61 74 69 63 20 76 6f 69 64 2a 0a 3e > static void*.>
1ec0: 20 44 69 76 65 72 74 46 69 6e 64 53 79 6d 62 6f DivertFindSymbo
1ed0: 6c 28 54 63 6c 5f 49 6e 74 65 72 70 2a 20 69 6e l(Tcl_Interp* in
1ee0: 74 65 72 70 2c 20 09 20 20 20 20 2f 2a 20 54 63 terp, . /* Tc
1ef0: 6c 20 69 6e 74 65 72 70 72 65 74 65 72 20 2a 2f l interpreter */
1f00: 0a 3e 20 09 09 20 54 63 6c 5f 4c 6f 61 64 48 61 .> .. Tcl_LoadHa
1f10: 6e 64 6c 65 20 6c 6f 61 64 48 61 6e 64 6c 65 2c ndle loadHandle,
1f20: 20 2f 2a 20 48 61 6e 64 6c 65 20 74 6f 20 74 68 /* Handle to th
1f30: 65 20 64 69 76 65 72 74 65 64 20 6d 6f 64 75 6c e diverted modul
1f40: 65 20 2a 2f 0a 3e 20 09 09 20 63 6f 6e 73 74 20 e */.> .. const
1f50: 63 68 61 72 2a 20 73 79 6d 62 6f 6c 29 09 20 20 char* symbol).
1f60: 20 20 2f 2a 20 53 79 6d 62 6f 6c 20 74 6f 20 72 /* Symbol to r
1f70: 65 73 6f 6c 76 65 20 2a 2f 0a 3e 20 7b 0a 3e 20 esolve */.> {.>
1f80: 20 20 20 20 46 73 44 69 76 65 72 74 4c 6f 61 64 FsDivertLoad
1f90: 2a 20 74 76 64 6c 50 74 72 20 3d 20 28 46 73 44 * tvdlPtr = (FsD
1fa0: 69 76 65 72 74 4c 6f 61 64 2a 29 20 28 6c 6f 61 ivertLoad*) (loa
1fb0: 64 48 61 6e 64 6c 65 2d 3e 63 6c 69 65 6e 74 44 dHandle->clientD
1fc0: 61 74 61 29 3b 0a 3e 20 20 20 20 20 54 63 6c 5f ata);.> Tcl_
1fd0: 4c 6f 61 64 48 61 6e 64 6c 65 20 6f 72 69 67 69 LoadHandle origi
1fe0: 6e 61 6c 48 61 6e 64 6c 65 20 3d 20 74 76 64 6c nalHandle = tvdl
1ff0: 50 74 72 2d 3e 6c 6f 61 64 48 61 6e 64 6c 65 3b Ptr->loadHandle;
2000: 0a 3e 20 20 20 20 20 72 65 74 75 72 6e 20 6f 72 .> return or
2010: 69 67 69 6e 61 6c 48 61 6e 64 6c 65 2d 3e 66 69 iginalHandle->fi
2020: 6e 64 53 79 6d 62 6f 6c 50 72 6f 63 50 74 72 28 ndSymbolProcPtr(
2030: 69 6e 74 65 72 70 2c 20 6f 72 69 67 69 6e 61 6c interp, original
2040: 48 61 6e 64 6c 65 2c 20 73 79 6d 62 6f 6c 29 3b Handle, symbol);
2050: 0a 3e 20 7d 0a 3e 20 0c 0a 3e 20 2f 2a 0a 3e 20 .> }.> ..> /*.>
2060: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *--------------
2070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
20a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a ---------------.
20b0: 3e 20 20 2a 0a 3e 20 20 2a 20 44 69 76 65 72 74 > *.> * Divert
20c0: 55 6e 6c 6f 61 64 46 69 6c 65 20 2d 2d 0a 3e 20 UnloadFile --.>
20d0: 20 2a 0a 3e 20 20 2a 09 55 6e 6c 6f 61 64 73 20 *.> *.Unloads
20e0: 61 20 66 69 6c 65 20 74 68 61 74 20 68 61 73 20 a file that has
20f0: 62 65 65 6e 20 6c 6f 61 64 65 64 20 62 79 20 63 been loaded by c
2100: 6f 70 79 69 6e 67 20 66 72 6f 6d 20 56 46 53 20 opying from VFS
2110: 74 6f 20 74 68 65 0a 3e 20 20 2a 09 6e 61 74 69 to the.> *.nati
2120: 76 65 20 66 69 6c 65 73 79 73 74 65 6d 2e 0a 3e ve filesystem..>
2130: 20 20 2a 0a 3e 20 20 2a 20 50 61 72 61 6d 65 74 *.> * Paramet
2140: 65 72 73 3a 0a 3e 20 20 2a 09 6c 6f 61 64 48 61 ers:.> *.loadHa
2150: 6e 64 6c 65 20 2d 2d 20 48 61 6e 64 6c 65 20 6f ndle -- Handle o
2160: 66 20 74 68 65 20 66 69 6c 65 20 74 6f 20 75 6e f the file to un
2170: 6c 6f 61 64 0a 3e 20 20 2a 0a 3e 20 20 2a 2d 2d load.> *.> *--
2180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2190: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
21a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
21b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
21c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 3e 20 20 2a -----------.> *
21d0: 2f 0a 3e 20 0a 3e 20 73 74 61 74 69 63 20 76 6f /.> .> static vo
21e0: 69 64 0a 3e 20 44 69 76 65 72 74 55 6e 6c 6f 61 id.> DivertUnloa
21f0: 64 46 69 6c 65 28 54 63 6c 5f 4c 6f 61 64 48 61 dFile(Tcl_LoadHa
2200: 6e 64 6c 65 20 6c 6f 61 64 48 61 6e 64 6c 65 29 ndle loadHandle)
2210: 0a 3e 20 7b 0a 3e 20 20 20 20 20 46 73 44 69 76 .> {.> FsDiv
2220: 65 72 74 4c 6f 61 64 2a 20 74 76 64 6c 50 74 72 ertLoad* tvdlPtr
2230: 20 3d 20 28 46 73 44 69 76 65 72 74 4c 6f 61 64 = (FsDivertLoad
2240: 2a 29 20 28 6c 6f 61 64 48 61 6e 64 6c 65 2d 3e *) (loadHandle->
2250: 63 6c 69 65 6e 74 44 61 74 61 29 3b 0a 3e 20 20 clientData);.>
2260: 20 20 20 54 63 6c 5f 4c 6f 61 64 48 61 6e 64 6c Tcl_LoadHandl
2270: 65 20 6f 72 69 67 69 6e 61 6c 48 61 6e 64 6c 65 e originalHandle
2280: 20 3d 20 74 76 64 6c 50 74 72 2d 3e 6c 6f 61 64 = tvdlPtr->load
2290: 48 61 6e 64 6c 65 3b 0a 3e 20 0a 3e 20 20 20 20 Handle;.> .>
22a0: 20 2f 2a 0a 3e 20 20 20 20 20 20 2a 20 54 68 69 /*.> * Thi
22b0: 73 20 74 65 73 74 20 73 68 6f 75 6c 64 20 6e 65 s test should ne
22c0: 76 65 72 20 74 72 69 67 67 65 72 2c 20 73 69 6e ver trigger, sin
22d0: 63 65 20 77 65 20 67 69 76 65 20 74 68 65 20 63 ce we give the c
22e0: 6c 69 65 6e 74 20 64 61 74 61 20 69 6e 20 74 68 lient data in th
22f0: 65 0a 3e 20 20 20 20 20 20 2a 20 66 75 6e 63 74 e.> * funct
2300: 69 6f 6e 20 61 62 6f 76 65 2e 0a 3e 20 20 20 20 ion above..>
2310: 20 20 2a 2f 0a 3e 20 0a 3e 20 20 20 20 20 69 66 */.> .> if
2320: 20 28 74 76 64 6c 50 74 72 20 3d 3d 20 4e 55 4c (tvdlPtr == NUL
2330: 4c 29 20 7b 0a 3e 20 09 72 65 74 75 72 6e 3b 0a L) {.> .return;.
2340: 3e 20 20 20 20 20 7d 0a 3e 20 0a 3e 20 20 20 20 > }.> .>
2350: 20 2f 2a 0a 3e 20 20 20 20 20 20 2a 20 43 61 6c /*.> * Cal
2360: 6c 20 74 68 65 20 72 65 61 6c 20 27 75 6e 6c 6f l the real 'unlo
2370: 61 64 66 69 6c 65 27 20 70 72 6f 63 20 77 65 20 adfile' proc we
2380: 61 63 74 75 61 6c 6c 79 20 75 73 65 64 2e 20 49 actually used. I
2390: 74 20 69 73 20 76 65 72 79 20 69 6d 70 6f 72 74 t is very import
23a0: 61 6e 74 0a 3e 20 20 20 20 20 20 2a 20 74 68 61 ant.> * tha
23b0: 74 20 77 65 20 63 61 6c 6c 20 74 68 69 73 20 66 t we call this f
23c0: 69 72 73 74 2c 20 73 6f 20 74 68 61 74 20 74 68 irst, so that th
23d0: 65 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 79 e shared library
23e0: 20 69 73 20 61 63 74 75 61 6c 6c 79 0a 3e 20 20 is actually.>
23f0: 20 20 20 20 2a 20 75 6e 6c 6f 61 64 65 64 20 62 * unloaded b
2400: 79 20 74 68 65 20 4f 53 2e 20 4f 74 68 65 72 77 y the OS. Otherw
2410: 69 73 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 ise, the followi
2420: 6e 67 20 27 64 65 6c 65 74 65 27 20 6d 61 79 20 ng 'delete' may
2430: 77 65 6c 6c 20 66 61 69 6c 0a 3e 20 20 20 20 20 well fail.>
2440: 20 2a 20 62 65 63 61 75 73 65 20 74 68 65 20 73 * because the s
2450: 68 61 72 65 64 20 6c 69 62 72 61 72 79 20 69 73 hared library is
2460: 20 73 74 69 6c 6c 20 69 6e 20 75 73 65 2e 0a 3e still in use..>
2470: 20 20 20 20 20 20 2a 2f 0a 3e 20 0a 3e 20 20 20 */.> .>
2480: 20 20 6f 72 69 67 69 6e 61 6c 48 61 6e 64 6c 65 originalHandle
2490: 2d 3e 75 6e 6c 6f 61 64 46 69 6c 65 50 72 6f 63 ->unloadFileProc
24a0: 50 74 72 28 6f 72 69 67 69 6e 61 6c 48 61 6e 64 Ptr(originalHand
24b0: 6c 65 29 3b 0a 3e 20 0a 3e 20 20 20 20 20 2f 2a le);.> .> /*
24c0: 20 57 68 61 74 20 66 69 6c 65 73 79 73 74 65 6d What filesystem
24d0: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 contains the te
24e0: 6d 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20 6c mp copy of the l
24f0: 69 62 72 61 72 79 3f 20 2a 2f 0a 3e 20 0a 3e 20 ibrary? */.> .>
2500: 20 20 20 20 69 66 20 28 74 76 64 6c 50 74 72 2d if (tvdlPtr-
2510: 3e 64 69 76 65 72 74 65 64 46 69 6c 65 73 79 73 >divertedFilesys
2520: 74 65 6d 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 3e tem == NULL) {.>
2530: 20 09 2f 2a 0a 3e 20 09 20 2a 20 49 74 20 77 61 ./*.> . * It wa
2540: 73 20 74 68 65 20 6e 61 74 69 76 65 20 66 69 6c s the native fil
2550: 65 73 79 73 74 65 6d 2c 20 61 6e 64 20 77 65 20 esystem, and we
2560: 68 61 76 65 20 61 20 73 70 65 63 69 61 6c 20 66 have a special f
2570: 75 6e 63 74 69 6f 6e 0a 3e 20 09 20 2a 20 61 76 unction.> . * av
2580: 61 69 6c 61 62 6c 65 20 6a 75 73 74 20 66 6f 72 ailable just for
2590: 20 74 68 69 73 20 70 75 72 70 6f 73 65 2c 20 77 this purpose, w
25a0: 68 69 63 68 20 77 65 20 6b 6e 6f 77 20 77 6f 72 hich we know wor
25b0: 6b 73 20 65 76 65 6e 20 61 74 20 74 68 69 73 0a ks even at this.
25c0: 3e 20 09 20 2a 20 6c 61 74 65 20 73 74 61 67 65 > . * late stage
25d0: 2e 0a 3e 20 09 20 2a 2f 0a 3e 20 0a 3e 20 09 54 ..> . */.> .> .T
25e0: 63 6c 70 44 65 6c 65 74 65 46 69 6c 65 28 74 76 clpDeleteFile(tv
25f0: 64 6c 50 74 72 2d 3e 64 69 76 65 72 74 65 64 46 dlPtr->divertedF
2600: 69 6c 65 4e 61 74 69 76 65 52 65 70 29 3b 0a 3e ileNativeRep);.>
2610: 20 09 4e 61 74 69 76 65 46 72 65 65 49 6e 74 65 .NativeFreeInte
2620: 72 6e 61 6c 52 65 70 28 74 76 64 6c 50 74 72 2d rnalRep(tvdlPtr-
2630: 3e 64 69 76 65 72 74 65 64 46 69 6c 65 4e 61 74 >divertedFileNat
2640: 69 76 65 52 65 70 29 3b 0a 3e 20 20 20 20 20 7d iveRep);.> }
2650: 20 65 6c 73 65 20 7b 0a 3e 20 09 2f 2a 0a 3e 20 else {.> ./*.>
2660: 09 20 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 74 . * Remove the t
2670: 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 20 77 65 emporary file we
2680: 20 63 72 65 61 74 65 64 2e 20 4e 6f 74 65 2c 20 created. Note,
2690: 77 65 20 6d 61 79 20 63 72 61 73 68 20 68 65 72 we may crash her
26a0: 65 0a 3e 20 09 20 2a 20 62 65 63 61 75 73 65 20 e.> . * because
26b0: 65 6e 63 6f 64 69 6e 67 73 20 68 61 76 65 20 62 encodings have b
26c0: 65 65 6e 20 74 61 6b 65 6e 20 64 6f 77 6e 20 61 een taken down a
26d0: 6c 72 65 61 64 79 2e 0a 3e 20 09 20 2a 2f 0a 3e lready..> . */.>
26e0: 20 0a 3e 20 09 69 66 20 28 74 76 64 6c 50 74 72 .> .if (tvdlPtr
26f0: 2d 3e 64 69 76 65 72 74 65 64 46 69 6c 65 73 79 ->divertedFilesy
2700: 73 74 65 6d 2d 3e 64 65 6c 65 74 65 46 69 6c 65 stem->deleteFile
2710: 50 72 6f 63 28 74 76 64 6c 50 74 72 2d 3e 64 69 Proc(tvdlPtr->di
2720: 76 65 72 74 65 64 46 69 6c 65 29 0a 3e 20 09 09 vertedFile).> ..
2730: 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 3e 20 09 != TCL_OK) {.> .
2740: 20 20 20 20 2f 2a 0a 3e 20 09 20 20 20 20 20 2a /*.> . *
2750: 20 54 68 65 20 61 62 6f 76 65 20 6d 61 79 20 68 The above may h
2760: 61 76 65 20 66 61 69 6c 65 64 20 62 65 63 61 75 ave failed becau
2770: 73 65 20 74 68 65 20 66 69 6c 65 73 79 73 74 65 se the filesyste
2780: 6d 2c 20 6f 72 20 73 6f 6d 65 74 68 69 6e 67 0a m, or something.
2790: 3e 20 09 20 20 20 20 20 2a 20 69 74 20 64 65 70 > . * it dep
27a0: 65 6e 64 73 20 75 70 6f 6e 20 28 65 2e 67 2e 20 ends upon (e.g.
27b0: 65 6e 63 6f 64 69 6e 67 73 29 20 68 61 76 65 20 encodings) have
27c0: 62 65 65 6e 20 74 61 6b 65 6e 20 64 6f 77 6e 20 been taken down
27d0: 62 65 63 61 75 73 65 0a 3e 20 09 20 20 20 20 20 because.> .
27e0: 2a 20 54 63 6c 20 69 73 20 65 78 69 74 69 6e 67 * Tcl is exiting
27f0: 2e 0a 3e 20 09 20 20 20 20 20 2a 0a 3e 20 09 20 ..> . *.> .
2800: 20 20 20 20 2a 20 57 65 20 6d 61 79 20 6e 65 65 * We may nee
2810: 64 20 74 6f 20 77 6f 72 6b 20 6f 75 74 20 68 6f d to work out ho
2820: 77 20 74 6f 20 64 65 6c 65 74 65 20 74 68 69 73 w to delete this
2830: 20 66 69 6c 65 20 6d 6f 72 65 20 72 6f 62 75 73 file more robus
2840: 74 6c 79 0a 3e 20 09 20 20 20 20 20 2a 20 28 6f tly.> . * (o
2850: 72 20 67 69 76 65 20 74 68 65 20 66 69 6c 65 73 r give the files
2860: 79 73 74 65 6d 20 74 68 65 20 69 6e 66 6f 72 6d ystem the inform
2870: 61 74 69 6f 6e 20 69 74 20 6e 65 65 64 73 20 74 ation it needs t
2880: 6f 20 64 65 6c 65 74 65 20 74 68 65 0a 3e 20 09 o delete the.> .
2890: 20 20 20 20 20 2a 20 66 69 6c 65 20 6d 6f 72 65 * file more
28a0: 20 72 6f 62 75 73 74 6c 79 29 2e 0a 3e 20 09 20 robustly)..> .
28b0: 20 20 20 20 2a 0a 3e 20 09 20 20 20 20 20 2a 20 *.> . *
28c0: 49 6e 20 70 61 72 74 69 63 75 6c 61 72 2c 20 6f In particular, o
28d0: 6e 65 20 70 72 6f 62 6c 65 6d 20 6d 69 67 68 74 ne problem might
28e0: 20 62 65 20 74 68 61 74 20 74 68 65 20 66 69 6c be that the fil
28f0: 65 73 79 73 74 65 6d 20 63 61 6e 6e 6f 74 0a 3e esystem cannot.>
2900: 20 09 20 20 20 20 20 2a 20 65 78 74 72 61 63 74 . * extract
2910: 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e the information
2920: 20 69 74 20 6e 65 65 64 73 20 66 72 6f 6d 20 74 it needs from t
2930: 68 65 20 61 62 6f 76 65 20 70 61 74 68 20 6f 62 he above path ob
2940: 6a 65 63 74 0a 3e 20 09 20 20 20 20 20 2a 20 62 ject.> . * b
2950: 65 63 61 75 73 65 20 54 63 6c 27 73 20 65 6e 74 ecause Tcl's ent
2960: 69 72 65 20 66 69 6c 65 73 79 73 74 65 6d 20 61 ire filesystem a
2970: 70 70 61 72 61 74 75 73 20 28 74 68 65 20 63 6f pparatus (the co
2980: 64 65 20 69 6e 20 74 68 69 73 0a 3e 20 09 20 20 de in this.> .
2990: 20 20 20 2a 20 66 69 6c 65 29 20 68 61 73 20 62 * file) has b
29a0: 65 65 6e 20 66 69 6e 61 6c 69 7a 65 64 2c 20 61 een finalized, a
29b0: 6e 64 20 69 74 20 72 65 66 75 73 65 73 20 74 6f nd it refuses to
29c0: 20 70 61 73 73 20 74 68 65 20 69 6e 74 65 72 6e pass the intern
29d0: 61 6c 0a 3e 20 09 20 20 20 20 20 2a 20 72 65 70 al.> . * rep
29e0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 74 6f 20 74 resentation to t
29f0: 68 65 20 66 69 6c 65 73 79 73 74 65 6d 2e 0a 3e he filesystem..>
2a00: 20 09 20 20 20 20 20 2a 2f 0a 3e 20 09 7d 0a 3e . */.> .}.>
2a10: 20 0a 3e 20 09 2f 2a 0a 3e 20 09 20 2a 20 41 6e .> ./*.> . * An
2a20: 64 20 66 72 65 65 20 75 70 20 74 68 65 20 61 6c d free up the al
2a30: 6c 6f 63 61 74 69 6f 6e 73 2e 20 54 68 69 73 20 locations. This
2a40: 77 69 6c 6c 20 61 6c 73 6f 20 6f 66 20 63 6f 75 will also of cou
2a50: 72 73 65 20 72 65 6d 6f 76 65 20 61 0a 3e 20 09 rse remove a.> .
2a60: 20 2a 20 72 65 66 43 6f 75 6e 74 20 66 72 6f 6d * refCount from
2a70: 20 74 68 65 20 54 63 6c 5f 46 69 6c 65 73 79 73 the Tcl_Filesys
2a80: 74 65 6d 20 74 6f 20 77 68 69 63 68 20 74 68 69 tem to which thi
2a90: 73 20 66 69 6c 65 20 62 65 6c 6f 6e 67 73 2c 20 s file belongs,
2aa0: 77 68 69 63 68 0a 3e 20 09 20 2a 20 63 6f 75 6c which.> . * coul
2ab0: 64 20 74 68 65 6e 20 66 72 65 65 20 75 70 20 74 d then free up t
2ac0: 68 65 20 66 69 6c 65 73 79 73 74 65 6d 20 69 66 he filesystem if
2ad0: 20 77 65 20 61 72 65 20 65 78 69 74 69 6e 67 2e we are exiting.
2ae0: 0a 3e 20 09 20 2a 2f 0a 3e 20 0a 3e 20 09 54 63 .> . */.> .> .Tc
2af0: 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 74 l_DecrRefCount(t
2b00: 76 64 6c 50 74 72 2d 3e 64 69 76 65 72 74 65 64 vdlPtr->diverted
2b10: 46 69 6c 65 29 3b 0a 3e 20 20 20 20 20 7d 0a 3e File);.> }.>
2b20: 20 0a 3e 20 20 20 20 20 63 6b 66 72 65 65 28 28 .> ckfree((
2b30: 76 6f 69 64 2a 29 74 76 64 6c 50 74 72 29 3b 0a void*)tvdlPtr);.
2b40: 3e 20 20 20 20 20 63 6b 66 72 65 65 28 28 76 6f > ckfree((vo
2b50: 69 64 2a 29 6c 6f 61 64 48 61 6e 64 6c 65 29 3b id*)loadHandle);
2b60: 0a 3e 20 7d 0a 3e 20 0c 0a 3e 20 2f 2a 0a 33 33 .> }.> ..> /*.33
2b70: 36 39 2c 33 33 37 30 63 33 34 36 32 2c 33 35 31 69,3370c3462,351
2b80: 36 0a 3c 20 20 20 20 20 2a 70 72 6f 63 31 50 74 6.< *proc1Pt
2b90: 72 20 3d 20 54 63 6c 70 46 69 6e 64 53 79 6d 62 r = TclpFindSymb
2ba0: 6f 6c 28 69 6e 74 65 72 70 2c 20 68 61 6e 64 6c ol(interp, handl
2bb0: 65 2c 20 73 79 6d 31 29 3b 0a 3c 20 20 20 20 20 e, sym1);.<
2bc0: 2a 70 72 6f 63 32 50 74 72 20 3d 20 54 63 6c 70 *proc2Ptr = Tclp
2bd0: 46 69 6e 64 53 79 6d 62 6f 6c 28 69 6e 74 65 72 FindSymbol(inter
2be0: 70 2c 20 68 61 6e 64 6c 65 2c 20 73 79 6d 32 29 p, handle, sym2)
2bf0: 3b 0a 2d 2d 2d 0a 3e 20 20 20 20 20 2a 70 72 6f ;.---.> *pro
2c00: 63 31 50 74 72 20 3d 20 54 63 6c 5f 46 69 6e 64 c1Ptr = Tcl_Find
2c10: 53 79 6d 62 6f 6c 28 69 6e 74 65 72 70 2c 20 68 Symbol(interp, h
2c20: 61 6e 64 6c 65 2c 20 73 79 6d 31 29 3b 0a 3e 20 andle, sym1);.>
2c30: 20 20 20 20 2a 70 72 6f 63 32 50 74 72 20 3d 20 *proc2Ptr =
2c40: 54 63 6c 5f 46 69 6e 64 53 79 6d 62 6f 6c 28 69 Tcl_FindSymbol(i
2c50: 6e 74 65 72 70 2c 20 68 61 6e 64 6c 65 2c 20 73 nterp, handle, s
2c60: 79 6d 32 29 3b 0a 3e 20 20 20 20 20 72 65 74 75 ym2);.> retu
2c70: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 3e 20 7d 0a 3e rn TCL_OK;.> }.>
2c80: 20 0c 0a 3e 20 2f 2a 0a 3e 20 20 2a 2d 2d 2d 2d ..> /*.> *----
2c90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2ca0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2cb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2cc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2cd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 3e 20 20 2a 0a 3e ---------.> *.>
2ce0: 20 20 2a 20 54 63 6c 5f 46 69 6e 64 53 79 6d 62 * Tcl_FindSymb
2cf0: 6f 6c 20 2d 2d 0a 3e 20 20 2a 0a 3e 20 20 2a 09 ol --.> *.> *.
2d00: 46 69 6e 64 20 61 20 73 79 6d 62 6f 6c 20 69 6e Find a symbol in
2d10: 20 61 20 6c 6f 61 64 65 64 20 6c 69 62 72 61 72 a loaded librar
2d20: 79 0a 3e 20 20 2a 0a 3e 20 20 2a 20 52 65 73 75 y.> *.> * Resu
2d30: 6c 74 73 3a 0a 3e 20 20 2a 09 52 65 74 75 72 6e lts:.> *.Return
2d40: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 s a pointer to t
2d50: 68 65 20 73 79 6d 62 6f 6c 20 69 66 20 66 6f 75 he symbol if fou
2d60: 6e 64 2e 20 49 66 20 6e 6f 74 20 66 6f 75 6e 64 nd. If not found
2d70: 2c 20 72 65 74 75 72 6e 73 0a 3e 20 20 2a 09 4e , returns.> *.N
2d80: 55 4c 4c 20 61 6e 64 20 6c 65 61 76 65 73 20 61 ULL and leaves a
2d90: 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 n error message
2da0: 69 6e 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 in the interpret
2db0: 65 72 20 72 65 73 75 6c 74 2e 0a 3e 20 20 2a 0a er result..> *.
2dc0: 3e 20 20 2a 20 54 68 69 73 20 66 75 6e 63 74 69 > * This functi
2dd0: 6f 6e 20 77 61 73 20 6f 6e 63 65 20 66 69 6c 65 on was once file
2de0: 73 79 73 74 65 6d 2d 73 70 65 63 69 66 69 63 2c system-specific,
2df0: 20 62 75 74 20 68 61 73 20 62 65 65 6e 20 6d 61 but has been ma
2e00: 64 65 20 70 6f 72 74 61 62 6c 65 0a 3e 20 20 2a de portable.> *
2e10: 20 62 79 20 68 61 76 69 6e 67 20 54 63 6c 70 44 by having TclpD
2e20: 6c 6f 70 65 6e 20 72 65 74 75 72 6e 20 61 20 73 lopen return a s
2e30: 74 72 75 63 74 75 72 65 20 74 68 61 74 20 69 6e tructure that in
2e40: 63 6c 75 64 65 73 20 70 72 6f 63 65 64 75 72 65 cludes procedure
2e50: 20 70 6f 69 6e 74 65 72 73 2e 0a 3e 20 20 2a 0a pointers..> *.
2e60: 3e 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d > *------------
2e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2e80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2e90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2ea0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2eb0: 2d 0a 3e 20 20 2a 2f 0a 3e 20 0a 3e 20 76 6f 69 -.> */.> .> voi
2ec0: 64 2a 0a 3e 20 54 63 6c 5f 46 69 6e 64 53 79 6d d*.> Tcl_FindSym
2ed0: 62 6f 6c 28 54 63 6c 5f 49 6e 74 65 72 70 2a 20 bol(Tcl_Interp*
2ee0: 69 6e 74 65 72 70 2c 09 20 20 2f 2a 20 54 63 6c interp,. /* Tcl
2ef0: 20 69 6e 74 65 72 70 72 65 74 65 72 20 2a 2f 0a interpreter */.
2f00: 3e 20 09 20 20 20 20 20 20 20 54 63 6c 5f 4c 6f > . Tcl_Lo
2f10: 61 64 48 61 6e 64 6c 65 20 6c 6f 61 64 48 61 6e adHandle loadHan
2f20: 64 6c 65 2c 20 2f 2a 20 48 61 6e 64 6c 65 20 74 dle, /* Handle t
2f30: 6f 20 74 68 65 20 6c 6f 61 64 65 64 20 6c 69 62 o the loaded lib
2f40: 72 61 72 79 20 2a 2f 0a 3e 20 09 20 20 20 20 20 rary */.> .
2f50: 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 73 79 const char* sy
2f60: 6d 62 6f 6c 29 20 20 20 20 20 20 20 20 2f 2a 20 mbol) /*
2f70: 4e 61 6d 65 20 6f 66 20 74 68 65 20 73 79 6d 62 Name of the symb
2f80: 6f 6c 20 74 6f 20 72 65 73 6f 6c 76 65 20 2a 2f ol to resolve */
2f90: 0a 3e 20 7b 0a 3e 20 20 20 20 20 72 65 74 75 72 .> {.> retur
2fa0: 6e 20 28 2a 28 6c 6f 61 64 48 61 6e 64 6c 65 2d n (*(loadHandle-
2fb0: 3e 66 69 6e 64 53 79 6d 62 6f 6c 50 72 6f 63 50 >findSymbolProcP
2fc0: 74 72 29 29 28 69 6e 74 65 72 70 2c 20 6c 6f 61 tr))(interp, loa
2fd0: 64 48 61 6e 64 6c 65 2c 20 73 79 6d 62 6f 6c 29 dHandle, symbol)
2fe0: 3b 0a 3e 20 7d 0a 3e 20 0c 0a 3e 20 2f 2a 0a 3e ;.> }.> ..> /*.>
2ff0: 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *-------------
3000: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3040: 0a 3e 20 20 2a 0a 3e 20 20 2a 20 54 63 6c 5f 46 .> *.> * Tcl_F
3050: 53 55 6e 6c 6f 61 64 46 69 6c 65 20 2d 2d 0a 3e SUnloadFile --.>
3060: 20 20 2a 0a 3e 20 20 2a 09 55 6e 6c 6f 61 64 73 *.> *.Unloads
3070: 20 61 20 6c 69 62 72 61 72 79 20 67 69 76 65 6e a library given
3080: 20 69 74 73 20 68 61 6e 64 6c 65 2e 20 43 68 65 its handle. Che
3090: 63 6b 73 20 66 69 72 73 74 20 74 68 61 74 20 74 cks first that t
30a0: 68 65 20 6c 69 62 72 61 72 79 0a 3e 20 20 2a 09 he library.> *.
30b0: 73 75 70 70 6f 72 74 73 20 75 6e 6c 6f 61 64 69 supports unloadi
30c0: 6e 67 2e 0a 3e 20 20 2a 0a 3e 20 20 2a 2d 2d 2d ng..> *.> *---
30d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
30e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
30f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3100: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 3e 20 20 2a 2f ----------.> */
3120: 0a 3e 20 0a 3e 20 69 6e 74 0a 3e 20 54 63 6c 5f .> .> int.> Tcl_
3130: 46 53 55 6e 6c 6f 61 64 46 69 6c 65 28 54 63 6c FSUnloadFile(Tcl
3140: 5f 49 6e 74 65 72 70 2a 20 69 6e 74 65 72 70 2c _Interp* interp,
3150: 20 2f 2a 20 54 63 6c 20 69 6e 74 65 72 70 72 65 /* Tcl interpre
3160: 74 65 72 20 2a 2f 0a 3e 20 09 09 20 54 63 6c 5f ter */.> .. Tcl_
3170: 4c 6f 61 64 48 61 6e 64 6c 65 20 68 61 6e 64 6c LoadHandle handl
3180: 65 29 20 2f 2a 20 48 61 6e 64 6c 65 20 6f 66 20 e) /* Handle of
3190: 74 68 65 20 66 69 6c 65 20 74 6f 20 75 6e 6c 6f the file to unlo
31a0: 61 64 20 2a 2f 0a 3e 20 7b 0a 3e 20 20 20 20 20 ad */.> {.>
31b0: 69 66 20 28 68 61 6e 64 6c 65 2d 3e 75 6e 6c 6f if (handle->unlo
31c0: 61 64 46 69 6c 65 50 72 6f 63 50 74 72 20 3d 3d adFileProcPtr ==
31d0: 20 4e 55 4c 4c 29 20 7b 0a 3e 20 09 69 66 20 28 NULL) {.> .if (
31e0: 69 6e 74 65 72 70 20 21 3d 20 4e 55 4c 4c 29 20 interp != NULL)
31f0: 7b 0a 3e 20 09 20 20 20 20 54 63 6c 5f 53 65 74 {.> . Tcl_Set
3200: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 ObjResult(interp
3210: 2c 0a 3e 20 09 09 09 20 20 20 20 20 54 63 6c 5f ,.> ... Tcl_
3220: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 63 61 NewStringObj("ca
3230: 6e 6e 6f 74 20 75 6e 6c 6f 61 64 3a 20 66 69 6c nnot unload: fil
3240: 65 73 79 73 74 65 6d 20 22 0a 3e 20 09 09 09 09 esystem ".> ....
3250: 09 20 20 20 20 20 20 22 64 6f 65 73 20 6e 6f 74 . "does not
3260: 20 73 75 70 70 6f 72 74 20 75 6e 6c 6f 61 64 69 support unloadi
3270: 6e 67 22 2c 0a 3e 20 09 09 09 09 09 20 20 20 20 ng",.> .....
3280: 20 20 2d 31 29 29 3b 0a 3e 20 09 7d 0a 3e 20 09 -1));.> .}.> .
3290: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 return TCL_ERROR
32a0: 3b 0a 3e 20 20 20 20 20 7d 20 65 6c 73 65 20 7b ;.> } else {
32b0: 0a 3e 20 09 54 63 6c 70 55 6e 6c 6f 61 64 46 69 .> .TclpUnloadFi
32c0: 6c 65 28 68 61 6e 64 6c 65 29 3b 0a 33 33 37 31 le(handle);.3371
32d0: 61 33 35 31 38 2c 33 35 33 39 0a 3e 20 20 20 20 a3518,3539.>
32e0: 20 7d 0a 3e 20 7d 0a 3e 20 0c 0a 3e 20 2f 2a 0a }.> }.> ..> /*.
32f0: 3e 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d > *------------
3300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3340: 2d 0a 3e 20 20 2a 0a 3e 20 20 2a 20 54 63 6c 70 -.> *.> * Tclp
3350: 55 6e 6c 6f 61 64 46 69 6c 65 20 2d 2d 0a 3e 20 UnloadFile --.>
3360: 20 2a 0a 3e 20 20 2a 09 55 6e 6c 6f 61 64 73 20 *.> *.Unloads
3370: 61 20 6c 69 62 72 61 72 79 20 67 69 76 65 6e 20 a library given
3380: 69 74 73 20 68 61 6e 64 6c 65 0a 3e 20 20 2a 0a its handle.> *.
3390: 3e 20 20 2a 20 54 68 69 73 20 66 75 6e 63 74 69 > * This functi
33a0: 6f 6e 20 77 61 73 20 6f 6e 63 65 20 66 69 6c 65 on was once file
33b0: 73 79 73 74 65 6d 2d 73 70 65 63 69 66 69 63 2c system-specific,
33c0: 20 62 75 74 20 68 61 73 20 62 65 65 6e 20 6d 61 but has been ma
33d0: 64 65 20 70 6f 72 74 61 62 6c 65 0a 3e 20 20 2a de portable.> *
33e0: 20 62 79 20 68 61 76 69 6e 67 20 54 63 6c 70 44 by having TclpD
33f0: 6c 6f 70 65 6e 20 72 65 74 75 72 6e 20 61 20 73 lopen return a s
3400: 74 72 75 63 74 75 72 65 20 74 68 61 74 20 69 6e tructure that in
3410: 63 6c 75 64 65 73 20 70 72 6f 63 65 64 75 72 65 cludes procedure
3420: 20 70 6f 69 6e 74 65 72 73 2e 0a 3e 20 20 2a 0a pointers..> *.
3430: 3e 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d > *------------
3440: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3450: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3460: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3470: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3480: 2d 0a 3e 20 20 2a 2f 0a 3e 20 0a 3e 20 76 6f 69 -.> */.> .> voi
3490: 64 0a 3e 20 54 63 6c 70 55 6e 6c 6f 61 64 46 69 d.> TclpUnloadFi
34a0: 6c 65 28 54 63 6c 5f 4c 6f 61 64 48 61 6e 64 6c le(Tcl_LoadHandl
34b0: 65 20 68 61 6e 64 6c 65 29 0a 3e 20 7b 0a 3e 20 e handle).> {.>
34c0: 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 2d 3e if (handle->
34d0: 75 6e 6c 6f 61 64 46 69 6c 65 50 72 6f 63 50 74 unloadFileProcPt
34e0: 72 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 3e 20 09 r != NULL) {.> .
34f0: 28 2a 28 68 61 6e 64 6c 65 2d 3e 75 6e 6c 6f 61 (*(handle->unloa
3500: 64 46 69 6c 65 50 72 6f 63 50 74 72 29 29 28 68 dFileProcPtr))(h
3510: 61 6e 64 6c 65 29 3b 0a 3e 20 20 20 20 20 7d 0a andle);.> }.
3520: 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f 74 Index: generic/t
3530: 63 6c 49 6e 74 2e 68 0a 3d 3d 3d 3d 3d 3d 3d 3d clInt.h.========
3540: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3550: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3560: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3570: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 ===========.RCS
3580: 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 file: /cvsroot/t
3590: 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 63 2f 74 cl/tcl/generic/t
35a0: 63 6c 49 6e 74 2e 68 2c 76 0a 72 65 74 72 69 65 clInt.h,v.retrie
35b0: 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e ving revision 1.
35c0: 34 36 34 0a 64 69 66 66 20 2d 72 31 2e 34 36 34 464.diff -r1.464
35d0: 20 74 63 6c 49 6e 74 2e 68 0a 32 37 37 34 61 32 tclInt.h.2774a2
35e0: 37 37 35 2c 32 37 39 33 0a 3e 20 2f 2a 20 54 49 775,2793.> /* TI
35f0: 50 20 23 33 35 37 20 2d 20 53 74 72 75 63 74 75 P #357 - Structu
3600: 72 65 20 64 6f 69 6e 67 20 74 68 65 20 62 6f 6f re doing the boo
3610: 6b 6b 65 65 70 69 6e 67 20 6f 66 20 68 61 6e 64 kkeeping of hand
3620: 6c 65 73 20 66 6f 72 20 54 63 6c 5f 4c 6f 61 64 les for Tcl_Load
3630: 46 69 6c 65 0a 3e 20 20 2a 20 20 20 20 20 20 20 File.> *
3640: 20 20 20 20 20 61 6e 64 20 54 63 6c 5f 46 69 6e and Tcl_Fin
3650: 64 53 79 6d 62 6f 6c 2e 20 54 68 69 73 20 73 74 dSymbol. This st
3660: 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f ructure correspo
3670: 6e 64 73 20 74 6f 20 61 6e 20 6f 70 61 71 75 65 nds to an opaque
3680: 0a 3e 20 20 2a 20 20 20 20 20 20 20 20 20 20 20 .> *
3690: 20 74 79 70 65 64 65 66 20 69 6e 20 74 63 6c 2e typedef in tcl.
36a0: 68 20 2a 2f 0a 3e 20 0a 3e 20 74 79 70 65 64 65 h */.> .> typede
36b0: 66 20 76 6f 69 64 2a 20 54 63 6c 46 69 6e 64 53 f void* TclFindS
36c0: 79 6d 62 6f 6c 50 72 6f 63 28 54 63 6c 5f 49 6e ymbolProc(Tcl_In
36d0: 74 65 72 70 2a 20 69 6e 74 65 72 70 2c 20 54 63 terp* interp, Tc
36e0: 6c 5f 4c 6f 61 64 48 61 6e 64 6c 65 20 6c 6f 61 l_LoadHandle loa
36f0: 64 48 61 6e 64 6c 65 2c 0a 3e 20 09 09 09 09 63 dHandle,.> ....c
3700: 6f 6e 73 74 20 63 68 61 72 2a 20 73 79 6d 62 6f onst char* symbo
3710: 6c 29 3b 0a 3e 20 73 74 72 75 63 74 20 54 63 6c l);.> struct Tcl
3720: 5f 4c 6f 61 64 48 61 6e 64 6c 65 5f 20 7b 0a 3e _LoadHandle_ {.>
3730: 20 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 ClientData
3740: 63 6c 69 65 6e 74 44 61 74 61 3b 09 2f 2a 20 43 clientData;./* C
3750: 6c 69 65 6e 74 20 64 61 74 61 20 69 73 20 74 68 lient data is th
3760: 65 20 6c 6f 61 64 20 68 61 6e 64 6c 65 20 69 6e e load handle in
3770: 20 74 68 65 0a 3e 20 09 09 09 09 20 2a 20 6e 61 the.> .... * na
3780: 74 69 76 65 20 66 69 6c 65 73 79 73 74 65 6d 20 tive filesystem
3790: 69 66 20 61 20 6d 6f 64 75 6c 65 20 77 61 73 20 if a module was
37a0: 6c 6f 61 64 65 64 0a 3e 20 09 09 09 09 20 2a 20 loaded.> .... *
37b0: 74 68 65 72 65 2c 20 6f 72 20 61 6e 20 6f 70 61 there, or an opa
37c0: 71 75 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 que pointer to a
37d0: 20 73 74 72 75 63 74 75 72 65 0a 3e 20 09 09 09 structure.> ...
37e0: 09 20 2a 20 66 6f 72 20 66 75 72 74 68 65 72 20 . * for further
37f0: 62 6f 6f 6b 6b 65 65 70 69 6e 67 20 6f 6e 20 6c bookkeeping on l
3800: 6f 61 64 2d 66 72 6f 6d 2d 56 46 53 0a 3e 20 09 oad-from-VFS.> .
3810: 09 09 09 20 2a 20 61 6e 64 20 6c 6f 61 64 2d 66 ... * and load-f
3820: 72 6f 6d 2d 6d 65 6d 6f 72 79 20 2a 2f 0a 3e 20 rom-memory */.>
3830: 20 20 20 20 54 63 6c 46 69 6e 64 53 79 6d 62 6f TclFindSymbo
3840: 6c 50 72 6f 63 2a 20 66 69 6e 64 53 79 6d 62 6f lProc* findSymbo
3850: 6c 50 72 6f 63 50 74 72 3b 0a 3e 20 09 09 09 09 lProcPtr;.> ....
3860: 2f 2a 20 50 72 6f 63 65 64 75 72 65 20 74 68 61 /* Procedure tha
3870: 74 20 72 65 73 6f 6c 76 65 73 20 73 79 6d 62 6f t resolves symbo
3880: 6c 73 20 69 6e 20 61 0a 3e 20 09 09 09 09 20 2a ls in a.> .... *
3890: 20 6c 6f 61 64 65 64 20 6d 6f 64 75 6c 65 20 2a loaded module *
38a0: 2f 0a 3e 20 20 20 20 20 54 63 6c 5f 46 53 55 6e /.> Tcl_FSUn
38b0: 6c 6f 61 64 46 69 6c 65 50 72 6f 63 2a 20 75 6e loadFileProc* un
38c0: 6c 6f 61 64 46 69 6c 65 50 72 6f 63 50 74 72 3b loadFileProcPtr;
38d0: 0a 3e 20 09 09 09 09 2f 2a 20 50 72 6f 63 65 64 .> ..../* Proced
38e0: 75 72 65 20 74 68 61 74 20 75 6e 6c 6f 61 64 73 ure that unloads
38f0: 20 61 20 6c 6f 61 64 65 64 20 6d 6f 64 75 6c 65 a loaded module
3900: 20 2a 2f 0a 3e 20 7d 3b 0a 3e 20 0a 32 39 32 33 */.> };.> .2923
3910: 2c 32 39 32 38 64 32 39 34 31 0a 3c 20 4d 4f 44 ,2928d2941.< MOD
3920: 55 4c 45 5f 53 43 4f 50 45 20 69 6e 74 09 54 63 ULE_SCOPE int.Tc
3930: 6c 4c 6f 61 64 46 69 6c 65 28 54 63 6c 5f 49 6e lLoadFile(Tcl_In
3940: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 54 63 terp *interp, Tc
3950: 6c 5f 4f 62 6a 20 2a 70 61 74 68 50 74 72 2c 0a l_Obj *pathPtr,.
3960: 3c 20 09 09 09 20 20 20 20 69 6e 74 20 73 79 6d < ... int sym
3970: 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 c, const char *s
3980: 79 6d 62 6f 6c 73 5b 5d 2c 0a 3c 20 09 09 09 20 ymbols[],.< ...
3990: 20 20 20 54 63 6c 5f 50 61 63 6b 61 67 65 49 6e Tcl_PackageIn
39a0: 69 74 50 72 6f 63 20 2a 2a 70 72 6f 63 50 74 72 itProc **procPtr
39b0: 73 5b 5d 2c 0a 3c 20 09 09 09 20 20 20 20 54 63 s[],.< ... Tc
39c0: 6c 5f 4c 6f 61 64 48 61 6e 64 6c 65 20 2a 68 61 l_LoadHandle *ha
39d0: 6e 64 6c 65 50 74 72 2c 0a 3c 20 09 09 09 20 20 ndlePtr,.< ...
39e0: 20 20 43 6c 69 65 6e 74 44 61 74 61 20 2a 63 6c ClientData *cl
39f0: 69 65 6e 74 44 61 74 61 50 74 72 2c 0a 3c 20 09 ientDataPtr,.< .
3a00: 09 09 20 20 20 20 54 63 6c 5f 46 53 55 6e 6c 6f .. Tcl_FSUnlo
3a10: 61 64 46 69 6c 65 50 72 6f 63 20 2a 2a 75 6e 6c adFileProc **unl
3a20: 6f 61 64 50 72 6f 63 50 74 72 29 3b 0a 32 39 36 oadProcPtr);.296
3a30: 35 61 32 39 37 39 0a 3e 20 4d 4f 44 55 4c 45 5f 5a2979.> MODULE_
3a40: 53 43 4f 50 45 20 54 63 6c 5f 4f 62 6a 20 2a 20 SCOPE Tcl_Obj *
3a50: 20 54 63 6c 70 54 65 6d 70 46 69 6c 65 4e 61 6d TclpTempFileNam
3a60: 65 46 6f 72 4c 69 62 72 61 72 79 28 54 63 6c 5f eForLibrary(Tcl_
3a70: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 Interp *interp,
3a80: 54 63 6c 5f 4f 62 6a 2a 20 70 61 74 68 50 74 72 Tcl_Obj* pathPtr
3a90: 29 3b 0a 33 30 31 38 64 33 30 33 31 0a 3c 20 4d );.3018d3031.< M
3aa0: 4f 44 55 4c 45 5f 53 43 4f 50 45 20 76 6f 69 64 ODULE_SCOPE void
3ab0: 09 54 63 6c 70 55 6e 6c 6f 61 64 46 69 6c 65 28 .TclpUnloadFile(
3ac0: 54 63 6c 5f 4c 6f 61 64 48 61 6e 64 6c 65 20 6c Tcl_LoadHandle l
3ad0: 6f 61 64 48 61 6e 64 6c 65 29 3b 0a 33 30 35 39 oadHandle);.3059
3ae0: 2c 33 30 36 30 64 33 30 37 31 0a 3c 20 4d 4f 44 ,3060d3071.< MOD
3af0: 55 4c 45 5f 53 43 4f 50 45 20 54 63 6c 5f 50 61 ULE_SCOPE Tcl_Pa
3b00: 63 6b 61 67 65 49 6e 69 74 50 72 6f 63 20 2a 54 ckageInitProc *T
3b10: 63 6c 70 46 69 6e 64 53 79 6d 62 6f 6c 28 54 63 clpFindSymbol(Tc
3b20: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 l_Interp *interp
3b30: 2c 0a 3c 20 09 09 09 20 20 20 20 54 63 6c 5f 4c ,.< ... Tcl_L
3b40: 6f 61 64 48 61 6e 64 6c 65 20 6c 6f 61 64 48 61 oadHandle loadHa
3b50: 6e 64 6c 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 ndle, const char
3b60: 20 2a 73 79 6d 62 6f 6c 29 3b 0a 49 6e 64 65 78 *symbol);.Index
3b70: 3a 20 67 65 6e 65 72 69 63 2f 74 63 6c 4c 6f 61 : generic/tclLoa
3b80: 64 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d d.c.============
3b90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3ba0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3bb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3bc0: 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 =======.RCS file
3bd0: 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 : /cvsroot/tcl/t
3be0: 63 6c 2f 67 65 6e 65 72 69 63 2f 74 63 6c 4c 6f cl/generic/tclLo
3bf0: 61 64 2e 63 2c 76 0a 72 65 74 72 69 65 76 69 6e ad.c,v.retrievin
3c00: 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 32 34 0a g revision 1.24.
3c10: 64 69 66 66 20 2d 72 31 2e 32 34 20 74 63 6c 4c diff -r1.24 tclL
3c20: 6f 61 64 2e 63 0a 36 30 2c 36 34 64 35 39 0a 3c oad.c.60,64d59.<
3c30: 20 20 20 20 20 54 63 6c 5f 46 53 55 6e 6c 6f 61 Tcl_FSUnloa
3c40: 64 46 69 6c 65 50 72 6f 63 20 2a 75 6e 4c 6f 61 dFileProc *unLoa
3c50: 64 50 72 6f 63 50 74 72 3b 0a 3c 20 09 09 09 09 dProcPtr;.< ....
3c60: 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 74 6f 20 75 /* Function to u
3c70: 73 65 20 74 6f 20 75 6e 6c 6f 61 64 20 74 68 69 se to unload thi
3c80: 73 20 70 61 63 6b 61 67 65 2e 20 49 66 0a 3c 20 s package. If.<
3c90: 09 09 09 09 20 2a 20 4e 55 4c 4c 2c 20 74 68 65 .... * NULL, the
3ca0: 6e 20 77 65 20 64 6f 20 6e 6f 74 20 61 74 74 65 n we do not atte
3cb0: 6d 70 74 20 74 6f 20 75 6e 6c 6f 61 64 20 74 68 mpt to unload th
3cc0: 65 0a 3c 20 09 09 09 09 20 2a 20 70 61 63 6b 61 e.< .... * packa
3cd0: 67 65 2e 20 49 66 20 66 69 6c 65 4e 61 6d 65 20 ge. If fileName
3ce0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 is NULL, then th
3cf0: 69 73 0a 3c 20 09 09 09 09 20 2a 20 66 69 65 6c is.< .... * fiel
3d00: 64 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74 2e d is irrelevant.
3d10: 20 2a 2f 0a 31 33 34 64 31 32 38 0a 3c 20 20 20 */.134d128.<
3d20: 20 20 54 63 6c 5f 50 61 63 6b 61 67 65 49 6e 69 Tcl_PackageIni
3d30: 74 50 72 6f 63 20 2a 69 6e 69 74 50 72 6f 63 2c tProc *initProc,
3d40: 20 2a 73 61 66 65 49 6e 69 74 50 72 6f 63 2c 20 *safeInitProc,
3d50: 2a 75 6e 6c 6f 61 64 50 72 6f 63 2c 20 2a 73 61 *unloadProc, *sa
3d60: 66 65 55 6e 6c 6f 61 64 50 72 6f 63 3b 0a 31 33 feUnloadProc;.13
3d70: 37 2c 31 33 39 63 31 33 31 2c 31 33 32 0a 3c 20 7,139c131,132.<
3d80: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
3d90: 73 79 6d 62 6f 6c 73 5b 34 5d 3b 0a 3c 20 20 20 symbols[4];.<
3da0: 20 20 54 63 6c 5f 50 61 63 6b 61 67 65 49 6e 69 Tcl_PackageIni
3db0: 74 50 72 6f 63 20 2a 2a 70 72 6f 63 50 74 72 73 tProc **procPtrs
3dc0: 5b 34 5d 3b 0a 3c 20 20 20 20 20 43 6c 69 65 6e [4];.< Clien
3dd0: 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 tData clientData
3de0: 3b 0a 2d 2d 2d 0a 3e 20 20 20 20 20 63 6f 6e 73 ;.---.> cons
3df0: 74 20 63 68 61 72 20 2a 73 79 6d 62 6f 6c 73 5b t char *symbols[
3e00: 32 5d 3b 0a 3e 20 20 20 20 20 76 6f 69 64 2a 20 2];.> void*
3e10: 70 72 6f 63 50 74 72 73 5b 31 5d 3b 0a 31 34 32 procPtrs[1];.142
3e20: 64 31 33 34 0a 3c 20 20 20 20 20 54 63 6c 5f 46 d134.< Tcl_F
3e30: 53 55 6e 6c 6f 61 64 46 69 6c 65 50 72 6f 63 20 SUnloadFileProc
3e40: 2a 75 6e 4c 6f 61 64 50 72 6f 63 50 74 72 20 3d *unLoadProcPtr =
3e50: 20 4e 55 4c 4c 3b 0a 33 36 32 2c 33 36 38 63 33 NULL;.362,368c3
3e60: 35 34 0a 3c 20 09 73 79 6d 62 6f 6c 73 5b 31 5d 54.< .symbols[1]
3e70: 20 3d 20 54 63 6c 5f 44 53 74 72 69 6e 67 56 61 = Tcl_DStringVa
3e80: 6c 75 65 28 26 73 61 66 65 49 6e 69 74 4e 61 6d lue(&safeInitNam
3e90: 65 29 3b 0a 3c 20 09 73 79 6d 62 6f 6c 73 5b 32 e);.< .symbols[2
3ea0: 5d 20 3d 20 54 63 6c 5f 44 53 74 72 69 6e 67 56 ] = Tcl_DStringV
3eb0: 61 6c 75 65 28 26 75 6e 6c 6f 61 64 4e 61 6d 65 alue(&unloadName
3ec0: 29 3b 0a 3c 20 09 73 79 6d 62 6f 6c 73 5b 33 5d );.< .symbols[3]
3ed0: 20 3d 20 54 63 6c 5f 44 53 74 72 69 6e 67 56 61 = Tcl_DStringVa
3ee0: 6c 75 65 28 26 73 61 66 65 55 6e 6c 6f 61 64 4e lue(&safeUnloadN
3ef0: 61 6d 65 29 3b 0a 3c 20 09 70 72 6f 63 50 74 72 ame);.< .procPtr
3f00: 73 5b 30 5d 20 3d 20 26 69 6e 69 74 50 72 6f 63 s[0] = &initProc
3f10: 3b 0a 3c 20 09 70 72 6f 63 50 74 72 73 5b 31 5d ;.< .procPtrs[1]
3f20: 20 3d 20 26 73 61 66 65 49 6e 69 74 50 72 6f 63 = &safeInitProc
3f30: 3b 0a 3c 20 09 70 72 6f 63 50 74 72 73 5b 32 5d ;.< .procPtrs[2]
3f40: 20 3d 20 26 75 6e 6c 6f 61 64 50 72 6f 63 3b 0a = &unloadProc;.
3f50: 3c 20 09 70 72 6f 63 50 74 72 73 5b 33 5d 20 3d < .procPtrs[3] =
3f60: 20 26 73 61 66 65 55 6e 6c 6f 61 64 50 72 6f 63 &safeUnloadProc
3f70: 3b 0a 2d 2d 2d 0a 3e 20 09 73 79 6d 62 6f 6c 73 ;.---.> .symbols
3f80: 5b 31 5d 20 3d 20 4e 55 4c 4c 3b 0a 33 37 31 2c [1] = NULL;.371,
3f90: 33 37 32 63 33 35 37 0a 3c 20 09 63 6f 64 65 20 372c357.< .code
3fa0: 3d 20 54 63 6c 4c 6f 61 64 46 69 6c 65 28 69 6e = TclLoadFile(in
3fb0: 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 34 terp, objv[1], 4
3fc0: 2c 20 73 79 6d 62 6f 6c 73 2c 20 70 72 6f 63 50 , symbols, procP
3fd0: 74 72 73 2c 0a 3c 20 09 09 26 6c 6f 61 64 48 61 trs,.< ..&loadHa
3fe0: 6e 64 6c 65 2c 20 26 63 6c 69 65 6e 74 44 61 74 ndle, &clientDat
3ff0: 61 2c 20 26 75 6e 4c 6f 61 64 50 72 6f 63 50 74 a, &unLoadProcPt
4000: 72 29 3b 0a 2d 2d 2d 0a 3e 20 09 63 6f 64 65 20 r);.---.> .code
4010: 3d 20 54 63 6c 5f 4c 6f 61 64 46 69 6c 65 28 69 = Tcl_LoadFile(i
4020: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 nterp, objv[1],
4030: 73 79 6d 62 6f 6c 73 2c 20 30 2c 20 70 72 6f 63 symbols, 0, proc
4040: 50 74 72 73 2c 20 26 6c 6f 61 64 48 61 6e 64 6c Ptrs, &loadHandl
4050: 65 29 3b 0a 33 37 34 64 33 35 38 0a 3c 20 09 6c e);.374d358.< .l
4060: 6f 61 64 48 61 6e 64 6c 65 20 3d 20 63 6c 69 65 oadHandle = clie
4070: 6e 74 44 61 74 61 3b 0a 33 37 39 2c 33 38 38 64 ntData;.379,388d
4080: 33 36 32 0a 3c 20 09 69 66 20 28 2a 70 72 6f 63 362.< .if (*proc
4090: 50 74 72 73 5b 30 5d 20 2f 2a 20 69 6e 69 74 50 Ptrs[0] /* initP
40a0: 72 6f 63 20 2a 2f 20 3d 3d 20 4e 55 4c 4c 29 20 roc */ == NULL)
40b0: 7b 0a 3c 20 09 20 20 20 20 54 63 6c 5f 41 70 70 {.< . Tcl_App
40c0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 endResult(interp
40d0: 2c 20 22 63 6f 75 6c 64 6e 27 74 20 66 69 6e 64 , "couldn't find
40e0: 20 70 72 6f 63 65 64 75 72 65 20 22 2c 0a 3c 20 procedure ",.<
40f0: 09 09 20 20 20 20 54 63 6c 5f 44 53 74 72 69 6e .. Tcl_DStrin
4100: 67 56 61 6c 75 65 28 26 69 6e 69 74 4e 61 6d 65 gValue(&initName
4110: 29 2c 20 4e 55 4c 4c 29 3b 0a 3c 20 09 20 20 20 ), NULL);.< .
4120: 20 69 66 20 28 75 6e 4c 6f 61 64 50 72 6f 63 50 if (unLoadProcP
4130: 74 72 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 3c 20 tr != NULL) {.<
4140: 09 09 75 6e 4c 6f 61 64 50 72 6f 63 50 74 72 28 ..unLoadProcPtr(
4150: 6c 6f 61 64 48 61 6e 64 6c 65 29 3b 0a 3c 20 09 loadHandle);.< .
4160: 20 20 20 20 7d 0a 3c 20 09 20 20 20 20 63 6f 64 }.< . cod
4170: 65 20 3d 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 3c e = TCL_ERROR;.<
4180: 20 09 20 20 20 20 67 6f 74 6f 20 64 6f 6e 65 3b . goto done;
4190: 0a 3c 20 09 7d 0a 3c 20 0a 34 30 31 2c 34 30 35 .< .}.< .401,405
41a0: 63 33 37 35 2c 33 38 32 0a 3c 20 09 70 6b 67 50 c375,382.< .pkgP
41b0: 74 72 2d 3e 75 6e 4c 6f 61 64 50 72 6f 63 50 74 tr->unLoadProcPt
41c0: 72 09 20 20 20 3d 20 75 6e 4c 6f 61 64 50 72 6f r. = unLoadPro
41d0: 63 50 74 72 3b 0a 3c 20 09 70 6b 67 50 74 72 2d cPtr;.< .pkgPtr-
41e0: 3e 69 6e 69 74 50 72 6f 63 09 20 20 20 3d 20 2a >initProc. = *
41f0: 70 72 6f 63 50 74 72 73 5b 30 5d 3b 0a 3c 20 09 procPtrs[0];.< .
4200: 70 6b 67 50 74 72 2d 3e 73 61 66 65 49 6e 69 74 pkgPtr->safeInit
4210: 50 72 6f 63 09 20 20 20 3d 20 2a 70 72 6f 63 50 Proc. = *procP
4220: 74 72 73 5b 31 5d 3b 0a 3c 20 09 70 6b 67 50 74 trs[1];.< .pkgPt
4230: 72 2d 3e 75 6e 6c 6f 61 64 50 72 6f 63 09 20 20 r->unloadProc.
4240: 20 3d 20 28 54 63 6c 5f 50 61 63 6b 61 67 65 55 = (Tcl_PackageU
4250: 6e 6c 6f 61 64 50 72 6f 63 20 2a 29 20 2a 70 72 nloadProc *) *pr
4260: 6f 63 50 74 72 73 5b 32 5d 3b 0a 3c 20 09 70 6b ocPtrs[2];.< .pk
4270: 67 50 74 72 2d 3e 73 61 66 65 55 6e 6c 6f 61 64 gPtr->safeUnload
4280: 50 72 6f 63 09 20 20 20 3d 20 28 54 63 6c 5f 50 Proc. = (Tcl_P
4290: 61 63 6b 61 67 65 55 6e 6c 6f 61 64 50 72 6f 63 ackageUnloadProc
42a0: 20 2a 29 20 2a 70 72 6f 63 50 74 72 73 5b 33 5d *) *procPtrs[3]
42b0: 3b 0a 2d 2d 2d 0a 3e 20 09 70 6b 67 50 74 72 2d ;.---.> .pkgPtr-
42c0: 3e 69 6e 69 74 50 72 6f 63 09 20 20 20 3d 20 28 >initProc. = (
42d0: 54 63 6c 5f 50 61 63 6b 61 67 65 49 6e 69 74 50 Tcl_PackageInitP
42e0: 72 6f 63 2a 29 20 70 72 6f 63 50 74 72 73 5b 30 roc*) procPtrs[0
42f0: 5d 3b 0a 3e 20 09 70 6b 67 50 74 72 2d 3e 73 61 ];.> .pkgPtr->sa
4300: 66 65 49 6e 69 74 50 72 6f 63 09 20 20 20 3d 20 feInitProc. =
4310: 28 54 63 6c 5f 50 61 63 6b 61 67 65 49 6e 69 74 (Tcl_PackageInit
4320: 50 72 6f 63 2a 29 0a 3e 20 09 20 20 20 20 54 63 Proc*).> . Tc
4330: 6c 5f 46 69 6e 64 53 79 6d 62 6f 6c 28 69 6e 74 l_FindSymbol(int
4340: 65 72 70 2c 20 6c 6f 61 64 48 61 6e 64 6c 65 2c erp, loadHandle,
4350: 20 54 63 6c 5f 44 53 74 72 69 6e 67 56 61 6c 75 Tcl_DStringValu
4360: 65 28 26 73 61 66 65 49 6e 69 74 4e 61 6d 65 29 e(&safeInitName)
4370: 29 3b 0a 3e 20 09 70 6b 67 50 74 72 2d 3e 75 6e );.> .pkgPtr->un
4380: 6c 6f 61 64 50 72 6f 63 09 20 20 20 3d 20 28 54 loadProc. = (T
4390: 63 6c 5f 50 61 63 6b 61 67 65 55 6e 6c 6f 61 64 cl_PackageUnload
43a0: 50 72 6f 63 2a 29 0a 3e 20 09 20 20 20 20 54 63 Proc*).> . Tc
43b0: 6c 5f 46 69 6e 64 53 79 6d 62 6f 6c 28 69 6e 74 l_FindSymbol(int
43c0: 65 72 70 2c 20 6c 6f 61 64 48 61 6e 64 6c 65 2c erp, loadHandle,
43d0: 20 54 63 6c 5f 44 53 74 72 69 6e 67 56 61 6c 75 Tcl_DStringValu
43e0: 65 28 26 75 6e 6c 6f 61 64 4e 61 6d 65 29 29 3b e(&unloadName));
43f0: 0a 3e 20 09 70 6b 67 50 74 72 2d 3e 73 61 66 65 .> .pkgPtr->safe
4400: 55 6e 6c 6f 61 64 50 72 6f 63 09 20 20 20 3d 20 UnloadProc. =
4410: 28 54 63 6c 5f 50 61 63 6b 61 67 65 55 6e 6c 6f (Tcl_PackageUnlo
4420: 61 64 50 72 6f 63 20 2a 29 20 0a 3e 20 09 20 20 adProc *) .> .
4430: 20 20 54 63 6c 5f 46 69 6e 64 53 79 6d 62 6f 6c Tcl_FindSymbol
4440: 28 69 6e 74 65 72 70 2c 20 6c 6f 61 64 48 61 6e (interp, loadHan
4450: 64 6c 65 2c 0a 3e 20 09 09 09 20 20 20 54 63 6c dle,.> ... Tcl
4460: 5f 44 53 74 72 69 6e 67 56 61 6c 75 65 28 26 73 _DStringValue(&s
4470: 61 66 65 55 6e 6c 6f 61 64 4e 61 6d 65 29 29 3b afeUnloadName));
4480: 0a 34 31 32 61 33 39 30 2c 33 39 34 0a 3e 20 09 .412a390,394.> .
4490: 2f 2a 0a 3e 20 09 20 2a 20 54 68 65 20 54 63 6c /*.> . * The Tcl
44a0: 5f 46 69 6e 64 53 79 6d 62 6f 6c 20 63 61 6c 6c _FindSymbol call
44b0: 73 20 6d 61 79 20 68 61 76 65 20 6c 65 66 74 20 s may have left
44c0: 61 20 73 70 75 72 69 6f 75 73 20 65 72 72 6f 72 a spurious error
44d0: 20 6d 65 73 73 61 67 65 0a 3e 20 09 20 2a 20 69 message.> . * i
44e0: 6e 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 n the interprete
44f0: 72 20 72 65 73 75 6c 74 2e 0a 3e 20 09 20 2a 2f r result..> . */
4500: 0a 3e 20 09 54 63 6c 5f 52 65 73 65 74 52 65 73 .> .Tcl_ResetRes
4510: 75 6c 74 28 69 6e 74 65 72 70 29 3b 0a 37 39 30 ult(interp);.790
4520: 64 37 37 31 0a 3c 20 09 20 20 20 20 54 63 6c 5f d771.< . Tcl_
4530: 46 53 55 6e 6c 6f 61 64 46 69 6c 65 50 72 6f 63 FSUnloadFileProc
4540: 20 2a 75 6e 4c 6f 61 64 50 72 6f 63 50 74 72 20 *unLoadProcPtr
4550: 3d 20 70 6b 67 50 74 72 2d 3e 75 6e 4c 6f 61 64 = pkgPtr->unLoad
4560: 50 72 6f 63 50 74 72 3b 0a 37 39 32 64 37 37 32 ProcPtr;.792d772
4570: 0a 3c 20 09 20 20 20 20 69 66 20 28 75 6e 4c 6f .< . if (unLo
4580: 61 64 50 72 6f 63 50 74 72 20 21 3d 20 4e 55 4c adProcPtr != NUL
4590: 4c 29 20 7b 0a 37 39 34 2c 37 39 37 63 37 37 34 L) {.794,797c774
45a0: 0a 3c 20 09 09 69 66 20 28 28 70 6b 67 50 74 72 .< ..if ((pkgPtr
45b0: 2d 3e 75 6e 6c 6f 61 64 50 72 6f 63 20 21 3d 20 ->unloadProc !=
45c0: 4e 55 4c 4c 29 20 7c 7c 20 28 75 6e 4c 6f 61 64 NULL) || (unLoad
45d0: 50 72 6f 63 50 74 72 20 3d 3d 20 54 63 6c 46 53 ProcPtr == TclFS
45e0: 55 6e 6c 6f 61 64 54 65 6d 70 46 69 6c 65 29 29 UnloadTempFile))
45f0: 20 7b 0a 3c 20 09 09 20 20 20 20 75 6e 4c 6f 61 {.< .. unLoa
4600: 64 50 72 6f 63 50 74 72 28 70 6b 67 50 74 72 2d dProcPtr(pkgPtr-
4610: 3e 6c 6f 61 64 48 61 6e 64 6c 65 29 3b 0a 3c 20 >loadHandle);.<
4620: 09 09 7d 0a 3c 20 0a 2d 2d 2d 0a 3e 20 09 20 20 ..}.< .---.> .
4630: 20 20 69 66 20 28 54 63 6c 5f 46 53 55 6e 6c 6f if (Tcl_FSUnlo
4640: 61 64 46 69 6c 65 28 69 6e 74 65 72 70 2c 20 70 adFile(interp, p
4650: 6b 67 50 74 72 2d 3e 6c 6f 61 64 48 61 6e 64 6c kgPtr->loadHandl
4660: 65 29 20 3d 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a e) == TCL_OK) {.
4670: 38 34 32 2c 38 34 34 64 38 31 38 0a 3c 20 09 09 842,844d818.< ..
4680: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 Tcl_AppendResult
4690: 28 69 6e 74 65 72 70 2c 20 22 66 69 6c 65 20 5c (interp, "file \
46a0: 22 22 2c 20 66 75 6c 6c 46 69 6c 65 4e 61 6d 65 "", fullFileName
46b0: 2c 0a 3c 20 09 09 09 22 5c 22 20 63 61 6e 6e 6f ,.< ..."\" canno
46c0: 74 20 62 65 20 75 6e 6c 6f 61 64 65 64 3a 20 66 t be unloaded: f
46d0: 69 6c 65 73 79 73 74 65 6d 20 64 6f 65 73 20 6e ilesystem does n
46e0: 6f 74 20 73 75 70 70 6f 72 74 20 75 6e 6c 6f 61 ot support unloa
46f0: 64 69 6e 67 22 2c 0a 3c 20 09 09 09 4e 55 4c 4c ding",.< ...NULL
4700: 29 3b 0a 31 31 34 39 2c 31 31 35 34 63 31 31 32 );.1149,1154c112
4710: 33 0a 3c 20 09 20 20 20 20 54 63 6c 5f 46 53 55 3.< . Tcl_FSU
4720: 6e 6c 6f 61 64 46 69 6c 65 50 72 6f 63 20 2a 75 nloadFileProc *u
4730: 6e 4c 6f 61 64 50 72 6f 63 50 74 72 20 3d 20 70 nLoadProcPtr = p
4740: 6b 67 50 74 72 2d 3e 75 6e 4c 6f 61 64 50 72 6f kgPtr->unLoadPro
4750: 63 50 74 72 3b 0a 3c 20 09 20 20 20 20 69 66 20 cPtr;.< . if
4760: 28 28 75 6e 4c 6f 61 64 50 72 6f 63 50 74 72 20 ((unLoadProcPtr
4770: 21 3d 20 4e 55 4c 4c 29 0a 3c 20 09 09 20 20 20 != NULL).< ..
4780: 20 26 26 20 28 28 70 6b 67 50 74 72 2d 3e 75 6e && ((pkgPtr->un
4790: 6c 6f 61 64 50 72 6f 63 20 21 3d 20 4e 55 4c 4c loadProc != NULL
47a0: 29 0a 3c 20 09 09 20 20 20 20 7c 7c 20 28 75 6e ).< .. || (un
47b0: 4c 6f 61 64 50 72 6f 63 50 74 72 20 3d 3d 20 54 LoadProcPtr == T
47c0: 63 6c 46 53 55 6e 6c 6f 61 64 54 65 6d 70 46 69 clFSUnloadTempFi
47d0: 6c 65 29 29 29 20 7b 0a 3c 20 09 09 75 6e 4c 6f le))) {.< ..unLo
47e0: 61 64 50 72 6f 63 50 74 72 28 70 6b 67 50 74 72 adProcPtr(pkgPtr
47f0: 2d 3e 6c 6f 61 64 48 61 6e 64 6c 65 29 3b 0a 3c ->loadHandle);.<
4800: 20 09 20 20 20 20 7d 0a 2d 2d 2d 0a 3e 20 09 20 . }.---.> .
4810: 20 20 20 54 63 6c 5f 46 53 55 6e 6c 6f 61 64 46 Tcl_FSUnloadF
4820: 69 6c 65 28 4e 55 4c 4c 2c 20 70 6b 67 50 74 72 ile(NULL, pkgPtr
4830: 2d 3e 6c 6f 61 64 48 61 6e 64 6c 65 29 3b 0a 49 ->loadHandle);.I
4840: 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f 74 63 ndex: generic/tc
4850: 6c 4c 6f 61 64 4e 6f 6e 65 2e 63 0a 3d 3d 3d 3d lLoadNone.c.====
4860: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4870: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4880: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4890: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a ===============.
48a0: 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f RCS file: /cvsro
48b0: 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 ot/tcl/tcl/gener
48c0: 69 63 2f 74 63 6c 4c 6f 61 64 4e 6f 6e 65 2e 63 ic/tclLoadNone.c
48d0: 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65 ,v.retrieving re
48e0: 76 69 73 69 6f 6e 20 31 2e 31 33 0a 64 69 66 66 vision 1.13.diff
48f0: 20 2d 72 31 2e 31 33 20 74 63 6c 4c 6f 61 64 4e -r1.13 tclLoadN
4900: 6f 6e 65 2e 63 0a 34 63 34 0a 3c 20 20 2a 09 54 one.c.4c4.< *.T
4910: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 70 72 his procedure pr
4920: 6f 76 69 64 65 73 20 61 20 76 65 72 73 69 6f 6e ovides a version
4930: 20 6f 66 20 74 68 65 20 54 63 6c 4c 6f 61 64 46 of the TclLoadF
4940: 69 6c 65 20 66 6f 72 20 75 73 65 20 69 6e 0a 2d ile for use in.-
4950: 2d 2d 0a 3e 20 20 2a 09 54 68 69 73 20 70 72 6f --.> *.This pro
4960: 63 65 64 75 72 65 20 70 72 6f 76 69 64 65 73 20 cedure provides
4970: 61 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 a version of the
4980: 20 54 63 6c 70 44 6c 6f 70 65 6e 20 66 6f 72 20 TclpDlopen for
4990: 75 73 65 20 69 6e 0a 35 38 2c 38 34 64 35 37 0a use in.58,84d57.
49a0: 3c 20 20 2a 20 54 63 6c 70 46 69 6e 64 53 79 6d < * TclpFindSym
49b0: 62 6f 6c 20 2d 2d 0a 3c 20 20 2a 0a 3c 20 20 2a bol --.< *.< *
49c0: 09 4c 6f 6f 6b 73 20 75 70 20 61 20 73 79 6d 62 .Looks up a symb
49d0: 6f 6c 2c 20 62 79 20 6e 61 6d 65 2c 20 74 68 72 ol, by name, thr
49e0: 6f 75 67 68 20 61 20 68 61 6e 64 6c 65 20 61 73 ough a handle as
49f0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 0a sociated with a.
4a00: 3c 20 20 2a 09 70 72 65 76 69 6f 75 73 6c 79 20 < *.previously
4a10: 6c 6f 61 64 65 64 20 70 69 65 63 65 20 6f 66 20 loaded piece of
4a20: 63 6f 64 65 20 28 73 68 61 72 65 64 20 6c 69 62 code (shared lib
4a30: 72 61 72 79 29 2e 20 54 68 69 73 20 76 65 72 73 rary). This vers
4a40: 69 6f 6e 20 6f 66 20 74 68 69 73 0a 3c 20 20 2a ion of this.< *
4a50: 09 72 6f 75 74 69 6e 65 20 73 68 6f 75 6c 64 20 .routine should
4a60: 6e 65 76 65 72 20 62 65 20 63 61 6c 6c 65 64 20 never be called
4a70: 62 65 63 61 75 73 65 20 74 68 65 20 61 73 73 6f because the asso
4a80: 63 69 61 74 65 64 20 54 63 6c 70 44 6c 6f 70 65 ciated TclpDlope
4a90: 6e 28 29 0a 3c 20 20 2a 09 66 75 6e 63 74 69 6f n().< *.functio
4aa0: 6e 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73 n always returns
4ab0: 20 61 6e 20 65 72 72 6f 72 2e 0a 3c 20 20 2a 0a an error..< *.
4ac0: 3c 20 20 2a 20 52 65 73 75 6c 74 73 3a 0a 3c 20 < * Results:.<
4ad0: 20 2a 09 52 65 74 75 72 6e 73 20 61 20 70 6f 69 *.Returns a poi
4ae0: 6e 74 65 72 20 74 6f 20 74 68 65 20 66 75 6e 63 nter to the func
4af0: 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 tion associated
4b00: 77 69 74 68 20 27 73 79 6d 62 6f 6c 27 20 69 66 with 'symbol' if
4b10: 20 69 74 20 69 73 0a 3c 20 20 2a 09 66 6f 75 6e it is.< *.foun
4b20: 64 2e 20 4f 74 68 65 72 77 69 73 65 20 72 65 74 d. Otherwise ret
4b30: 75 72 6e 73 20 4e 55 4c 4c 20 61 6e 64 20 6d 61 urns NULL and ma
4b40: 79 20 6c 65 61 76 65 20 61 6e 20 65 72 72 6f 72 y leave an error
4b50: 20 6d 65 73 73 61 67 65 20 69 6e 20 74 68 65 0a message in the.
4b60: 3c 20 20 2a 09 69 6e 74 65 72 70 27 73 20 72 65 < *.interp's re
4b70: 73 75 6c 74 2e 0a 3c 20 20 2a 0a 3c 20 20 2a 2d sult..< *.< *-
4b80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4b90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4ba0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4bb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4bc0: 2d 2d 2d 2d 2d 0a 3c 20 20 2a 2f 0a 3c 20 0a 3c -----.< */.< .<
4bd0: 20 54 63 6c 5f 50 61 63 6b 61 67 65 49 6e 69 74 Tcl_PackageInit
4be0: 50 72 6f 63 20 2a 0a 3c 20 54 63 6c 70 46 69 6e Proc *.< TclpFin
4bf0: 64 53 79 6d 62 6f 6c 28 0a 3c 20 20 20 20 20 54 dSymbol(.< T
4c00: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 cl_Interp *inter
4c10: 70 2c 0a 3c 20 20 20 20 20 54 63 6c 5f 4c 6f 61 p,.< Tcl_Loa
4c20: 64 48 61 6e 64 6c 65 20 6c 6f 61 64 48 61 6e 64 dHandle loadHand
4c30: 6c 65 2c 0a 3c 20 20 20 20 20 63 6f 6e 73 74 20 le,.< const
4c40: 63 68 61 72 20 2a 73 79 6d 62 6f 6c 29 0a 3c 20 char *symbol).<
4c50: 7b 0a 3c 20 20 20 20 20 72 65 74 75 72 6e 20 4e {.< return N
4c60: 55 4c 4c 3b 0a 3c 20 7d 0a 3c 20 0c 0a 3c 20 2f ULL;.< }.< ..< /
4c70: 2a 0a 3c 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *.< *----------
4c80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4c90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4ca0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4cb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 3c 20 20 ------------.<
4cc0: 2a 0a 31 31 33 2c 31 33 38 64 38 35 0a 3c 20 20 *.113,138d85.<
4cd0: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *---------------
4ce0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4cf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4d00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4d10: 2d 2d 2d 2d 2d 2d 2d 0a 3c 20 20 2a 0a 3c 20 20 -------.< *.<
4d20: 2a 20 54 63 6c 70 55 6e 6c 6f 61 64 46 69 6c 65 * TclpUnloadFile
4d30: 20 2d 2d 0a 3c 20 20 2a 0a 3c 20 20 2a 20 20 20 --.< *.< *
4d40: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 This procedure
4d50: 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 61 72 is called to car
4d60: 72 79 20 6f 75 74 20 64 79 6e 61 6d 69 63 20 75 ry out dynamic u
4d70: 6e 6c 6f 61 64 69 6e 67 20 6f 66 20 62 69 6e 61 nloading of bina
4d80: 72 79 20 63 6f 64 65 3b 0a 3c 20 20 2a 20 20 20 ry code;.< *
4d90: 20 69 74 20 69 73 20 69 6e 74 65 6e 64 65 64 20 it is intended
4da0: 66 6f 72 20 75 73 65 20 6f 6e 6c 79 20 6f 6e 20 for use only on
4db0: 73 79 73 74 65 6d 73 20 74 68 61 74 20 64 6f 6e systems that don
4dc0: 27 74 20 73 75 70 70 6f 72 74 20 64 79 6e 61 6d 't support dynam
4dd0: 69 63 0a 3c 20 20 2a 20 20 20 20 6c 6f 61 64 69 ic.< * loadi
4de0: 6e 67 20 28 69 74 20 64 6f 65 73 20 6e 6f 74 68 ng (it does noth
4df0: 69 6e 67 29 2e 0a 3c 20 20 2a 0a 3c 20 20 2a 20 ing)..< *.< *
4e00: 52 65 73 75 6c 74 73 3a 0a 3c 20 20 2a 20 20 20 Results:.< *
4e10: 20 4e 6f 6e 65 2e 0a 3c 20 20 2a 0a 3c 20 20 2a None..< *.< *
4e20: 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 3c Side effects:.<
4e30: 20 20 2a 20 20 20 20 4e 6f 6e 65 2e 0a 3c 20 20 * None..<
4e40: 2a 0a 3c 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *.< *----------
4e50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4e60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4e80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 3c 20 20 ------------.<
4e90: 2a 2f 0a 3c 20 0a 3c 20 76 6f 69 64 0a 3c 20 54 */.< .< void.< T
4ea0: 63 6c 70 55 6e 6c 6f 61 64 46 69 6c 65 28 0a 3c clpUnloadFile(.<
4eb0: 20 20 20 20 20 54 63 6c 5f 4c 6f 61 64 48 61 6e Tcl_LoadHan
4ec0: 64 6c 65 20 6c 6f 61 64 48 61 6e 64 6c 65 29 09 dle loadHandle).
4ed0: 2f 2a 20 6c 6f 61 64 48 61 6e 64 6c 65 20 72 65 /* loadHandle re
4ee0: 74 75 72 6e 65 64 20 62 79 20 61 20 70 72 65 76 turned by a prev
4ef0: 69 6f 75 73 20 63 61 6c 6c 20 74 6f 0a 3c 20 09 ious call to.< .
4f00: 09 09 09 20 2a 20 54 63 6c 70 44 6c 6f 70 65 6e ... * TclpDlopen
4f10: 28 29 2e 20 54 68 65 20 6c 6f 61 64 48 61 6e 64 (). The loadHand
4f20: 6c 65 20 69 73 20 61 20 74 6f 6b 65 6e 0a 3c 20 le is a token.<
4f30: 09 09 09 09 20 2a 20 74 68 61 74 20 72 65 70 72 .... * that repr
4f40: 65 73 65 6e 74 73 20 74 68 65 20 6c 6f 61 64 65 esents the loade
4f50: 64 20 66 69 6c 65 2e 20 2a 2f 0a 3c 20 7b 0a 3c d file. */.< {.<
4f60: 20 7d 0a 3c 20 0c 0a 3c 20 2f 2a 0a 49 6e 64 65 }.< ..< /*.Inde
4f70: 78 3a 20 67 65 6e 65 72 69 63 2f 74 63 6c 53 74 x: generic/tclSt
4f80: 75 62 49 6e 69 74 2e 63 0a 3d 3d 3d 3d 3d 3d 3d ubInit.c.=======
4f90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4fa0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4fb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4fc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 ============.RCS
4fd0: 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f file: /cvsroot/
4fe0: 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 63 2f tcl/tcl/generic/
4ff0: 74 63 6c 53 74 75 62 49 6e 69 74 2e 63 2c 76 0a tclStubInit.c,v.
5000: 72 65 74 72 69 65 76 69 6e 67 20 72 65 76 69 73 retrieving revis
5010: 69 6f 6e 20 31 2e 31 38 38 0a 64 69 66 66 20 2d ion 1.188.diff -
5020: 72 31 2e 31 38 38 20 74 63 6c 53 74 75 62 49 6e r1.188 tclStubIn
5030: 69 74 2e 63 0a 31 31 31 36 61 31 31 31 37 2c 31 it.c.1116a1117,1
5040: 31 31 39 0a 3e 20 20 20 20 20 54 63 6c 5f 4c 6f 119.> Tcl_Lo
5050: 61 64 46 69 6c 65 2c 20 2f 2a 20 36 32 37 20 2a adFile, /* 627 *
5060: 2f 0a 3e 20 20 20 20 20 54 63 6c 5f 46 69 6e 64 /.> Tcl_Find
5070: 53 79 6d 62 6f 6c 2c 20 2f 2a 20 36 32 38 20 2a Symbol, /* 628 *
5080: 2f 0a 3e 20 20 20 20 20 54 63 6c 5f 46 53 55 6e /.> Tcl_FSUn
5090: 6c 6f 61 64 46 69 6c 65 2c 20 2f 2a 20 36 32 39 loadFile, /* 629
50a0: 20 2a 2f 0a 49 6e 64 65 78 3a 20 74 65 73 74 73 */.Index: tests
50b0: 2f 66 69 6c 65 53 79 73 74 65 6d 2e 74 65 73 74 /fileSystem.test
50c0: 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .===============
50d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
50e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
50f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5100: 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f ====.RCS file: /
5110: 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f cvsroot/tcl/tcl/
5120: 74 65 73 74 73 2f 66 69 6c 65 53 79 73 74 65 6d tests/fileSystem
5130: 2e 74 65 73 74 2c 76 0a 72 65 74 72 69 65 76 69 .test,v.retrievi
5140: 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 35 39 ng revision 1.59
5150: 0a 64 69 66 66 20 2d 72 31 2e 35 39 20 66 69 6c .diff -r1.59 fil
5160: 65 53 79 73 74 65 6d 2e 74 65 73 74 0a 36 32 32 eSystem.test.622
5170: 63 36 32 32 0a 3c 20 74 65 73 74 20 66 69 6c 65 c622.< test file
5180: 73 79 73 74 65 6d 2d 37 2e 31 20 7b 6c 6f 61 64 system-7.1 {load
5190: 20 66 72 6f 6d 20 76 66 73 7d 20 2d 73 65 74 75 from vfs} -setu
51a0: 70 20 7b 0a 2d 2d 2d 0a 3e 20 74 65 73 74 20 66 p {.---.> test f
51b0: 69 6c 65 73 79 73 74 65 6d 2d 37 2e 31 2e 31 20 ilesystem-7.1.1
51c0: 7b 6c 6f 61 64 20 66 72 6f 6d 20 76 66 73 7d 20 {load from vfs}
51d0: 2d 73 65 74 75 70 20 7b 0a 36 33 36 61 36 33 37 -setup {.636a637
51e0: 2c 36 35 32 0a 3e 20 74 65 73 74 20 66 69 6c 65 ,652.> test file
51f0: 73 79 73 74 65 6d 2d 37 2e 31 2e 32 20 7b 6c 6f system-7.1.2 {lo
5200: 61 64 20 66 72 6f 6d 20 76 66 73 2c 20 61 6e 64 ad from vfs, and
5210: 20 74 68 65 6e 20 75 6e 6c 6f 61 64 20 61 67 61 then unload aga
5220: 69 6e 7d 20 2d 73 65 74 75 70 20 7b 0a 3e 20 20 in} -setup {.>
5230: 20 20 20 73 65 74 20 64 69 72 20 5b 70 77 64 5d set dir [pwd]
5240: 0a 3e 20 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 .> } -constraint
5250: 73 20 7b 77 69 6e 20 74 65 73 74 73 69 6d 70 6c s {win testsimpl
5260: 65 66 69 6c 65 73 79 73 74 65 6d 7d 20 2d 62 6f efilesystem} -bo
5270: 64 79 20 7b 0a 3e 20 20 20 20 20 23 20 54 68 69 dy {.> # Thi
5280: 73 20 6d 61 79 20 63 61 75 73 65 20 61 20 63 72 s may cause a cr
5290: 61 73 68 20 6f 6e 20 65 78 69 74 0a 3e 20 20 20 ash on exit.>
52a0: 20 20 63 64 20 5b 66 69 6c 65 20 64 69 72 6e 61 cd [file dirna
52b0: 6d 65 20 5b 69 6e 66 6f 20 6e 61 6d 65 6f 66 5d me [info nameof]
52c0: 5d 0a 3e 20 20 20 20 20 73 65 74 20 72 65 67 20 ].> set reg
52d0: 5b 6c 69 6e 64 65 78 20 5b 67 6c 6f 62 20 74 63 [lindex [glob tc
52e0: 6c 72 65 67 2a 5b 69 6e 66 6f 20 73 68 61 72 65 lreg*[info share
52f0: 64 6c 69 62 5d 5d 20 30 5d 0a 3e 20 20 20 20 20 dlib]] 0].>
5300: 74 65 73 74 73 69 6d 70 6c 65 66 69 6c 65 73 79 testsimplefilesy
5310: 73 74 65 6d 20 31 0a 3e 20 20 20 20 20 23 20 54 stem 1.> # T
5320: 68 69 73 20 6c 6f 61 64 73 20 72 65 67 20 76 69 his loads reg vi
5330: 61 20 61 20 63 6f 6d 70 6c 65 78 20 63 6f 70 79 a a complex copy
5340: 2d 74 6f 2d 74 65 6d 70 20 6f 70 65 72 61 74 69 -to-temp operati
5350: 6f 6e 0a 3e 20 20 20 20 20 6c 6f 61 64 20 73 69 on.> load si
5360: 6d 70 6c 65 66 73 3a 2f 24 72 65 67 20 52 65 67 mplefs:/$reg Reg
5370: 69 73 74 72 79 0a 3e 20 20 20 20 20 75 6e 6c 6f istry.> unlo
5380: 61 64 20 73 69 6d 70 6c 65 66 73 3a 2f 24 72 65 ad simplefs:/$re
5390: 67 0a 3e 20 20 20 20 20 74 65 73 74 73 69 6d 70 g.> testsimp
53a0: 6c 65 66 69 6c 65 73 79 73 74 65 6d 20 30 0a 3e lefilesystem 0.>
53b0: 20 20 20 20 20 72 65 74 75 72 6e 20 6f 6b 0a 3e return ok.>
53c0: 20 20 20 20 20 23 20 54 68 65 20 72 65 61 6c 20 # The real
53d0: 72 65 73 75 6c 74 20 6f 66 20 74 68 69 73 20 74 result of this t
53e0: 65 73 74 20 69 73 20 77 68 61 74 20 68 61 70 70 est is what happ
53f0: 65 6e 73 20 77 68 65 6e 20 54 63 6c 20 65 78 69 ens when Tcl exi
5400: 74 73 2e 0a 3e 20 7d 20 2d 63 6c 65 61 6e 75 70 ts..> } -cleanup
5410: 20 7b 0a 3e 20 20 20 20 20 63 64 20 24 64 69 72 {.> cd $dir
5420: 0a 3e 20 7d 20 2d 72 65 73 75 6c 74 20 6f 6b 0a .> } -result ok.
5430: 49 6e 64 65 78 3a 20 74 65 73 74 73 2f 6c 6f 61 Index: tests/loa
5440: 64 2e 74 65 73 74 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d d.test.=========
5450: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5460: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5470: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5480: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 ==========.RCS f
5490: 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 ile: /cvsroot/tc
54a0: 6c 2f 74 63 6c 2f 74 65 73 74 73 2f 6c 6f 61 64 l/tcl/tests/load
54b0: 2e 74 65 73 74 2c 76 0a 72 65 74 72 69 65 76 69 .test,v.retrievi
54c0: 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 32 30 ng revision 1.20
54d0: 0a 64 69 66 66 20 2d 72 31 2e 32 30 20 6c 6f 61 .diff -r1.20 loa
54e0: 64 2e 74 65 73 74 0a 38 30 2c 38 31 63 38 30 2c d.test.80,81c80,
54f0: 38 33 0a 3c 20 20 20 20 20 6c 69 73 74 20 5b 63 83.< list [c
5500: 61 74 63 68 20 7b 6c 6f 61 64 20 5b 66 69 6c 65 atch {load [file
5510: 20 6a 6f 69 6e 20 24 74 65 73 74 44 69 72 20 70 join $testDir p
5520: 6b 67 63 24 65 78 74 5d 20 66 6f 6f 7d 20 6d 73 kgc$ext] foo} ms
5530: 67 5d 20 24 6d 73 67 0a 3c 20 7d 20 2d 6d 61 74 g] $msg.< } -mat
5540: 63 68 20 67 6c 6f 62 20 2d 72 65 73 75 6c 74 20 ch glob -result
5550: 7b 31 20 7b 2a 63 6f 75 6c 64 6e 27 74 20 66 69 {1 {*couldn't fi
5560: 6e 64 20 70 72 6f 63 65 64 75 72 65 20 46 6f 6f nd procedure Foo
5570: 5f 49 6e 69 74 7d 7d 0a 2d 2d 2d 0a 3e 20 20 20 _Init}}.---.>
5580: 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20 7b 6c list [catch {l
5590: 6f 61 64 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 oad [file join $
55a0: 74 65 73 74 44 69 72 20 70 6b 67 63 24 65 78 74 testDir pkgc$ext
55b0: 5d 20 66 6f 6f 7d 20 6d 73 67 5d 20 24 6d 73 67 ] foo} msg] $msg
55c0: 20 24 65 72 72 6f 72 43 6f 64 65 0a 3e 20 7d 20 $errorCode.> }
55d0: 2d 6d 61 74 63 68 20 67 6c 6f 62 20 5c 0a 3e 20 -match glob \.>
55e0: 20 20 20 20 2d 72 65 73 75 6c 74 20 5b 6c 69 73 -result [lis
55f0: 74 20 31 20 7b 63 61 6e 6e 6f 74 20 66 69 6e 64 t 1 {cannot find
5600: 20 73 79 6d 62 6f 6c 20 22 46 6f 6f 5f 49 6e 69 symbol "Foo_Ini
5610: 74 22 2a 7d 20 5c 0a 3e 20 09 09 20 7b 54 43 4c t"*} \.> .. {TCL
5620: 20 4c 4f 4f 4b 55 50 20 4c 4f 41 44 5f 53 59 4d LOOKUP LOAD_SYM
5630: 42 4f 4c 20 2a 46 6f 6f 5f 49 6e 69 74 7d 5d 0a BOL *Foo_Init}].
5640: 49 6e 64 65 78 3a 20 74 65 73 74 73 2f 75 6e 6c Index: tests/unl
5650: 6f 61 64 2e 74 65 73 74 0a 3d 3d 3d 3d 3d 3d 3d oad.test.=======
5660: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5670: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5680: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5690: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 ============.RCS
56a0: 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f file: /cvsroot/
56b0: 74 63 6c 2f 74 63 6c 2f 74 65 73 74 73 2f 75 6e tcl/tcl/tests/un
56c0: 6c 6f 61 64 2e 74 65 73 74 2c 76 0a 72 65 74 72 load.test,v.retr
56d0: 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 ieving revision
56e0: 31 2e 38 0a 64 69 66 66 20 2d 72 31 2e 38 20 75 1.8.diff -r1.8 u
56f0: 6e 6c 6f 61 64 2e 74 65 73 74 0a 34 32 61 34 33 nload.test.42a43
5700: 2c 34 36 0a 3e 20 23 20 43 65 72 74 61 69 6e 20 ,46.> # Certain
5710: 74 65 73 74 73 20 6e 65 65 64 20 74 68 65 20 27 tests need the '
5720: 74 65 73 74 73 69 6d 70 6c 65 66 69 6c 73 79 73 testsimplefilsys
5730: 74 65 6d 27 20 69 6e 20 74 63 6c 74 65 73 74 0a tem' in tcltest.
5740: 3e 20 74 65 73 74 43 6f 6e 73 74 72 61 69 6e 74 > testConstraint
5750: 20 74 65 73 74 73 69 6d 70 6c 65 66 69 6c 65 73 testsimplefiles
5760: 79 73 74 65 6d 20 5c 0a 3e 20 09 5b 6c 6c 65 6e ystem \.> .[llen
5770: 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e gth [info comman
5780: 64 73 20 74 65 73 74 73 69 6d 70 6c 65 66 69 6c ds testsimplefil
5790: 65 73 79 73 74 65 6d 5d 5d 0a 3e 20 0a 32 31 35 esystem]].> .215
57a0: 61 32 32 30 2c 32 33 34 0a 3e 20 74 65 73 74 20 a220,234.> test
57b0: 75 6e 6c 6f 61 64 2d 35 2e 31 20 7b 75 6e 6c 6f unload-5.1 {unlo
57c0: 61 64 20 61 20 6d 6f 64 75 6c 65 20 6c 6f 61 64 ad a module load
57d0: 65 64 20 66 72 6f 6d 20 76 66 73 7d 20 5c 0a 3e ed from vfs} \.>
57e0: 20 20 20 20 20 20 2d 63 6f 6e 73 74 72 61 69 6e -constrain
57f0: 74 73 20 5b 6c 69 73 74 20 24 64 6c 6c 20 24 6c ts [list $dll $l
5800: 6f 61 64 65 64 20 74 65 73 74 73 69 6d 70 6c 65 oaded testsimple
5810: 66 69 6c 65 73 79 73 74 65 6d 5d 20 5c 0a 3e 20 filesystem] \.>
5820: 20 20 20 20 20 2d 73 65 74 75 70 20 7b 0a 3e 20 -setup {.>
5830: 09 20 73 65 74 20 64 69 72 20 5b 70 77 64 5d 0a . set dir [pwd].
5840: 3e 20 09 20 63 64 20 24 74 65 73 74 44 69 72 0a > . cd $testDir.
5850: 3e 20 09 20 74 65 73 74 73 69 6d 70 6c 65 66 69 > . testsimplefi
5860: 6c 65 73 79 73 74 65 6d 20 31 0a 3e 20 09 20 6c lesystem 1.> . l
5870: 6f 61 64 20 73 69 6d 70 6c 65 66 73 3a 2f 70 6b oad simplefs:/pk
5880: 67 75 61 24 65 78 74 20 70 6b 67 75 61 0a 3e 20 gua$ext pkgua.>
5890: 20 20 20 20 20 7d 20 5c 0a 3e 20 20 20 20 20 2d } \.> -
58a0: 62 6f 64 79 20 7b 0a 3e 20 09 6c 69 73 74 20 5b body {.> .list [
58b0: 63 61 74 63 68 20 7b 75 6e 6c 6f 61 64 20 73 69 catch {unload si
58c0: 6d 70 6c 65 66 73 3a 2f 70 6b 67 75 61 24 65 78 mplefs:/pkgua$ex
58d0: 74 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 3e 20 20 t} msg] $msg.>
58e0: 20 20 20 7d 20 5c 0a 3e 20 20 20 20 20 2d 72 65 } \.> -re
58f0: 73 75 6c 74 20 7b 30 20 7b 7d 7d 0a 3e 20 0a 3e sult {0 {}}.> .>
5900: 20 0a 3e 20 0a 32 32 31 61 32 34 31 2c 32 34 34 .> .221a241,244
5910: 0a 3e 20 0a 3e 20 23 20 4c 6f 63 61 6c 20 56 61 .> .> # Local Va
5920: 72 69 61 62 6c 65 73 3a 0a 3e 20 23 20 6d 6f 64 riables:.> # mod
5930: 65 3a 20 74 63 6c 0a 3e 20 23 20 45 6e 64 3a 0a e: tcl.> # End:.
5940: 49 6e 64 65 78 3a 20 75 6e 69 78 2f 74 63 6c 4c Index: unix/tclL
5950: 6f 61 64 44 6c 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d oadDl.c.========
5960: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5970: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5980: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5990: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 ===========.RCS
59a0: 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 file: /cvsroot/t
59b0: 63 6c 2f 74 63 6c 2f 75 6e 69 78 2f 74 63 6c 4c cl/tcl/unix/tclL
59c0: 6f 61 64 44 6c 2e 63 2c 76 0a 72 65 74 72 69 65 oadDl.c,v.retrie
59d0: 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e ving revision 1.
59e0: 31 39 0a 64 69 66 66 20 2d 72 31 2e 31 39 20 74 19.diff -r1.19 t
59f0: 63 6c 4c 6f 61 64 44 6c 2e 63 0a 33 36 61 33 37 clLoadDl.c.36a37
5a00: 2c 34 32 0a 3e 20 2f 2a 20 53 74 61 74 69 63 20 ,42.> /* Static
5a10: 70 72 6f 63 65 64 75 72 65 73 20 64 65 66 69 6e procedures defin
5a20: 65 64 20 77 69 74 68 69 6e 20 74 68 69 73 20 66 ed within this f
5a30: 69 6c 65 20 2a 2f 0a 3e 20 0a 3e 20 73 74 61 74 ile */.> .> stat
5a40: 69 63 20 76 6f 69 64 2a 20 46 69 6e 64 53 79 6d ic void* FindSym
5a50: 62 6f 6c 28 54 63 6c 5f 49 6e 74 65 72 70 2a 20 bol(Tcl_Interp*
5a60: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4c 6f 61 64 interp, Tcl_Load
5a70: 48 61 6e 64 6c 65 20 6c 6f 61 64 48 61 6e 64 6c Handle loadHandl
5a80: 65 2c 0a 3e 20 09 09 09 63 6f 6e 73 74 20 63 68 e,.> ...const ch
5a90: 61 72 2a 20 73 79 6d 62 6f 6c 29 3b 0a 3e 20 73 ar* symbol);.> s
5aa0: 74 61 74 69 63 20 76 6f 69 64 20 55 6e 6c 6f 61 tatic void Unloa
5ab0: 64 46 69 6c 65 28 54 63 6c 5f 4c 6f 61 64 48 61 dFile(Tcl_LoadHa
5ac0: 6e 64 6c 65 20 6c 6f 61 64 48 61 6e 64 6c 65 29 ndle loadHandle)
5ad0: 3b 0a 3e 20 0c 0a 36 38 61 37 35 0a 3e 20 20 20 ;.> ..68a75.>
5ae0: 20 20 54 63 6c 5f 4c 6f 61 64 48 61 6e 64 6c 65 Tcl_LoadHandle
5af0: 20 6e 65 77 48 61 6e 64 6c 65 3b 0a 31 30 35 61 newHandle;.105a
5b00: 31 31 33 2c 31 31 38 0a 3e 20 20 20 20 20 6e 65 113,118.> ne
5b10: 77 48 61 6e 64 6c 65 20 3d 20 28 54 63 6c 5f 4c wHandle = (Tcl_L
5b20: 6f 61 64 48 61 6e 64 6c 65 29 20 63 6b 61 6c 6c oadHandle) ckall
5b30: 6f 63 28 73 69 7a 65 6f 66 28 2a 6e 65 77 48 61 oc(sizeof(*newHa
5b40: 6e 64 6c 65 29 29 3b 0a 3e 20 20 20 20 20 6e 65 ndle));.> ne
5b50: 77 48 61 6e 64 6c 65 2d 3e 63 6c 69 65 6e 74 44 wHandle->clientD
5b60: 61 74 61 20 3d 20 28 43 6c 69 65 6e 74 44 61 74 ata = (ClientDat
5b70: 61 29 20 68 61 6e 64 6c 65 3b 0a 3e 20 20 20 20 a) handle;.>
5b80: 20 6e 65 77 48 61 6e 64 6c 65 2d 3e 66 69 6e 64 newHandle->find
5b90: 53 79 6d 62 6f 6c 50 72 6f 63 50 74 72 20 3d 20 SymbolProcPtr =
5ba0: 26 46 69 6e 64 53 79 6d 62 6f 6c 3b 0a 3e 20 20 &FindSymbol;.>
5bb0: 20 20 20 6e 65 77 48 61 6e 64 6c 65 2d 3e 75 6e newHandle->un
5bc0: 6c 6f 61 64 46 69 6c 65 50 72 6f 63 50 74 72 20 loadFileProcPtr
5bd0: 3d 20 26 55 6e 6c 6f 61 64 46 69 6c 65 3b 0a 3e = &UnloadFile;.>
5be0: 20 20 20 20 20 2a 75 6e 6c 6f 61 64 50 72 6f 63 *unloadProc
5bf0: 50 74 72 20 3d 20 26 55 6e 6c 6f 61 64 46 69 6c Ptr = &UnloadFil
5c00: 65 3b 0a 3e 20 20 20 20 20 2a 6c 6f 61 64 48 61 e;.> *loadHa
5c10: 6e 64 6c 65 20 3d 20 6e 65 77 48 61 6e 64 6c 65 ndle = newHandle
5c20: 3b 0a 31 30 37 2c 31 30 38 64 31 31 39 0a 3c 20 ;.107,108d119.<
5c30: 20 20 20 20 2a 75 6e 6c 6f 61 64 50 72 6f 63 50 *unloadProcP
5c40: 74 72 20 3d 20 26 54 63 6c 70 55 6e 6c 6f 61 64 tr = &TclpUnload
5c50: 46 69 6c 65 3b 0a 3c 20 20 20 20 20 2a 6c 6f 61 File;.< *loa
5c60: 64 48 61 6e 64 6c 65 20 3d 20 28 54 63 6c 5f 4c dHandle = (Tcl_L
5c70: 6f 61 64 48 61 6e 64 6c 65 29 20 68 61 6e 64 6c oadHandle) handl
5c80: 65 3b 0a 31 31 35 63 31 32 36 0a 3c 20 20 2a 20 e;.115c126.< *
5c90: 54 63 6c 70 46 69 6e 64 53 79 6d 62 6f 6c 20 2d TclpFindSymbol -
5ca0: 2d 0a 2d 2d 2d 0a 3e 20 20 2a 20 46 69 6e 64 53 -.---.> * FindS
5cb0: 79 6d 62 6f 6c 20 2d 2d 0a 31 32 38 2c 31 32 39 ymbol --.128,129
5cc0: 63 31 33 39 2c 31 34 30 0a 3c 20 54 63 6c 5f 50 c139,140.< Tcl_P
5cd0: 61 63 6b 61 67 65 49 6e 69 74 50 72 6f 63 20 2a ackageInitProc *
5ce0: 0a 3c 20 54 63 6c 70 46 69 6e 64 53 79 6d 62 6f .< TclpFindSymbo
5cf0: 6c 28 0a 2d 2d 2d 0a 3e 20 73 74 61 74 69 63 20 l(.---.> static
5d00: 76 6f 69 64 20 2a 0a 3e 20 46 69 6e 64 53 79 6d void *.> FindSym
5d10: 62 6f 6c 28 0a 31 33 36 63 31 34 37 0a 3c 20 20 bol(.136c147.<
5d20: 20 20 20 76 6f 69 64 20 2a 68 61 6e 64 6c 65 20 void *handle
5d30: 3d 20 28 76 6f 69 64 20 2a 29 20 6c 6f 61 64 48 = (void *) loadH
5d40: 61 6e 64 6c 65 3b 0a 2d 2d 2d 0a 3e 20 20 20 20 andle;.---.>
5d50: 20 76 6f 69 64 20 2a 68 61 6e 64 6c 65 20 3d 20 void *handle =
5d60: 28 76 6f 69 64 20 2a 29 28 6c 6f 61 64 48 61 6e (void *)(loadHan
5d70: 64 6c 65 2d 3e 63 6c 69 65 6e 74 44 61 74 61 29 dle->clientData)
5d80: 3b 0a 31 35 37 63 31 36 38 2c 31 37 34 0a 3c 20 ;.157c168,174.<
5d90: 0a 2d 2d 2d 0a 3e 20 20 20 20 20 69 66 20 28 70 .---.> if (p
5da0: 72 6f 63 20 3d 3d 20 4e 55 4c 4c 20 26 26 20 69 roc == NULL && i
5db0: 6e 74 65 72 70 20 21 3d 20 4e 55 4c 4c 29 20 7b nterp != NULL) {
5dc0: 0a 3e 20 09 54 63 6c 5f 52 65 73 65 74 52 65 73 .> .Tcl_ResetRes
5dd0: 75 6c 74 28 69 6e 74 65 72 70 29 3b 0a 3e 20 09 ult(interp);.> .
5de0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 Tcl_AppendResult
5df0: 28 69 6e 74 65 72 70 2c 20 22 63 61 6e 6e 6f 74 (interp, "cannot
5e00: 20 66 69 6e 64 20 73 79 6d 62 6f 6c 20 5c 22 22 find symbol \""
5e10: 2c 20 73 79 6d 62 6f 6c 2c 20 22 5c 22 3a 20 22 , symbol, "\": "
5e20: 2c 0a 3e 20 09 09 09 20 64 6c 65 72 72 6f 72 28 ,.> ... dlerror(
5e30: 29 2c 20 4e 55 4c 4c 29 3b 0a 3e 20 09 54 63 6c ), NULL);.> .Tcl
5e40: 5f 53 65 74 45 72 72 6f 72 43 6f 64 65 28 69 6e _SetErrorCode(in
5e50: 74 65 72 70 2c 20 22 54 43 4c 22 2c 20 22 4c 4f terp, "TCL", "LO
5e60: 4f 4b 55 50 22 2c 20 22 4c 4f 41 44 5f 53 59 4d OKUP", "LOAD_SYM
5e70: 42 4f 4c 22 2c 20 73 79 6d 62 6f 6c 2c 0a 3e 20 BOL", symbol,.>
5e80: 09 09 09 20 4e 55 4c 4c 29 3b 0a 3e 20 20 20 20 ... NULL);.>
5e90: 20 7d 0a 31 36 34 63 31 38 31 0a 3c 20 20 2a 20 }.164c181.< *
5ea0: 54 63 6c 70 55 6e 6c 6f 61 64 46 69 6c 65 20 2d TclpUnloadFile -
5eb0: 2d 0a 2d 2d 2d 0a 3e 20 20 2a 20 55 6e 6c 6f 61 -.---.> * Unloa
5ec0: 64 46 69 6c 65 20 2d 2d 0a 31 37 39 2c 31 38 30 dFile --.179,180
5ed0: 63 31 39 36 2c 31 39 37 0a 3c 20 76 6f 69 64 0a c196,197.< void.
5ee0: 3c 20 54 63 6c 70 55 6e 6c 6f 61 64 46 69 6c 65 < TclpUnloadFile
5ef0: 28 0a 2d 2d 2d 0a 3e 20 73 74 61 74 69 63 20 76 (.---.> static v
5f00: 6f 69 64 0a 3e 20 55 6e 6c 6f 61 64 46 69 6c 65 oid.> UnloadFile
5f10: 28 0a 31 38 37 63 32 30 34 0a 3c 20 20 20 20 20 (.187c204.<
5f20: 68 61 6e 64 6c 65 20 3d 20 28 76 6f 69 64 20 2a handle = (void *
5f30: 29 20 6c 6f 61 64 48 61 6e 64 6c 65 3b 0a 2d 2d ) loadHandle;.--
5f40: 2d 0a 3e 20 20 20 20 20 68 61 6e 64 6c 65 20 3d -.> handle =
5f50: 20 28 76 6f 69 64 20 2a 29 28 6c 6f 61 64 48 61 (void *)(loadHa
5f60: 6e 64 6c 65 2d 3e 63 6c 69 65 6e 74 44 61 74 61 ndle->clientData
5f70: 29 3b 0a 31 38 38 61 32 30 36 0a 3e 20 20 20 20 );.188a206.>
5f80: 20 63 6b 66 72 65 65 28 28 63 68 61 72 2a 29 6c ckfree((char*)l
5f90: 6f 61 64 48 61 6e 64 6c 65 29 3b 0a 49 6e 64 65 oadHandle);.Inde
5fa0: 78 3a 20 75 6e 69 78 2f 74 63 6c 4c 6f 61 64 44 x: unix/tclLoadD
5fb0: 79 6c 64 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d yld.c.==========
5fc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5fd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5fe0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5ff0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 =========.RCS fi
6000: 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c le: /cvsroot/tcl
6010: 2f 74 63 6c 2f 75 6e 69 78 2f 74 63 6c 4c 6f 61 /tcl/unix/tclLoa
6020: 64 44 79 6c 64 2e 63 2c 76 0a 72 65 74 72 69 65 dDyld.c,v.retrie
6030: 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e ving revision 1.
6040: 33 34 0a 64 69 66 66 20 2d 72 31 2e 33 34 20 74 34.diff -r1.34 t
6050: 63 6c 4c 6f 61 64 44 79 6c 64 2e 63 0a 39 36 61 clLoadDyld.c.96a
6060: 39 37 2c 31 30 34 0a 3e 20 2f 2a 20 53 74 61 74 97,104.> /* Stat
6070: 69 63 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 66 ic functions def
6080: 69 6e 65 64 20 69 6e 20 74 68 69 73 20 66 69 6c ined in this fil
6090: 65 20 2a 2f 0a 3e 20 0a 3e 20 73 74 61 74 69 63 e */.> .> static
60a0: 20 76 6f 69 64 2a 20 46 69 6e 64 53 79 6d 62 6f void* FindSymbo
60b0: 6c 28 54 63 6c 5f 49 6e 74 65 72 70 2a 20 69 6e l(Tcl_Interp* in
60c0: 74 65 72 70 2c 20 54 63 6c 5f 4c 6f 61 64 48 61 terp, Tcl_LoadHa
60d0: 6e 64 6c 65 20 6c 6f 61 64 48 61 6e 64 6c 65 2c ndle loadHandle,
60e0: 0a 3e 20 09 09 09 63 6f 6e 73 74 20 63 68 61 72 .> ...const char
60f0: 2a 20 73 79 6d 62 6f 6c 29 3b 0a 3e 20 73 74 61 * symbol);.> sta
6100: 74 69 63 20 76 6f 69 64 20 55 6e 6c 6f 61 64 46 tic void UnloadF
6110: 69 6c 65 28 54 63 6c 5f 4c 6f 61 64 48 61 6e 64 ile(Tcl_LoadHand
6120: 6c 65 20 68 61 6e 64 6c 65 29 3b 0a 3e 20 0a 3e le handle);.> .>
6130: 20 0a 3e 20 0c 0a 31 36 39 61 31 37 38 0a 3e 20 .> ..169a178.>
6140: 20 20 20 20 54 63 6c 5f 4c 6f 61 64 48 61 6e 64 Tcl_LoadHand
6150: 6c 65 2a 20 6e 65 77 48 61 6e 64 6c 65 3b 0a 33 le* newHandle;.3
6160: 31 30 2c 33 31 31 63 33 31 39 2c 33 32 34 0a 3c 10,311c319,324.<
6170: 20 09 2a 6c 6f 61 64 48 61 6e 64 6c 65 20 3d 20 .*loadHandle =
6180: 28 54 63 6c 5f 4c 6f 61 64 48 61 6e 64 6c 65 29 (Tcl_LoadHandle)
6190: 20 64 79 6c 64 4c 6f 61 64 48 61 6e 64 6c 65 3b dyldLoadHandle;
61a0: 0a 3c 20 09 2a 75 6e 6c 6f 61 64 50 72 6f 63 50 .< .*unloadProcP
61b0: 74 72 20 3d 20 26 54 63 6c 70 55 6e 6c 6f 61 64 tr = &TclpUnload
61c0: 46 69 6c 65 3b 0a 2d 2d 2d 0a 3e 20 09 6e 65 77 File;.---.> .new
61d0: 48 61 6e 64 6c 65 20 3d 20 28 54 63 6c 5f 4c 6f Handle = (Tcl_Lo
61e0: 61 64 48 61 6e 64 6c 65 29 20 63 6b 61 6c 6c 6f adHandle) ckallo
61f0: 63 28 73 69 7a 65 6f 66 28 2a 6e 65 77 48 61 6e c(sizeof(*newHan
6200: 64 6c 65 29 29 3b 0a 3e 20 09 6e 65 77 48 61 6e dle));.> .newHan
6210: 64 6c 65 2d 3e 63 6c 69 65 6e 74 44 61 74 61 20 dle->clientData
6220: 3d 20 64 79 6c 64 4c 6f 61 64 48 61 6e 64 6c 65 = dyldLoadHandle
6230: 3b 0a 3e 20 09 6e 65 77 48 61 6e 64 6c 65 2d 3e ;.> .newHandle->
6240: 66 69 6e 64 53 79 6d 62 6f 6c 50 72 6f 63 50 74 findSymbolProcPt
6250: 72 20 3d 20 26 46 69 6e 64 53 79 6d 62 6f 6c 3b r = &FindSymbol;
6260: 0a 3e 20 09 6e 65 77 48 61 6e 64 6c 65 2d 3e 75 .> .newHandle->u
6270: 6e 6c 6f 61 64 50 72 6f 63 50 74 72 20 3d 20 26 nloadProcPtr = &
6280: 55 6e 6c 6f 61 64 46 69 6c 65 3b 0a 3e 20 09 2a UnloadFile;.> .*
6290: 75 6e 6c 6f 61 64 50 72 6f 63 50 74 72 20 3d 20 unloadProcPtr =
62a0: 26 55 6e 6c 6f 61 64 46 69 6c 65 3b 0a 3e 20 09 &UnloadFile;.> .
62b0: 2a 6c 6f 61 64 48 61 6e 64 6c 65 20 3d 20 6e 65 *loadHandle = ne
62c0: 77 48 61 6e 64 6c 65 3b 0a 33 33 32 63 33 34 35 wHandle;.332c345
62d0: 0a 3c 20 20 2a 20 54 63 6c 70 46 69 6e 64 53 79 .< * TclpFindSy
62e0: 6d 62 6f 6c 20 2d 2d 0a 2d 2d 2d 0a 3e 20 20 2a mbol --.---.> *
62f0: 20 46 69 6e 64 53 79 6d 62 6f 6c 20 2d 2d 0a 33 FindSymbol --.3
6300: 34 35 2c 33 34 36 63 33 35 38 2c 33 35 39 0a 3c 45,346c358,359.<
6310: 20 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 20 54 63 MODULE_SCOPE Tc
6320: 6c 5f 50 61 63 6b 61 67 65 49 6e 69 74 50 72 6f l_PackageInitPro
6330: 63 20 2a 0a 3c 20 54 63 6c 70 46 69 6e 64 53 79 c *.< TclpFindSy
6340: 6d 62 6f 6c 28 0a 2d 2d 2d 0a 3e 20 73 74 61 74 mbol(.---.> stat
6350: 69 63 20 76 6f 69 64 2a 0a 3e 20 46 69 6e 64 53 ic void*.> FindS
6360: 79 6d 62 6f 6c 28 0a 33 35 31 63 33 36 34 2c 33 ymbol(.351c364,3
6370: 36 35 0a 3c 20 20 20 20 20 54 63 6c 5f 44 79 6c 65.< Tcl_Dyl
6380: 64 4c 6f 61 64 48 61 6e 64 6c 65 20 2a 64 79 6c dLoadHandle *dyl
6390: 64 4c 6f 61 64 48 61 6e 64 6c 65 20 3d 20 28 54 dLoadHandle = (T
63a0: 63 6c 5f 44 79 6c 64 4c 6f 61 64 48 61 6e 64 6c cl_DyldLoadHandl
63b0: 65 20 2a 29 20 6c 6f 61 64 48 61 6e 64 6c 65 3b e *) loadHandle;
63c0: 0a 2d 2d 2d 0a 3e 20 20 20 20 20 54 63 6c 5f 44 .---.> Tcl_D
63d0: 79 6c 64 4c 6f 61 64 48 61 6e 64 6c 65 20 2a 64 yldLoadHandle *d
63e0: 79 6c 64 4c 6f 61 64 48 61 6e 64 6c 65 20 3d 0a yldLoadHandle =.
63f0: 3e 20 09 28 54 63 6c 5f 44 79 6c 64 4c 6f 61 64 > .(Tcl_DyldLoad
6400: 48 61 6e 64 6c 65 20 2a 29 20 28 6c 6f 61 64 48 Handle *) (loadH
6410: 61 6e 64 6c 65 2d 3e 63 6c 69 65 6e 74 44 61 74 andle->clientDat
6420: 61 29 3b 0a 34 33 39 63 34 35 33 0a 3c 20 20 20 a);.439c453.<
6430: 20 20 69 66 20 28 65 72 72 4d 73 67 29 20 7b 0a if (errMsg) {.
6440: 2d 2d 2d 0a 3e 20 20 20 20 20 69 66 20 28 65 72 ---.> if (er
6450: 72 4d 73 67 20 26 26 20 28 69 6e 74 65 72 70 20 rMsg && (interp
6460: 21 3d 20 4e 55 4c 4c 29 29 20 7b 0a 34 34 30 61 != NULL)) {.440a
6470: 34 35 35 0a 3e 20 09 54 63 6c 5f 53 65 74 45 72 455.> .Tcl_SetEr
6480: 72 6f 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 rorCode(interp,
6490: 22 54 43 4c 22 2c 20 22 4c 4f 4f 4b 55 50 22 2c "TCL", "LOOKUP",
64a0: 20 22 4c 4f 41 44 5f 53 59 4d 42 4f 4c 22 2c 20 "LOAD_SYMBOL",
64b0: 73 79 6d 62 6f 6c 2c 20 4e 55 4c 4c 29 3b 0a 34 symbol, NULL);.4
64c0: 34 38 63 34 36 33 0a 3c 20 20 2a 20 54 63 6c 70 48c463.< * Tclp
64d0: 55 6e 6c 6f 61 64 46 69 6c 65 20 2d 2d 0a 2d 2d UnloadFile --.--
64e0: 2d 0a 3e 20 20 2a 20 55 6e 6c 6f 61 64 46 69 6c -.> * UnloadFil
64f0: 65 20 2d 2d 0a 34 36 35 2c 34 36 36 63 34 38 30 e --.465,466c480
6500: 2c 34 38 31 0a 3c 20 4d 4f 44 55 4c 45 5f 53 43 ,481.< MODULE_SC
6510: 4f 50 45 20 76 6f 69 64 0a 3c 20 54 63 6c 70 55 OPE void.< TclpU
6520: 6e 6c 6f 61 64 46 69 6c 65 28 0a 2d 2d 2d 0a 3e nloadFile(.---.>
6530: 20 73 74 61 74 69 63 20 76 6f 69 64 0a 3e 20 55 static void.> U
6540: 6e 6c 6f 61 64 46 69 6c 65 28 0a 34 37 31 63 34 nloadFile(.471c4
6550: 38 36 2c 34 38 37 0a 3c 20 20 20 20 20 54 63 6c 86,487.< Tcl
6560: 5f 44 79 6c 64 4c 6f 61 64 48 61 6e 64 6c 65 20 _DyldLoadHandle
6570: 2a 64 79 6c 64 4c 6f 61 64 48 61 6e 64 6c 65 20 *dyldLoadHandle
6580: 3d 20 28 54 63 6c 5f 44 79 6c 64 4c 6f 61 64 48 = (Tcl_DyldLoadH
6590: 61 6e 64 6c 65 20 2a 29 20 6c 6f 61 64 48 61 6e andle *) loadHan
65a0: 64 6c 65 3b 0a 2d 2d 2d 0a 3e 20 20 20 20 20 54 dle;.---.> T
65b0: 63 6c 5f 44 79 6c 64 4c 6f 61 64 48 61 6e 64 6c cl_DyldLoadHandl
65c0: 65 20 2a 64 79 6c 64 4c 6f 61 64 48 61 6e 64 6c e *dyldLoadHandl
65d0: 65 20 3d 20 0a 3e 20 09 28 54 63 6c 5f 44 79 6c e = .> .(Tcl_Dyl
65e0: 64 4c 6f 61 64 48 61 6e 64 6c 65 20 2a 29 20 28 dLoadHandle *) (
65f0: 6c 6f 61 64 48 61 6e 64 6c 65 2d 3e 63 6c 69 65 loadHandle->clie
6600: 6e 74 44 61 74 61 29 3b 0a 35 30 36 61 35 32 33 ntData);.506a523
6610: 0a 3e 20 20 20 20 20 63 6b 66 72 65 65 28 28 63 .> ckfree((c
6620: 68 61 72 2a 29 20 6c 6f 61 64 48 61 6e 64 6c 65 har*) loadHandle
6630: 29 3b 0a 36 31 35 61 36 33 33 0a 3e 20 20 20 20 );.615a633.>
6640: 20 54 63 6c 5f 4c 6f 61 64 48 61 6e 64 6c 65 20 Tcl_LoadHandle
6650: 6e 65 77 48 61 6e 64 6c 65 3b 0a 37 36 30 2c 37 newHandle;.760,7
6660: 36 31 63 37 37 38 2c 37 38 33 0a 3c 20 20 20 20 61c778,783.<
6670: 20 2a 6c 6f 61 64 48 61 6e 64 6c 65 20 3d 20 28 *loadHandle = (
6680: 54 63 6c 5f 4c 6f 61 64 48 61 6e 64 6c 65 29 20 Tcl_LoadHandle)
6690: 64 79 6c 64 4c 6f 61 64 48 61 6e 64 6c 65 3b 0a dyldLoadHandle;.
66a0: 3c 20 20 20 20 20 2a 75 6e 6c 6f 61 64 50 72 6f < *unloadPro
66b0: 63 50 74 72 20 3d 20 26 54 63 6c 70 55 6e 6c 6f cPtr = &TclpUnlo
66c0: 61 64 46 69 6c 65 3b 0a 2d 2d 2d 0a 3e 20 20 20 adFile;.---.>
66d0: 20 20 6e 65 77 48 61 6e 64 6c 65 20 3d 20 28 54 newHandle = (T
66e0: 63 6c 5f 4c 6f 61 64 48 61 6e 64 6c 65 29 20 63 cl_LoadHandle) c
66f0: 6b 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 6e kalloc(sizeof(*n
6700: 65 77 48 61 6e 64 6c 65 29 29 3b 0a 3e 20 20 20 ewHandle));.>
6710: 20 20 6e 65 77 48 61 6e 64 6c 65 2d 3e 63 6c 69 newHandle->cli
6720: 65 6e 74 44 61 74 61 20 3d 20 64 79 6c 64 4c 6f entData = dyldLo
6730: 61 64 48 61 6e 64 6c 65 3b 0a 3e 20 20 20 20 20 adHandle;.>
6740: 6e 65 77 48 61 6e 64 6c 65 2d 3e 66 69 6e 64 53 newHandle->findS
6750: 79 6d 62 6f 6c 50 72 6f 63 50 74 72 20 3d 20 26 ymbolProcPtr = &
6760: 46 69 6e 64 53 79 6d 62 6f 6c 3b 0a 3e 20 20 20 FindSymbol;.>
6770: 20 20 6e 65 77 48 61 6e 64 6c 65 2d 3e 75 6e 6c newHandle->unl
6780: 6f 61 64 46 69 6c 65 50 72 6f 63 50 74 72 20 3d oadFileProcPtr =
6790: 20 26 55 6e 6c 6f 61 64 46 69 6c 65 3b 0a 3e 20 &UnloadFile;.>
67a0: 20 20 20 20 2a 6c 6f 61 64 48 61 6e 64 6c 65 20 *loadHandle
67b0: 3d 20 6e 65 77 48 61 6e 64 6c 65 3b 0a 3e 20 20 = newHandle;.>
67c0: 20 20 20 2a 75 6e 6c 6f 61 64 50 72 6f 63 50 74 *unloadProcPt
67d0: 72 20 3d 20 26 55 6e 6c 6f 61 64 46 69 6c 65 3b r = &UnloadFile;
67e0: 0a 49 6e 64 65 78 3a 20 75 6e 69 78 2f 74 63 6c .Index: unix/tcl
67f0: 4c 6f 61 64 4e 65 78 74 2e 63 0a 3d 3d 3d 3d 3d LoadNext.c.=====
6800: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6810: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6820: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6830: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 ==============.R
6840: 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f CS file: /cvsroo
6850: 74 2f 74 63 6c 2f 74 63 6c 2f 75 6e 69 78 2f 74 t/tcl/tcl/unix/t
6860: 63 6c 4c 6f 61 64 4e 65 78 74 2e 63 2c 76 0a 72 clLoadNext.c,v.r
6870: 65 74 72 69 65 76 69 6e 67 20 72 65 76 69 73 69 etrieving revisi
6880: 6f 6e 20 31 2e 31 36 0a 64 69 66 66 20 2d 72 31 on 1.16.diff -r1
6890: 2e 31 36 20 74 63 6c 4c 6f 61 64 4e 65 78 74 2e .16 tclLoadNext.
68a0: 63 0a 31 37 61 31 38 2c 32 34 0a 3e 20 0a 3e 20 c.17a18,24.> .>
68b0: 2f 2a 20 53 74 61 74 69 63 20 70 72 6f 63 65 64 /* Static proced
68c0: 75 72 65 73 20 64 65 66 69 6e 65 64 20 77 69 74 ures defined wit
68d0: 68 69 6e 20 74 68 69 73 20 66 69 6c 65 20 2a 2f hin this file */
68e0: 0a 3e 20 0a 3e 20 73 74 61 74 69 63 20 76 6f 69 .> .> static voi
68f0: 64 2a 20 46 69 6e 64 53 79 6d 62 6f 6c 28 54 63 d* FindSymbol(Tc
6900: 6c 5f 49 6e 74 65 72 70 2a 20 69 6e 74 65 72 70 l_Interp* interp
6910: 2c 20 54 63 6c 5f 4c 6f 61 64 48 61 6e 64 6c 65 , Tcl_LoadHandle
6920: 20 6c 6f 61 64 48 61 6e 64 6c 65 2c 0a 3e 20 09 loadHandle,.> .
6930: 09 09 63 6f 6e 73 74 20 63 68 61 72 2a 20 73 79 ..const char* sy
6940: 6d 62 6f 6c 29 3b 0a 3e 20 73 74 61 74 69 63 20 mbol);.> static
6950: 76 6f 69 64 20 55 6e 6c 6f 61 64 46 69 6c 65 28 void UnloadFile(
6960: 54 63 6c 5f 4c 6f 61 64 48 61 6e 64 6c 65 20 6c Tcl_LoadHandle l
6970: 6f 61 64 48 61 6e 64 6c 65 29 3b 0a 3e 20 0a 34 oadHandle);.> .4
6980: 39 61 35 37 0a 3e 20 20 20 20 20 54 63 6c 5f 4c 9a57.> Tcl_L
6990: 6f 61 64 48 61 6e 64 6c 65 20 6e 65 77 48 61 6e oadHandle newHan
69a0: 64 6c 65 3b 0a 39 38 2c 39 39 63 31 30 36 2c 31 dle;.98,99c106,1
69b0: 31 31 0a 3c 20 20 20 20 20 2a 6c 6f 61 64 48 61 11.< *loadHa
69c0: 6e 64 6c 65 20 3d 20 28 54 63 6c 5f 4c 6f 61 64 ndle = (Tcl_Load
69d0: 48 61 6e 64 6c 65 29 31 3b 20 2f 2a 20 41 20 64 Handle)1; /* A d
69e0: 75 6d 6d 79 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 ummy non-NULL va
69f0: 6c 75 65 20 2a 2f 0a 3c 20 20 20 20 20 2a 75 6e lue */.< *un
6a00: 6c 6f 61 64 50 72 6f 63 50 74 72 20 3d 20 26 54 loadProcPtr = &T
6a10: 63 6c 70 55 6e 6c 6f 61 64 46 69 6c 65 3b 0a 2d clpUnloadFile;.-
6a20: 2d 2d 0a 3e 20 20 20 20 20 6e 65 77 48 61 6e 64 --.> newHand
6a30: 6c 65 20 3d 20 28 54 63 6c 5f 4c 6f 61 64 48 61 le = (Tcl_LoadHa
6a40: 6e 64 6c 65 29 20 63 6b 61 6c 6c 6f 63 28 73 69 ndle) ckalloc(si
6a50: 7a 65 6f 66 28 2a 6e 65 77 48 61 6e 64 6c 65 29 zeof(*newHandle)
6a60: 29 3b 0a 3e 20 20 20 20 20 6e 65 77 48 61 6e 64 );.> newHand
6a70: 6c 65 2d 3e 63 6c 69 65 6e 74 44 61 74 61 20 3d le->clientData =
6a80: 20 28 43 6c 69 65 6e 74 44 61 74 61 29 20 31 3b (ClientData) 1;
6a90: 0a 3e 20 20 20 20 20 6e 65 77 48 61 6e 64 6c 65 .> newHandle
6aa0: 2d 3e 66 69 6e 64 53 79 6d 62 6f 6c 50 72 6f 63 ->findSymbolProc
6ab0: 50 74 72 20 3d 20 26 46 69 6e 64 53 79 6d 62 6f Ptr = &FindSymbo
6ac0: 6c 3b 0a 3e 20 20 20 20 20 6e 65 77 48 61 6e 64 l;.> newHand
6ad0: 6c 65 2d 3e 75 6e 6c 6f 61 64 46 69 6c 65 50 72 le->unloadFilePr
6ae0: 6f 63 50 74 72 20 3d 20 26 55 6e 6c 6f 61 64 46 ocPtr = &UnloadF
6af0: 69 6c 65 3b 0a 3e 20 20 20 20 20 2a 6c 6f 61 64 ile;.> *load
6b00: 48 61 6e 64 6c 65 20 3d 20 6e 65 77 48 61 6e 64 Handle = newHand
6b10: 6c 65 3b 0a 3e 20 20 20 20 20 2a 75 6e 6c 6f 61 le;.> *unloa
6b20: 64 50 72 6f 63 50 74 72 20 3d 20 26 55 6e 6c 6f dProcPtr = &Unlo
6b30: 61 64 46 69 6c 65 3b 0a 31 30 37 63 31 31 39 0a adFile;.107c119.
6b40: 3c 20 20 2a 20 54 63 6c 70 46 69 6e 64 53 79 6d < * TclpFindSym
6b50: 62 6f 6c 20 2d 2d 0a 2d 2d 2d 0a 3e 20 20 2a 20 bol --.---.> *
6b60: 46 69 6e 64 53 79 6d 62 6f 6c 20 2d 2d 0a 31 32 FindSymbol --.12
6b70: 30 2c 31 32 31 63 31 33 32 2c 31 33 33 0a 3c 20 0,121c132,133.<
6b80: 54 63 6c 5f 50 61 63 6b 61 67 65 49 6e 69 74 50 Tcl_PackageInitP
6b90: 72 6f 63 20 2a 0a 3c 20 54 63 6c 70 46 69 6e 64 roc *.< TclpFind
6ba0: 53 79 6d 62 6f 6c 28 0a 2d 2d 2d 0a 3e 20 73 74 Symbol(.---.> st
6bb0: 61 74 69 63 20 76 6f 69 64 2a 0a 3e 20 46 69 6e atic void*.> Fin
6bc0: 64 53 79 6d 62 6f 6c 28 0a 31 33 34 61 31 34 37 dSymbol(.134a147
6bd0: 2c 31 35 32 0a 3e 20 20 20 20 20 69 66 20 28 70 ,152.> if (p
6be0: 72 6f 63 20 3d 3d 20 4e 55 4c 4c 20 26 26 20 69 roc == NULL && i
6bf0: 6e 74 65 72 70 20 21 3d 20 4e 55 4c 4c 29 20 7b nterp != NULL) {
6c00: 0a 3e 20 09 54 63 6c 5f 52 65 73 65 74 52 65 73 .> .Tcl_ResetRes
6c10: 75 6c 74 28 69 6e 74 65 72 70 29 3b 0a 3e 20 09 ult(interp);.> .
6c20: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 Tcl_AppendResult
6c30: 28 69 6e 74 65 72 70 2c 20 22 63 61 6e 6e 6f 74 (interp, "cannot
6c40: 20 66 69 6e 64 20 73 79 6d 62 6f 6c 20 5c 22 22 find symbol \""
6c50: 2c 20 73 79 6d 62 6f 6c 2c 0a 3e 20 09 09 09 20 , symbol,.> ...
6c60: 22 5c 22 22 2c 20 4e 55 4c 4c 29 3b 0a 3e 20 09 "\"", NULL);.> .
6c70: 54 63 6c 5f 53 65 74 45 72 72 6f 72 43 6f 64 65 Tcl_SetErrorCode
6c80: 28 69 6e 74 65 72 70 2c 20 22 54 43 4c 22 2c 20 (interp, "TCL",
6c90: 22 4c 4f 4f 4b 55 50 22 2c 20 22 4c 4f 41 44 5f "LOOKUP", "LOAD_
6ca0: 53 59 4d 42 4f 4c 22 2c 20 73 79 6d 62 6f 6c 2c SYMBOL", symbol,
6cb0: 20 4e 55 4c 4c 29 3b 0a 3e 20 20 20 20 20 7d 0a NULL);.> }.
6cc0: 31 34 31 63 31 35 39 0a 3c 20 20 2a 20 54 63 6c 141c159.< * Tcl
6cd0: 70 55 6e 6c 6f 61 64 46 69 6c 65 20 2d 2d 0a 2d pUnloadFile --.-
6ce0: 2d 2d 0a 3e 20 20 2a 20 55 6e 6c 6f 61 64 46 69 --.> * UnloadFi
6cf0: 6c 65 20 2d 2d 0a 31 35 37 63 31 37 35 0a 3c 20 le --.157c175.<
6d00: 54 63 6c 70 55 6e 6c 6f 61 64 46 69 6c 65 28 0a TclpUnloadFile(.
6d10: 2d 2d 2d 0a 3e 20 55 6e 6c 6f 61 64 46 69 6c 65 ---.> UnloadFile
6d20: 28 0a 31 36 31 61 31 38 30 0a 3e 20 20 20 20 20 (.161a180.>
6d30: 63 6b 66 72 65 65 28 28 63 68 61 72 2a 29 20 6c ckfree((char*) l
6d40: 6f 61 64 48 61 6e 64 6c 65 29 3b 0a 49 6e 64 65 oadHandle);.Inde
6d50: 78 3a 20 75 6e 69 78 2f 74 63 6c 4c 6f 61 64 4f x: unix/tclLoadO
6d60: 53 46 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d SF.c.===========
6d70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6d80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6d90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6da0: 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c ========.RCS fil
6db0: 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f e: /cvsroot/tcl/
6dc0: 74 63 6c 2f 75 6e 69 78 2f 74 63 6c 4c 6f 61 64 tcl/unix/tclLoad
6dd0: 4f 53 46 2e 63 2c 76 0a 72 65 74 72 69 65 76 69 OSF.c,v.retrievi
6de0: 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 36 ng revision 1.16
6df0: 0a 64 69 66 66 20 2d 72 31 2e 31 36 20 74 63 6c .diff -r1.16 tcl
6e00: 4c 6f 61 64 4f 53 46 2e 63 0a 34 30 61 34 31 2c LoadOSF.c.40a41,
6e10: 34 36 0a 3e 20 2f 2a 20 53 74 61 74 69 63 20 66 46.> /* Static f
6e20: 75 6e 63 74 69 6f 6e 73 20 64 65 66 69 6e 65 64 unctions defined
6e30: 20 77 69 74 68 69 6e 20 74 68 69 73 20 66 69 6c within this fil
6e40: 65 20 2a 2f 0a 3e 20 0a 3e 20 73 74 61 74 69 63 e */.> .> static
6e50: 20 76 6f 69 64 2a 20 46 69 6e 64 53 79 6d 62 6f void* FindSymbo
6e60: 6c 28 54 63 6c 5f 49 6e 74 65 72 70 2a 20 69 6e l(Tcl_Interp* in
6e70: 74 65 72 70 2c 20 54 63 6c 5f 4c 6f 61 64 48 61 terp, Tcl_LoadHa
6e80: 6e 64 6c 65 20 6c 6f 61 64 48 61 6e 64 6c 65 2c ndle loadHandle,
6e90: 0a 3e 20 09 09 20 20 20 20 20 20 20 63 6f 6e 73 .> .. cons
6ea0: 74 20 63 68 61 72 2a 20 73 79 6d 62 6f 6c 29 3b t char* symbol);
6eb0: 0a 3e 20 73 74 61 74 69 63 20 76 6f 69 64 20 55 .> static void U
6ec0: 6e 6c 6f 61 64 46 69 6c 65 28 54 63 6c 5f 4c 6f nloadFile(Tcl_Lo
6ed0: 61 64 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 29 adHandle handle)
6ee0: 3b 0a 3e 20 0c 0a 37 31 61 37 38 0a 3e 20 20 20 ;.> ..71a78.>
6ef0: 20 20 54 63 6c 5f 4c 6f 61 64 48 61 6e 64 6c 65 Tcl_LoadHandle
6f00: 20 6e 65 77 48 61 6e 64 6c 65 3b 0a 31 32 32 2c newHandle;.122,
6f10: 31 32 33 63 31 32 39 2c 31 33 34 0a 3c 20 20 20 123c129,134.<
6f20: 20 20 2a 6c 6f 61 64 48 61 6e 64 6c 65 20 3d 20 *loadHandle =
6f30: 70 6b 67 3b 0a 3c 20 20 20 20 20 2a 75 6e 6c 6f pkg;.< *unlo
6f40: 61 64 50 72 6f 63 50 74 72 20 3d 20 26 54 63 6c adProcPtr = &Tcl
6f50: 70 55 6e 6c 6f 61 64 46 69 6c 65 3b 0a 2d 2d 2d pUnloadFile;.---
6f60: 0a 3e 20 20 20 20 20 6e 65 77 48 61 6e 64 6c 65 .> newHandle
6f70: 20 3d 20 28 54 63 6c 5f 4c 6f 61 64 48 61 6e 64 = (Tcl_LoadHand
6f80: 6c 65 2a 29 20 63 6b 61 6c 6c 6f 63 28 73 69 7a le*) ckalloc(siz
6f90: 65 6f 66 28 2a 6e 65 77 48 61 6e 64 6c 65 29 29 eof(*newHandle))
6fa0: 3b 0a 3e 20 20 20 20 20 6e 65 77 48 61 6e 64 6c ;.> newHandl
6fb0: 65 2d 3e 63 6c 69 65 6e 74 44 61 74 61 20 3d 20 e->clientData =
6fc0: 70 6b 67 3b 0a 3e 20 20 20 20 20 6e 65 77 48 61 pkg;.> newHa
6fd0: 6e 64 6c 65 2d 3e 66 69 6e 64 53 79 6d 62 6f 6c ndle->findSymbol
6fe0: 50 72 6f 63 50 74 72 20 3d 20 26 46 69 6e 64 53 ProcPtr = &FindS
6ff0: 79 6d 62 6f 6c 3b 0a 3e 20 20 20 20 20 6e 65 77 ymbol;.> new
7000: 48 61 6e 64 6c 65 2d 3e 75 6e 6c 6f 61 64 46 69 Handle->unloadFi
7010: 6c 65 50 72 6f 63 50 74 72 20 3d 20 26 55 6e 6c leProcPtr = &Unl
7020: 6f 61 64 46 69 6c 65 3b 0a 3e 20 20 20 20 20 2a oadFile;.> *
7030: 6c 6f 61 64 48 61 6e 64 6c 65 20 3d 20 6e 65 77 loadHandle = new
7040: 48 61 6e 64 6c 65 3b 0a 3e 20 20 20 20 20 2a 75 Handle;.> *u
7050: 6e 6c 6f 61 64 50 72 6f 63 50 74 72 20 3d 20 26 nloadProcPtr = &
7060: 55 6e 6c 6f 61 64 46 69 6c 65 3b 0a 31 33 30 63 UnloadFile;.130c
7070: 31 34 31 0a 3c 20 20 2a 20 54 63 6c 70 46 69 6e 141.< * TclpFin
7080: 64 53 79 6d 62 6f 6c 20 2d 2d 0a 2d 2d 2d 0a 3e dSymbol --.---.>
7090: 20 20 2a 20 46 69 6e 64 53 79 6d 62 6f 6c 20 2d * FindSymbol -
70a0: 2d 0a 31 34 33 2c 31 34 34 63 31 35 34 2c 31 35 -.143,144c154,15
70b0: 35 0a 3c 20 54 63 6c 5f 50 61 63 6b 61 67 65 49 5.< Tcl_PackageI
70c0: 6e 69 74 50 72 6f 63 20 2a 0a 3c 20 54 63 6c 70 nitProc *.< Tclp
70d0: 46 69 6e 64 53 79 6d 62 6f 6c 28 0a 2d 2d 2d 0a FindSymbol(.---.
70e0: 3e 20 73 74 61 74 69 63 20 76 6f 69 64 20 2a 0a > static void *.
70f0: 3e 20 46 69 6e 64 53 79 6d 62 6f 6c 28 0a 31 34 > FindSymbol(.14
7100: 39 63 31 36 30 2c 31 36 36 0a 3c 20 20 20 20 20 9c160,166.<
7110: 72 65 74 75 72 6e 20 6c 64 72 5f 6c 6f 6f 6b 75 return ldr_looku
7120: 70 5f 70 61 63 6b 61 67 65 28 28 63 68 61 72 20 p_package((char
7130: 2a 29 6c 6f 61 64 48 61 6e 64 6c 65 2c 20 73 79 *)loadHandle, sy
7140: 6d 62 6f 6c 29 3b 0a 2d 2d 2d 0a 3e 20 20 20 20 mbol);.---.>
7150: 20 76 6f 69 64 2a 20 72 65 74 76 61 6c 20 3d 20 void* retval =
7160: 6c 64 72 5f 6c 6f 6f 6b 75 70 5f 70 61 63 6b 61 ldr_lookup_packa
7170: 67 65 28 28 63 68 61 72 20 2a 29 6c 6f 61 64 48 ge((char *)loadH
7180: 61 6e 64 6c 65 2c 20 73 79 6d 62 6f 6c 29 3b 0a andle, symbol);.
7190: 3e 20 20 20 20 20 69 66 20 28 72 65 74 76 61 6c > if (retval
71a0: 20 3d 3d 20 4e 55 4c 4c 20 26 26 20 69 6e 74 65 == NULL && inte
71b0: 72 70 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 3e 20 rp != NULL) {.>
71c0: 09 54 63 6c 5f 52 65 73 65 74 52 65 73 75 6c 74 .Tcl_ResetResult
71d0: 28 69 6e 74 65 72 70 29 3b 0a 3e 20 09 54 63 6c (interp);.> .Tcl
71e0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e _AppendResult(in
71f0: 74 65 72 70 2c 20 22 63 61 6e 6e 6f 74 20 66 69 terp, "cannot fi
7200: 6e 64 20 73 79 6d 62 6f 6c 5c 22 22 2c 20 73 79 nd symbol\"", sy
7210: 6d 62 6f 6c 2c 20 22 5c 22 22 2c 20 4e 55 4c 4c mbol, "\"", NULL
7220: 29 3b 0a 3e 20 09 54 63 6c 5f 53 65 74 45 72 72 );.> .Tcl_SetErr
7230: 6f 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 22 orCode(interp, "
7240: 54 43 4c 22 2c 20 22 4c 4f 4f 4b 55 50 22 2c 20 TCL", "LOOKUP",
7250: 22 4c 4f 41 44 5f 53 59 4d 42 4f 4c 22 2c 20 73 "LOAD_SYMBOL", s
7260: 79 6d 62 6f 6c 2c 20 4e 55 4c 4c 29 3b 0a 3e 20 ymbol, NULL);.>
7270: 20 20 20 20 7d 0a 3e 20 20 20 20 20 72 65 74 75 }.> retu
7280: 72 6e 20 72 65 74 76 61 6c 3b 0a 31 35 35 63 31 rn retval;.155c1
7290: 37 32 0a 3c 20 20 2a 20 54 63 6c 70 55 6e 6c 6f 72.< * TclpUnlo
72a0: 61 64 46 69 6c 65 20 2d 2d 0a 2d 2d 2d 0a 3e 20 adFile --.---.>
72b0: 20 2a 20 55 6e 6c 6f 61 64 46 69 6c 65 20 2d 2d * UnloadFile --
72c0: 0a 31 37 30 2c 31 37 31 63 31 38 37 2c 31 38 38 .170,171c187,188
72d0: 0a 3c 20 76 6f 69 64 0a 3c 20 54 63 6c 70 55 6e .< void.< TclpUn
72e0: 6c 6f 61 64 46 69 6c 65 28 0a 2d 2d 2d 0a 3e 20 loadFile(.---.>
72f0: 73 74 61 74 69 63 20 76 6f 69 64 0a 3e 20 55 6e static void.> Un
7300: 6c 6f 61 64 46 69 6c 65 28 0a 31 37 35 61 31 39 loadFile(.175a19
7310: 33 0a 3e 20 20 20 20 20 63 6b 66 72 65 65 28 28 3.> ckfree((
7320: 63 68 61 72 2a 29 20 6c 6f 61 64 48 61 6e 64 6c char*) loadHandl
7330: 65 29 3b 0a 49 6e 64 65 78 3a 20 75 6e 69 78 2f e);.Index: unix/
7340: 74 63 6c 4c 6f 61 64 53 68 6c 2e 63 0a 3d 3d 3d tclLoadShl.c.===
7350: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7360: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7370: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7380: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7390: 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 .RCS file: /cvsr
73a0: 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 75 6e 69 78 oot/tcl/tcl/unix
73b0: 2f 74 63 6c 4c 6f 61 64 53 68 6c 2e 63 2c 76 0a /tclLoadShl.c,v.
73c0: 72 65 74 72 69 65 76 69 6e 67 20 72 65 76 69 73 retrieving revis
73d0: 69 6f 6e 20 31 2e 31 39 0a 64 69 66 66 20 2d 72 ion 1.19.diff -r
73e0: 31 2e 31 39 20 74 63 6c 4c 6f 61 64 53 68 6c 2e 1.19 tclLoadShl.
73f0: 63 0a 32 37 61 32 38 2c 33 35 0a 3e 20 2f 2a 20 c.27a28,35.> /*
7400: 53 74 61 74 69 63 20 66 75 6e 63 74 69 6f 6e 73 Static functions
7410: 20 64 65 66 69 6e 65 64 20 77 69 74 68 69 6e 20 defined within
7420: 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 3e 20 0a this file */.> .
7430: 3e 20 73 74 61 74 69 63 20 76 6f 69 64 2a 20 46 > static void* F
7440: 69 6e 64 53 79 6d 62 6f 6c 28 54 63 6c 5f 49 6e indSymbol(Tcl_In
7450: 74 65 72 70 2a 20 69 6e 74 65 72 70 2c 20 54 63 terp* interp, Tc
7460: 6c 5f 4c 6f 61 64 48 61 6e 64 6c 65 20 6c 6f 61 l_LoadHandle loa
7470: 64 48 61 6e 64 6c 65 2c 0a 3e 20 09 09 09 63 6f dHandle,.> ...co
7480: 6e 73 74 20 63 68 61 72 2a 20 73 79 6d 62 6f 6c nst char* symbol
7490: 29 3b 0a 3e 20 73 74 61 74 69 63 20 76 6f 69 64 );.> static void
74a0: 0a 3e 20 55 6e 6c 6f 61 64 46 69 6c 65 28 54 63 .> UnloadFile(Tc
74b0: 6c 5f 4c 6f 61 64 48 61 6e 64 6c 65 20 68 61 6e l_LoadHandle han
74c0: 64 6c 65 29 3b 0a 3e 20 0a 3e 20 0c 0a 35 39 61 dle);.> .> ..59a
74d0: 36 38 0a 3e 20 20 20 20 20 54 63 6c 5f 4c 6f 61 68.> Tcl_Loa
74e0: 64 48 61 6e 64 6c 65 20 6e 65 77 48 61 6e 64 6c dHandle newHandl
74f0: 65 3b 0a 31 30 30 2c 31 30 31 63 31 30 39 2c 31 e;.100,101c109,1
7500: 31 33 0a 3c 20 20 20 20 20 2a 6c 6f 61 64 48 61 13.< *loadHa
7510: 6e 64 6c 65 20 3d 20 28 54 63 6c 5f 4c 6f 61 64 ndle = (Tcl_Load
7520: 48 61 6e 64 6c 65 29 20 68 61 6e 64 6c 65 3b 0a Handle) handle;.
7530: 3c 20 20 20 20 20 2a 75 6e 6c 6f 61 64 50 72 6f < *unloadPro
7540: 63 50 74 72 20 3d 20 26 54 63 6c 70 55 6e 6c 6f cPtr = &TclpUnlo
7550: 61 64 46 69 6c 65 3b 0a 2d 2d 2d 0a 3e 20 20 20 adFile;.---.>
7560: 20 20 6e 65 77 48 61 6e 64 6c 65 20 3d 20 28 54 newHandle = (T
7570: 63 6c 5f 4c 6f 61 64 48 61 6e 64 6c 65 29 20 63 cl_LoadHandle) c
7580: 6b 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 6e kalloc(sizeof(*n
7590: 65 77 48 61 6e 64 6c 65 29 29 3b 0a 3e 20 20 20 ewHandle));.>
75a0: 20 20 6e 65 77 48 61 6e 64 6c 65 2d 3e 63 6c 69 newHandle->cli
75b0: 65 6e 74 44 61 74 61 20 3d 20 68 61 6e 64 6c 65 entData = handle
75c0: 3b 0a 3e 20 20 20 20 20 6e 65 77 48 61 6e 64 6c ;.> newHandl
75d0: 65 2d 3e 66 69 6e 64 53 79 6d 62 6f 6c 50 72 6f e->findSymbolPro
75e0: 63 50 74 72 20 3d 20 26 46 69 6e 64 53 79 6d 62 cPtr = &FindSymb
75f0: 6f 6c 3b 0a 3e 20 20 20 20 20 6e 65 77 48 61 6e ol;.> newHan
7600: 64 6c 65 2d 3e 75 6e 6c 6f 61 64 46 69 6c 65 50 dle->unloadFileP
7610: 72 6f 63 50 74 72 20 3d 20 2a 75 6e 6c 6f 61 64 rocPtr = *unload
7620: 50 72 6f 63 50 74 72 20 3d 20 26 55 6e 6c 6f 61 ProcPtr = &Unloa
7630: 64 46 69 6c 65 3b 0a 3e 20 20 20 20 20 2a 6c 6f dFile;.> *lo
7640: 61 64 48 61 6e 64 6c 65 20 3d 20 6e 65 77 48 61 adHandle = newHa
7650: 6e 64 6c 65 3b 0a 31 30 38 63 31 32 30 0a 3c 20 ndle;.108c120.<
7660: 20 2a 20 54 63 6c 70 46 69 6e 64 53 79 6d 62 6f * TclpFindSymbo
7670: 6c 20 2d 2d 0a 2d 2d 2d 0a 3e 20 20 2a 20 54 63 l --.---.> * Tc
7680: 6c 5f 46 69 6e 64 53 79 6d 62 6f 6c 20 2d 2d 0a l_FindSymbol --.
7690: 31 32 31 2c 31 32 32 63 31 33 33 2c 31 33 34 0a 121,122c133,134.
76a0: 3c 20 54 63 6c 5f 50 61 63 6b 61 67 65 49 6e 69 < Tcl_PackageIni
76b0: 74 50 72 6f 63 20 2a 0a 3c 20 54 63 6c 70 46 69 tProc *.< TclpFi
76c0: 6e 64 53 79 6d 62 6f 6c 28 0a 2d 2d 2d 0a 3e 20 ndSymbol(.---.>
76d0: 73 74 61 74 69 63 20 76 6f 69 64 2a 0a 3e 20 46 static void*.> F
76e0: 69 6e 64 53 79 6d 62 6f 6c 28 0a 31 32 39 63 31 indSymbol(.129c1
76f0: 34 31 0a 3c 20 20 20 20 20 73 68 6c 5f 74 20 68 41.< shl_t h
7700: 61 6e 64 6c 65 20 3d 20 28 73 68 6c 5f 74 29 6c andle = (shl_t)l
7710: 6f 61 64 48 61 6e 64 6c 65 3b 0a 2d 2d 2d 0a 3e oadHandle;.---.>
7720: 20 20 20 20 20 73 68 6c 5f 74 20 68 61 6e 64 6c shl_t handl
7730: 65 20 3d 20 28 73 68 6c 5f 74 29 28 6c 6f 61 64 e = (shl_t)(load
7740: 48 61 6e 64 6c 65 2d 3e 63 6c 69 65 6e 74 44 61 Handle->clientDa
7750: 74 61 29 3b 0a 31 34 36 61 31 35 39 2c 31 36 33 ta);.146a159,163
7760: 0a 3e 20 20 20 20 20 69 66 20 28 70 72 6f 63 20 .> if (proc
7770: 3d 3d 20 4e 55 4c 4c 20 26 26 20 69 6e 74 65 72 == NULL && inter
7780: 70 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 3e 20 09 p != NULL) {.> .
7790: 54 63 6c 5f 52 65 73 65 74 52 65 73 75 6c 74 28 Tcl_ResetResult(
77a0: 69 6e 74 65 72 70 29 3b 0a 3e 20 09 54 63 6c 5f interp);.> .Tcl_
77b0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 AppendResult(int
77c0: 65 72 70 2c 20 22 63 61 6e 6e 6f 74 20 66 69 6e erp, "cannot fin
77d0: 64 20 73 79 6d 62 6f 6c 5c 22 22 2c 20 73 79 6d d symbol\"", sym
77e0: 62 6f 6c 2c 20 0a 3e 20 09 09 09 20 22 5c 22 3a bol, .> ... "\":
77f0: 20 22 2c 20 54 63 6c 5f 50 6f 73 69 78 45 72 72 ", Tcl_PosixErr
7800: 6f 72 28 69 6e 74 65 72 70 29 2c 20 4e 55 4c 4c or(interp), NULL
7810: 29 3b 0a 3e 20 20 20 20 20 7d 0a 31 35 33 63 31 );.> }.153c1
7820: 37 30 0a 3c 20 20 2a 20 54 63 6c 70 55 6e 6c 6f 70.< * TclpUnlo
7830: 61 64 46 69 6c 65 20 2d 2d 0a 2d 2d 2d 0a 3e 20 adFile --.---.>
7840: 20 2a 20 55 6e 6c 6f 61 64 46 69 6c 65 20 2d 2d * UnloadFile --
7850: 0a 31 36 38 2c 31 36 39 63 31 38 35 2c 31 38 36 .168,169c185,186
7860: 0a 3c 20 76 6f 69 64 0a 3c 20 54 63 6c 70 55 6e .< void.< TclpUn
7870: 6c 6f 61 64 46 69 6c 65 28 0a 2d 2d 2d 0a 3e 20 loadFile(.---.>
7880: 73 74 61 74 69 63 20 76 6f 69 64 0a 3e 20 55 6e static void.> Un
7890: 6c 6f 61 64 46 69 6c 65 28 0a 31 37 36 63 31 39 loadFile(.176c19
78a0: 33 0a 3c 20 20 20 20 20 68 61 6e 64 6c 65 20 3d 3.< handle =
78b0: 20 28 73 68 6c 5f 74 29 20 6c 6f 61 64 48 61 6e (shl_t) loadHan
78c0: 64 6c 65 3b 0a 2d 2d 2d 0a 3e 20 20 20 20 20 68 dle;.---.> h
78d0: 61 6e 64 6c 65 20 3d 20 28 73 68 6c 5f 74 29 20 andle = (shl_t)
78e0: 28 6c 6f 61 64 48 61 6e 64 6c 65 20 2d 3e 20 63 (loadHandle -> c
78f0: 6c 69 65 6e 74 44 61 74 61 29 3b 0a 31 37 37 61 lientData);.177a
7900: 31 39 35 0a 3e 20 20 20 20 20 63 6b 66 72 65 65 195.> ckfree
7910: 28 28 63 68 61 72 2a 29 20 6c 6f 61 64 48 61 6e ((char*) loadHan
7920: 64 6c 65 29 3b 0a 49 6e 64 65 78 3a 20 75 6e 69 dle);.Index: uni
7930: 78 2f 74 63 6c 55 6e 69 78 50 69 70 65 2e 63 0a x/tclUnixPipe.c.
7940: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7950: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7960: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7970: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7980: 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 ===.RCS file: /c
7990: 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 75 vsroot/tcl/tcl/u
79a0: 6e 69 78 2f 74 63 6c 55 6e 69 78 50 69 70 65 2e nix/tclUnixPipe.
79b0: 63 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 c,v.retrieving r
79c0: 65 76 69 73 69 6f 6e 20 31 2e 35 31 0a 64 69 66 evision 1.51.dif
79d0: 66 20 2d 72 31 2e 35 31 20 74 63 6c 55 6e 69 78 f -r1.51 tclUnix
79e0: 50 69 70 65 2e 63 0a 32 37 31 61 32 37 32 2c 33 Pipe.c.271a272,3
79f0: 30 35 0a 3e 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 05.> *---------
7a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7a40: 2d 2d 2d 2d 0a 3e 20 20 2a 0a 3e 20 20 2a 20 54 ----.> *.> * T
7a50: 63 6c 70 54 65 6d 70 46 69 6c 65 4e 61 6d 65 46 clpTempFileNameF
7a60: 6f 72 4c 69 62 72 61 72 79 20 2d 2d 0a 3e 20 20 orLibrary --.>
7a70: 2a 0a 3e 20 20 2a 09 43 6f 6e 73 74 72 75 63 74 *.> *.Construct
7a80: 73 20 61 20 66 69 6c 65 20 6e 61 6d 65 20 69 6e s a file name in
7a90: 20 74 68 65 20 6e 61 74 69 76 65 20 66 69 6c 65 the native file
7aa0: 20 73 79 73 74 65 6d 20 77 68 65 72 65 20 61 0a system where a.
7ab0: 3e 20 20 2a 09 64 79 6e 61 6d 69 63 61 6c 6c 79 > *.dynamically
7ac0: 20 6c 6f 61 64 65 64 20 6c 69 62 72 61 72 79 20 loaded library
7ad0: 6d 61 79 20 62 65 20 70 6c 61 63 65 64 2e 0a 3e may be placed..>
7ae0: 20 20 2a 0a 3e 20 20 2a 20 52 65 73 75 6c 74 73 *.> * Results
7af0: 3a 0a 3e 20 20 2a 09 52 65 74 75 72 6e 73 20 74 :.> *.Returns t
7b00: 68 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20 66 he constructed f
7b10: 69 6c 65 20 6e 61 6d 65 2e 20 49 66 20 61 6e 20 ile name. If an
7b20: 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 0a 3e 20 error occurs,.>
7b30: 20 2a 09 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 *.returns NULL
7b40: 61 6e 64 20 6c 65 61 76 65 73 20 61 6e 20 65 72 and leaves an er
7b50: 72 6f 72 20 6d 65 73 73 61 67 65 20 69 6e 20 74 ror message in t
7b60: 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 0a 3e he interpreter.>
7b70: 20 20 2a 09 72 65 73 75 6c 74 2e 0a 3e 20 20 2a *.result..> *
7b80: 0a 3e 20 20 2a 20 4f 6e 20 55 6e 69 78 2c 20 69 .> * On Unix, i
7b90: 74 20 77 6f 72 6b 73 20 74 6f 20 6c 6f 61 64 20 t works to load
7ba0: 61 20 73 68 61 72 65 64 20 6f 62 6a 65 63 74 20 a shared object
7bb0: 66 72 6f 6d 20 61 20 66 69 6c 65 20 6f 66 20 61 from a file of a
7bc0: 6e 79 0a 3e 20 20 2a 20 6e 61 6d 65 2c 20 73 6f ny.> * name, so
7bd0: 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 this function i
7be0: 73 20 6d 65 72 65 6c 79 20 61 20 74 68 69 6e 20 s merely a thin
7bf0: 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 0a 3e wrapper around.>
7c00: 20 20 2a 20 54 63 6c 70 54 65 6d 70 46 69 6c 65 * TclpTempFile
7c10: 4e 61 6d 65 28 29 2e 0a 3e 20 20 2a 09 0a 3e 20 Name()..> *..>
7c20: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *--------------
7c30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7c40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7c50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7c60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a ---------------.
7c70: 3e 20 20 2a 2f 0a 3e 20 0a 3e 20 54 63 6c 5f 4f > */.> .> Tcl_O
7c80: 62 6a 2a 0a 3e 20 54 63 6c 70 54 65 6d 70 46 69 bj*.> TclpTempFi
7c90: 6c 65 4e 61 6d 65 46 6f 72 4c 69 62 72 61 72 79 leNameForLibrary
7ca0: 28 54 63 6c 5f 49 6e 74 65 72 70 2a 20 69 6e 74 (Tcl_Interp* int
7cb0: 65 72 70 2c 20 2f 2a 20 54 63 6c 20 69 6e 74 65 erp, /* Tcl inte
7cc0: 72 70 72 65 74 65 72 20 2a 2f 0a 3e 20 09 09 09 rpreter */.> ...
7cd0: 20 20 20 54 63 6c 5f 4f 62 6a 2a 20 70 61 74 68 Tcl_Obj* path
7ce0: 29 20 20 20 20 20 20 2f 2a 20 50 61 74 68 20 6e ) /* Path n
7cf0: 61 6d 65 20 6f 66 20 74 68 65 20 6c 69 62 72 61 ame of the libra
7d00: 72 79 0a 3e 20 09 09 09 09 09 09 2a 20 69 6e 20 ry.> ......* in
7d10: 74 68 65 20 56 46 53 20 2a 2f 0a 3e 20 7b 0a 3e the VFS */.> {.>
7d20: 20 20 20 20 20 54 63 6c 5f 4f 62 6a 2a 20 72 65 Tcl_Obj* re
7d30: 74 76 61 6c 3b 0a 3e 20 20 20 20 20 72 65 74 76 tval;.> retv
7d40: 61 6c 20 3d 20 54 63 6c 70 54 65 6d 70 46 69 6c al = TclpTempFil
7d50: 65 4e 61 6d 65 28 29 3b 0a 3e 20 20 20 20 20 69 eName();.> i
7d60: 66 20 28 72 65 74 76 61 6c 20 3d 3d 20 4e 55 4c f (retval == NUL
7d70: 4c 29 20 7b 0a 3e 20 09 54 63 6c 5f 41 70 70 65 L) {.> .Tcl_Appe
7d80: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c ndResult(interp,
7d90: 20 22 63 6f 75 6c 64 6e 27 74 20 63 72 65 61 74 "couldn't creat
7da0: 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 e temporary file
7db0: 3a 20 22 2c 0a 3e 20 09 09 54 63 6c 5f 50 6f 73 : ",.> ..Tcl_Pos
7dc0: 69 78 45 72 72 6f 72 28 69 6e 74 65 72 70 29 2c ixError(interp),
7dd0: 20 4e 55 4c 4c 29 3b 0a 3e 20 20 20 20 20 7d 0a NULL);.> }.
7de0: 3e 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 74 > return ret
7df0: 76 61 6c 3b 0a 3e 20 7d 0a 3e 20 0c 0a 3e 20 2f val;.> }.> ..> /
7e00: 2a 0a 49 6e 64 65 78 3a 20 77 69 6e 2f 74 63 6c *.Index: win/tcl
7e10: 57 69 6e 4c 6f 61 64 2e 63 0a 3d 3d 3d 3d 3d 3d WinLoad.c.======
7e20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7e30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7e40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7e50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 =============.RC
7e60: 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 S file: /cvsroot
7e70: 2f 74 63 6c 2f 74 63 6c 2f 77 69 6e 2f 74 63 6c /tcl/tcl/win/tcl
7e80: 57 69 6e 4c 6f 61 64 2e 63 2c 76 0a 72 65 74 72 WinLoad.c,v.retr
7e90: 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 ieving revision
7ea0: 31 2e 32 36 0a 64 69 66 66 20 2d 72 31 2e 32 36 1.26.diff -r1.26
7eb0: 20 74 63 6c 57 69 6e 4c 6f 61 64 2e 63 0a 31 37 tclWinLoad.c.17
7ec0: 61 31 38 2c 32 33 0a 3e 20 2f 2a 20 53 74 61 74 a18,23.> /* Stat
7ed0: 69 63 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 66 ic functions def
7ee0: 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 69 73 ined within this
7ef0: 20 66 69 6c 65 20 2a 2f 0a 3e 20 0a 3e 20 76 6f file */.> .> vo
7f00: 69 64 2a 20 46 69 6e 64 53 79 6d 62 6f 6c 28 54 id* FindSymbol(T
7f10: 63 6c 5f 49 6e 74 65 72 70 2a 20 69 6e 74 65 72 cl_Interp* inter
7f20: 70 2c 20 54 63 6c 5f 4c 6f 61 64 48 61 6e 64 6c p, Tcl_LoadHandl
7f30: 65 20 6c 6f 61 64 48 61 6e 64 6c 65 2c 0a 3e 20 e loadHandle,.>
7f40: 09 09 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 73 .. const char* s
7f50: 79 6d 62 6f 6c 29 3b 0a 3e 20 76 6f 69 64 20 55 ymbol);.> void U
7f60: 6e 6c 6f 61 64 46 69 6c 65 28 54 63 6c 5f 4c 6f nloadFile(Tcl_Lo
7f70: 61 64 48 61 6e 64 6c 65 20 6c 6f 61 64 48 61 6e adHandle loadHan
7f80: 64 6c 65 29 3b 0a 3e 20 0a 35 30 63 35 36 0a 3c dle);.> .50c56.<
7f90: 20 20 20 20 20 48 49 4e 53 54 41 4e 43 45 20 68 HINSTANCE h
7fa0: 61 6e 64 6c 65 3b 0a 2d 2d 2d 0a 3e 20 20 20 20 andle;.---.>
7fb0: 20 48 49 4e 53 54 41 4e 43 45 20 68 49 6e 73 74 HINSTANCE hInst
7fc0: 61 6e 63 65 3b 0a 35 31 61 35 38 0a 3e 20 20 20 ance;.51a58.>
7fd0: 20 20 54 63 6c 5f 4c 6f 61 64 48 61 6e 64 6c 65 Tcl_LoadHandle
7fe0: 20 68 61 6e 64 6c 65 50 74 72 3b 0a 36 30 2c 36 handlePtr;.60,6
7ff0: 31 63 36 37 2c 36 38 0a 3c 20 20 20 20 20 68 61 1c67,68.< ha
8000: 6e 64 6c 65 20 3d 20 74 63 6c 57 69 6e 50 72 6f ndle = tclWinPro
8010: 63 73 2d 3e 6c 6f 61 64 4c 69 62 72 61 72 79 50 cs->loadLibraryP
8020: 72 6f 63 28 6e 61 74 69 76 65 4e 61 6d 65 29 3b roc(nativeName);
8030: 0a 3c 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c .< if (handl
8040: 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2d 2d 2d e == NULL) {.---
8050: 0a 3e 20 20 20 20 20 68 49 6e 73 74 61 6e 63 65 .> hInstance
8060: 20 3d 20 74 63 6c 57 69 6e 50 72 6f 63 73 2d 3e = tclWinProcs->
8070: 6c 6f 61 64 4c 69 62 72 61 72 79 50 72 6f 63 28 loadLibraryProc(
8080: 6e 61 74 69 76 65 4e 61 6d 65 29 3b 0a 3e 20 20 nativeName);.>
8090: 20 20 20 69 66 20 28 68 49 6e 73 74 61 6e 63 65 if (hInstance
80a0: 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 37 32 63 37 == NULL) {.72c7
80b0: 39 0a 3c 20 09 68 61 6e 64 6c 65 20 3d 20 74 63 9.< .handle = tc
80c0: 6c 57 69 6e 50 72 6f 63 73 2d 3e 6c 6f 61 64 4c lWinProcs->loadL
80d0: 69 62 72 61 72 79 50 72 6f 63 28 6e 61 74 69 76 ibraryProc(nativ
80e0: 65 4e 61 6d 65 29 3b 0a 2d 2d 2d 0a 3e 20 09 68 eName);.---.> .h
80f0: 49 6e 73 74 61 6e 63 65 20 3d 20 74 63 6c 57 69 Instance = tclWi
8100: 6e 50 72 6f 63 73 2d 3e 6c 6f 61 64 4c 69 62 72 nProcs->loadLibr
8110: 61 72 79 50 72 6f 63 28 6e 61 74 69 76 65 4e 61 aryProc(nativeNa
8120: 6d 65 29 3b 0a 37 36 2c 37 38 63 38 33 0a 3c 20 me);.76,78c83.<
8130: 20 20 20 20 2a 6c 6f 61 64 48 61 6e 64 6c 65 20 *loadHandle
8140: 3d 20 28 54 63 6c 5f 4c 6f 61 64 48 61 6e 64 6c = (Tcl_LoadHandl
8150: 65 29 20 68 61 6e 64 6c 65 3b 0a 3c 20 0a 3c 20 e) handle;.< .<
8160: 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d if (handle =
8170: 3d 20 4e 55 4c 4c 29 20 7b 0a 2d 2d 2d 0a 3e 20 = NULL) {.---.>
8180: 20 20 20 20 69 66 20 28 68 49 6e 73 74 61 6e 63 if (hInstanc
8190: 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 31 33 33 e == NULL) {.133
81a0: 63 31 33 38 2c 31 34 34 0a 3c 20 09 2a 75 6e 6c c138,144.< .*unl
81b0: 6f 61 64 50 72 6f 63 50 74 72 20 3d 20 26 54 63 oadProcPtr = &Tc
81c0: 6c 70 55 6e 6c 6f 61 64 46 69 6c 65 3b 0a 2d 2d lpUnloadFile;.--
81d0: 2d 0a 3e 20 09 68 61 6e 64 6c 65 50 74 72 20 3d -.> .handlePtr =
81e0: 20 0a 3e 20 09 20 20 20 20 28 54 63 6c 5f 4c 6f .> . (Tcl_Lo
81f0: 61 64 48 61 6e 64 6c 65 29 20 63 6b 61 6c 6c 6f adHandle) ckallo
8200: 63 28 73 69 7a 65 6f 66 28 73 74 72 75 63 74 20 c(sizeof(struct
8210: 54 63 6c 5f 4c 6f 61 64 48 61 6e 64 6c 65 5f 29 Tcl_LoadHandle_)
8220: 29 3b 0a 3e 20 09 68 61 6e 64 6c 65 50 74 72 2d );.> .handlePtr-
8230: 3e 63 6c 69 65 6e 74 44 61 74 61 20 3d 20 28 43 >clientData = (C
8240: 6c 69 65 6e 74 44 61 74 61 29 20 68 49 6e 73 74 lientData) hInst
8250: 61 6e 63 65 3b 0a 3e 20 09 68 61 6e 64 6c 65 50 ance;.> .handleP
8260: 74 72 2d 3e 66 69 6e 64 53 79 6d 62 6f 6c 50 72 tr->findSymbolPr
8270: 6f 63 50 74 72 20 3d 20 26 46 69 6e 64 53 79 6d ocPtr = &FindSym
8280: 62 6f 6c 3b 0a 3e 20 09 68 61 6e 64 6c 65 50 74 bol;.> .handlePt
8290: 72 2d 3e 75 6e 6c 6f 61 64 46 69 6c 65 50 72 6f r->unloadFilePro
82a0: 63 50 74 72 20 3d 20 26 55 6e 6c 6f 61 64 46 69 cPtr = &UnloadFi
82b0: 6c 65 3b 0a 3e 20 09 2a 6c 6f 61 64 48 61 6e 64 le;.> .*loadHand
82c0: 6c 65 20 3d 20 28 54 63 6c 5f 4c 6f 61 64 48 61 le = (Tcl_LoadHa
82d0: 6e 64 6c 65 29 20 68 61 6e 64 6c 65 50 74 72 3b ndle) handlePtr;
82e0: 0a 3e 20 09 2a 75 6e 6c 6f 61 64 50 72 6f 63 50 .> .*unloadProcP
82f0: 74 72 20 3d 20 26 55 6e 6c 6f 61 64 46 69 6c 65 tr = &UnloadFile
8300: 3b 0a 31 34 31 63 31 35 32 0a 3c 20 20 2a 20 54 ;.141c152.< * T
8310: 63 6c 70 46 69 6e 64 53 79 6d 62 6f 6c 20 2d 2d clpFindSymbol --
8320: 0a 2d 2d 2d 0a 3e 20 20 2a 20 46 69 6e 64 53 79 .---.> * FindSy
8330: 6d 62 6f 6c 20 2d 2d 0a 31 35 34 2c 31 35 35 63 mbol --.154,155c
8340: 31 36 35 2c 31 36 36 0a 3c 20 54 63 6c 5f 50 61 165,166.< Tcl_Pa
8350: 63 6b 61 67 65 49 6e 69 74 50 72 6f 63 20 2a 0a ckageInitProc *.
8360: 3c 20 54 63 6c 70 46 69 6e 64 53 79 6d 62 6f 6c < TclpFindSymbol
8370: 28 0a 2d 2d 2d 0a 3e 20 76 6f 69 64 20 2a 0a 3e (.---.> void *.>
8380: 20 46 69 6e 64 53 79 6d 62 6f 6c 28 0a 31 36 31 FindSymbol(.161
8390: 63 31 37 32 0a 3c 20 20 20 20 20 48 49 4e 53 54 c172.< HINST
83a0: 41 4e 43 45 20 68 61 6e 64 6c 65 20 3d 20 28 48 ANCE handle = (H
83b0: 49 4e 53 54 41 4e 43 45 29 6c 6f 61 64 48 61 6e INSTANCE)loadHan
83c0: 64 6c 65 3b 0a 2d 2d 2d 0a 3e 20 20 20 20 20 48 dle;.---.> H
83d0: 49 4e 53 54 41 4e 43 45 20 68 49 6e 73 74 61 6e INSTANCE hInstan
83e0: 63 65 20 3d 20 28 48 49 4e 53 54 41 4e 43 45 29 ce = (HINSTANCE)
83f0: 28 6c 6f 61 64 48 61 6e 64 6c 65 2d 3e 63 6c 69 (loadHandle->cli
8400: 65 6e 74 44 61 74 61 29 3b 0a 31 36 38 63 31 37 entData);.168c17
8410: 39 0a 3c 20 20 20 20 20 70 72 6f 63 20 3d 20 28 9.< proc = (
8420: 54 63 6c 5f 50 61 63 6b 61 67 65 49 6e 69 74 50 Tcl_PackageInitP
8430: 72 6f 63 20 2a 29 20 47 65 74 50 72 6f 63 41 64 roc *) GetProcAd
8440: 64 72 65 73 73 28 68 61 6e 64 6c 65 2c 20 73 79 dress(handle, sy
8450: 6d 62 6f 6c 29 3b 0a 2d 2d 2d 0a 3e 20 20 20 20 mbol);.---.>
8460: 20 70 72 6f 63 20 3d 20 28 76 6f 69 64 2a 29 20 proc = (void*)
8470: 47 65 74 50 72 6f 63 41 64 64 72 65 73 73 28 68 GetProcAddress(h
8480: 49 6e 73 74 61 6e 63 65 2c 20 73 79 6d 62 6f 6c Instance, symbol
8490: 29 3b 0a 31 37 31 63 31 38 32 0a 3c 20 0a 2d 2d );.171c182.< .--
84a0: 2d 0a 3e 20 09 63 6f 6e 73 74 20 63 68 61 72 2a -.> .const char*
84b0: 20 73 79 6d 32 3b 0a 31 37 34 2c 31 37 35 63 31 sym2;.174,175c1
84c0: 38 35 2c 31 38 36 0a 3c 20 09 73 79 6d 62 6f 6c 85,186.< .symbol
84d0: 20 3d 20 54 63 6c 5f 44 53 74 72 69 6e 67 41 70 = Tcl_DStringAp
84e0: 70 65 6e 64 28 26 64 73 2c 20 73 79 6d 62 6f 6c pend(&ds, symbol
84f0: 2c 20 2d 31 29 3b 0a 3c 20 09 70 72 6f 63 20 3d , -1);.< .proc =
8500: 20 28 54 63 6c 5f 50 61 63 6b 61 67 65 49 6e 69 (Tcl_PackageIni
8510: 74 50 72 6f 63 20 2a 29 20 47 65 74 50 72 6f 63 tProc *) GetProc
8520: 41 64 64 72 65 73 73 28 68 61 6e 64 6c 65 2c 20 Address(handle,
8530: 73 79 6d 62 6f 6c 29 3b 0a 2d 2d 2d 0a 3e 20 09 symbol);.---.> .
8540: 73 79 6d 32 20 3d 20 54 63 6c 5f 44 53 74 72 69 sym2 = Tcl_DStri
8550: 6e 67 41 70 70 65 6e 64 28 26 64 73 2c 20 73 79 ngAppend(&ds, sy
8560: 6d 62 6f 6c 2c 20 2d 31 29 3b 0a 3e 20 09 70 72 mbol, -1);.> .pr
8570: 6f 63 20 3d 20 28 54 63 6c 5f 50 61 63 6b 61 67 oc = (Tcl_Packag
8580: 65 49 6e 69 74 50 72 6f 63 20 2a 29 20 47 65 74 eInitProc *) Get
8590: 50 72 6f 63 41 64 64 72 65 73 73 28 68 49 6e 73 ProcAddress(hIns
85a0: 74 61 6e 63 65 2c 20 73 79 6d 32 29 3b 0a 31 37 tance, sym2);.17
85b0: 37 61 31 38 39 2c 31 39 32 0a 3e 20 20 20 20 20 7a189,192.>
85c0: 69 66 20 28 70 72 6f 63 20 3d 3d 20 4e 55 4c 4c if (proc == NULL
85d0: 20 26 26 20 69 6e 74 65 72 70 20 21 3d 20 4e 55 && interp != NU
85e0: 4c 4c 29 20 7b 0a 3e 20 09 54 63 6c 5f 41 70 70 LL) {.> .Tcl_App
85f0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 endResult(interp
8600: 2c 20 22 63 61 6e 6e 6f 74 20 66 69 6e 64 20 73 , "cannot find s
8610: 79 6d 62 6f 6c 20 5c 22 22 2c 20 73 79 6d 62 6f ymbol \"", symbo
8620: 6c 2c 20 22 5c 22 22 2c 20 4e 55 4c 4c 29 3b 0a l, "\"", NULL);.
8630: 3e 20 09 54 63 6c 5f 53 65 74 45 72 72 6f 72 43 > .Tcl_SetErrorC
8640: 6f 64 65 28 69 6e 74 65 72 70 2c 20 22 54 43 4c ode(interp, "TCL
8650: 22 2c 20 22 4c 4f 4f 4b 55 50 22 2c 20 22 4c 4f ", "LOOKUP", "LO
8660: 41 44 5f 53 59 4d 42 4f 4c 22 2c 20 73 79 6d 62 AD_SYMBOL", symb
8670: 6f 6c 2c 20 4e 55 4c 4c 29 3b 0a 3e 20 20 20 20 ol, NULL);.>
8680: 20 7d 0a 31 38 34 63 31 39 39 0a 3c 20 20 2a 20 }.184c199.< *
8690: 54 63 6c 70 55 6e 6c 6f 61 64 46 69 6c 65 20 2d TclpUnloadFile -
86a0: 2d 0a 2d 2d 2d 0a 3e 20 20 2a 20 55 6e 6c 6f 61 -.---.> * Unloa
86b0: 64 46 69 6c 65 20 2d 2d 0a 32 30 30 63 32 31 35 dFile --.200c215
86c0: 0a 3c 20 54 63 6c 70 55 6e 6c 6f 61 64 46 69 6c .< TclpUnloadFil
86d0: 65 28 0a 2d 2d 2d 0a 3e 20 55 6e 6c 6f 61 64 46 e(.---.> UnloadF
86e0: 69 6c 65 28 0a 32 30 35 2c 32 30 38 63 32 32 30 ile(.205,208c220
86f0: 2c 32 32 32 0a 3c 20 20 20 20 20 48 49 4e 53 54 ,222.< HINST
8700: 41 4e 43 45 20 68 61 6e 64 6c 65 3b 0a 3c 20 0a ANCE handle;.< .
8710: 3c 20 20 20 20 20 68 61 6e 64 6c 65 20 3d 20 28 < handle = (
8720: 48 49 4e 53 54 41 4e 43 45 29 20 6c 6f 61 64 48 HINSTANCE) loadH
8730: 61 6e 64 6c 65 3b 0a 3c 20 20 20 20 20 46 72 65 andle;.< Fre
8740: 65 4c 69 62 72 61 72 79 28 68 61 6e 64 6c 65 29 eLibrary(handle)
8750: 3b 0a 2d 2d 2d 0a 3e 20 20 20 20 20 48 49 4e 53 ;.---.> HINS
8760: 54 41 4e 43 45 20 68 49 6e 73 74 61 6e 63 65 20 TANCE hInstance
8770: 3d 20 28 48 49 4e 53 54 41 4e 43 45 29 20 6c 6f = (HINSTANCE) lo
8780: 61 64 48 61 6e 64 6c 65 2d 3e 63 6c 69 65 6e 74 adHandle->client
8790: 44 61 74 61 3b 0a 3e 20 20 20 20 20 46 72 65 65 Data;.> Free
87a0: 4c 69 62 72 61 72 79 28 68 49 6e 73 74 61 6e 63 Library(hInstanc
87b0: 65 29 3b 0a 3e 20 20 20 20 20 63 6b 66 72 65 65 e);.> ckfree
87c0: 28 28 63 68 61 72 2a 29 20 6c 6f 61 64 48 61 6e ((char*) loadHan
87d0: 64 6c 65 29 3b 0a 49 6e 64 65 78 3a 20 77 69 6e dle);.Index: win
87e0: 2f 74 63 6c 57 69 6e 50 69 70 65 2e 63 0a 3d 3d /tclWinPipe.c.==
87f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8800: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8810: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8820: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8830: 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 =.RCS file: /cvs
8840: 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 77 69 6e root/tcl/tcl/win
8850: 2f 74 63 6c 57 69 6e 50 69 70 65 2e 63 2c 76 0a /tclWinPipe.c,v.
8860: 72 65 74 72 69 65 76 69 6e 67 20 72 65 76 69 73 retrieving revis
8870: 69 6f 6e 20 31 2e 37 37 0a 64 69 66 66 20 2d 72 ion 1.77.diff -r
8880: 31 2e 37 37 20 74 63 6c 57 69 6e 50 69 70 65 2e 1.77 tclWinPipe.
8890: 63 0a 31 37 34 61 31 37 35 2c 31 38 31 0a 3e 20 c.174a175,181.>
88a0: 20 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 64 * Name of the d
88b0: 69 72 65 63 74 6f 72 79 20 69 6e 20 74 68 65 20 irectory in the
88c0: 6e 61 74 69 76 65 20 66 69 6c 65 73 79 73 74 65 native filesyste
88d0: 6d 20 77 68 65 72 65 20 44 4c 4c 73 20 75 73 65 m where DLLs use
88e0: 64 20 69 6e 20 74 68 69 73 0a 3e 20 20 2a 20 70 d in this.> * p
88f0: 72 6f 63 65 73 73 20 61 72 65 20 63 6f 70 69 65 rocess are copie
8900: 64 20 70 72 69 6f 72 20 74 6f 20 6c 6f 61 64 69 d prior to loadi
8910: 6e 67 2e 0a 3e 20 20 2a 2f 0a 3e 20 0a 3e 20 73 ng..> */.> .> s
8920: 74 61 74 69 63 20 57 43 48 41 52 2a 20 64 6c 6c tatic WCHAR* dll
8930: 44 69 72 65 63 74 6f 72 79 4e 61 6d 65 20 3d 20 DirectoryName =
8940: 4e 55 4c 4c 3b 0a 3e 20 0a 3e 20 2f 2a 0a 37 37 NULL;.> .> /*.77
8950: 32 61 37 38 30 2c 38 37 34 0a 3e 20 20 2a 2d 2d 2a780,874.> *--
8960: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8980: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8990: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
89a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 3e 20 20 2a -----------.> *
89b0: 0a 3e 20 20 2a 20 54 63 6c 70 54 65 6d 70 46 69 .> * TclpTempFi
89c0: 6c 65 4e 61 6d 65 46 6f 72 4c 69 62 72 61 72 79 leNameForLibrary
89d0: 20 2d 2d 0a 3e 20 20 2a 0a 3e 20 20 2a 09 43 6f --.> *.> *.Co
89e0: 6e 73 74 72 75 63 74 73 20 61 20 74 65 6d 70 6f nstructs a tempo
89f0: 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65 20 66 rary file name f
8a00: 6f 72 20 6c 6f 61 64 69 6e 67 20 61 20 73 68 61 or loading a sha
8a10: 72 65 64 20 6f 62 6a 65 63 74 20 28 44 4c 4c 29 red object (DLL)
8a20: 2e 0a 3e 20 20 2a 0a 3e 20 20 2a 20 52 65 73 75 ..> *.> * Resu
8a30: 6c 74 73 3a 0a 3e 20 20 2a 09 52 65 74 75 72 6e lts:.> *.Return
8a40: 73 20 74 68 65 20 63 6f 6e 73 74 72 75 63 74 65 s the constructe
8a50: 64 20 66 69 6c 65 20 6e 61 6d 65 2e 0a 3e 20 20 d file name..>
8a60: 2a 0a 3e 20 20 2a 20 4f 6e 20 57 69 6e 64 6f 77 *.> * On Window
8a70: 73 2c 20 61 20 44 4c 4c 20 69 73 20 69 64 65 6e s, a DLL is iden
8a80: 74 69 66 69 65 64 20 62 79 20 74 68 65 20 66 69 tified by the fi
8a90: 6e 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20 6f 66 nal component of
8aa0: 20 69 74 73 20 70 61 74 68 20 6e 61 6d 65 2e 0a its path name..
8ab0: 3e 20 20 2a 20 43 72 6f 73 73 20 6c 69 6e 6b 69 > * Cross linki
8ac0: 6e 67 20 61 6d 6f 6e 67 20 44 4c 4c 27 73 20 28 ng among DLL's (
8ad0: 61 6e 64 20 68 65 6e 63 65 2c 20 70 72 65 6c 6f and hence, prelo
8ae0: 61 64 69 6e 67 29 20 77 69 6c 6c 20 6e 6f 74 20 ading) will not
8af0: 77 6f 72 6b 20 75 6e 6c 65 73 73 0a 3e 20 20 2a work unless.> *
8b00: 20 74 68 69 73 20 6e 61 6d 65 20 69 73 20 70 72 this name is pr
8b10: 65 73 65 72 76 65 64 20 77 68 65 6e 20 63 6f 70 eserved when cop
8b20: 79 69 6e 67 20 61 20 44 4c 4c 20 66 72 6f 6d 20 ying a DLL from
8b30: 61 20 56 46 53 20 74 6f 20 61 20 74 65 6d 70 20 a VFS to a temp
8b40: 66 69 6c 65 20 66 6f 72 0a 3e 20 20 2a 20 70 72 file for.> * pr
8b50: 65 6c 6f 61 64 69 6e 67 2e 20 46 6f 72 20 74 68 eloading. For th
8b60: 69 73 20 72 65 61 73 6f 6e 2c 20 61 6c 6c 20 44 is reason, all D
8b70: 4c 4c 73 20 69 6e 20 61 20 67 69 76 65 6e 20 70 LLs in a given p
8b80: 72 6f 63 65 73 73 20 61 72 65 20 63 6f 70 69 65 rocess are copie
8b90: 64 0a 3e 20 20 2a 20 74 6f 20 61 20 74 65 6d 70 d.> * to a temp
8ba0: 20 64 69 72 65 63 74 6f 72 79 2c 20 61 6e 64 20 directory, and
8bb0: 74 68 65 69 72 20 6e 61 6d 65 73 20 61 72 65 20 their names are
8bc0: 70 72 65 73 65 72 76 65 64 2e 0a 3e 20 20 2a 0a preserved..> *.
8bd0: 3e 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d > *------------
8be0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8bf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8c00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8c20: 2d 0a 3e 20 20 2a 2f 0a 3e 20 0a 3e 20 54 63 6c -.> */.> .> Tcl
8c30: 5f 4f 62 6a 2a 0a 3e 20 54 63 6c 70 54 65 6d 70 _Obj*.> TclpTemp
8c40: 46 69 6c 65 4e 61 6d 65 46 6f 72 4c 69 62 72 61 FileNameForLibra
8c50: 72 79 28 54 63 6c 5f 49 6e 74 65 72 70 2a 20 69 ry(Tcl_Interp* i
8c60: 6e 74 65 72 70 2c 20 2f 2a 20 54 63 6c 20 69 6e nterp, /* Tcl in
8c70: 74 65 72 70 72 65 74 65 72 20 2a 2f 0a 3e 20 09 terpreter */.> .
8c80: 09 09 20 20 20 54 63 6c 5f 4f 62 6a 2a 20 70 61 .. Tcl_Obj* pa
8c90: 74 68 29 20 20 20 20 20 20 2f 2a 20 50 61 74 68 th) /* Path
8ca0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 44 4c 4c name of the DLL
8cb0: 20 69 6e 0a 3e 20 09 09 09 09 09 09 2a 20 74 68 in.> ......* th
8cc0: 65 20 56 46 53 20 2a 2f 0a 3e 20 7b 0a 3e 20 20 e VFS */.> {.>
8cd0: 20 20 20 73 69 7a 65 5f 74 20 6e 61 6d 65 4c 65 size_t nameLe
8ce0: 6e 3b 09 09 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 n;../* Length of
8cf0: 20 74 68 65 20 74 65 6d 70 20 66 6f 6c 64 65 72 the temp folder
8d00: 20 6e 61 6d 65 20 2a 2f 0a 3e 20 20 20 20 20 57 name */.> W
8d10: 43 48 41 52 20 6e 61 6d 65 5b 4d 41 58 5f 50 41 CHAR name[MAX_PA
8d20: 54 48 5d 3b 09 2f 2a 20 50 61 74 68 20 6e 61 6d TH];./* Path nam
8d30: 65 20 6f 66 20 74 68 65 20 74 65 6d 70 20 66 6f e of the temp fo
8d40: 6c 64 65 72 20 2a 2f 0a 3e 20 20 20 20 20 42 4f lder */.> BO
8d50: 4f 4c 20 73 74 61 74 75 73 3b 09 09 2f 2a 20 53 OL status;../* S
8d60: 74 61 74 75 73 20 66 72 6f 6d 20 57 69 6e 33 32 tatus from Win32
8d70: 20 41 50 49 20 63 61 6c 6c 73 20 2a 2f 0a 3e 20 API calls */.>
8d80: 20 20 20 20 54 63 6c 5f 4f 62 6a 2a 20 66 69 6c Tcl_Obj* fil
8d90: 65 4e 61 6d 65 3b 09 09 2f 2a 20 4e 61 6d 65 20 eName;../* Name
8da0: 6f 66 20 74 68 65 20 74 65 6d 70 20 66 69 6c 65 of the temp file
8db0: 20 2a 2f 0a 3e 20 20 20 20 20 54 63 6c 5f 4f 62 */.> Tcl_Ob
8dc0: 6a 2a 20 74 61 69 6c 3b 09 09 2f 2a 20 54 61 69 j* tail;../* Tai
8dd0: 6c 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 l of the source
8de0: 70 61 74 68 20 2a 2f 0a 3e 20 0a 3e 20 20 20 20 path */.> .>
8df0: 20 2f 2a 0a 3e 20 20 20 20 20 20 2a 20 44 65 74 /*.> * Det
8e00: 65 72 6d 69 6e 65 20 74 68 65 20 6e 61 6d 65 20 ermine the name
8e10: 6f 66 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 of the directory
8e20: 20 74 6f 20 75 73 65 2c 20 61 6e 64 20 63 72 65 to use, and cre
8e30: 61 74 65 20 69 74 2e 0a 3e 20 20 20 20 20 20 2a ate it..> *
8e40: 20 28 4b 65 65 70 20 74 72 79 69 6e 67 20 77 69 (Keep trying wi
8e50: 74 68 20 6e 65 77 20 6e 61 6d 65 73 20 75 6e 74 th new names unt
8e60: 69 6c 20 61 6e 20 61 74 74 65 6d 70 74 20 74 6f il an attempt to
8e70: 20 63 72 65 61 74 65 20 74 68 65 20 64 69 72 65 create the dire
8e80: 63 74 6f 72 79 0a 3e 20 20 20 20 20 20 2a 20 73 ctory.> * s
8e90: 75 63 63 65 65 64 73 29 0a 3e 20 20 20 20 20 20 ucceeds).>
8ea0: 2a 2f 0a 3e 20 0a 3e 20 20 20 20 20 6e 61 6d 65 */.> .> name
8eb0: 4c 65 6e 20 3d 20 30 3b 0a 3e 20 20 20 20 20 69 Len = 0;.> i
8ec0: 66 20 28 64 6c 6c 44 69 72 65 63 74 6f 72 79 4e f (dllDirectoryN
8ed0: 61 6d 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 3e ame == NULL) {.>
8ee0: 20 09 54 63 6c 5f 4d 75 74 65 78 4c 6f 63 6b 28 .Tcl_MutexLock(
8ef0: 26 70 69 70 65 4d 75 74 65 78 29 3b 0a 3e 20 09 &pipeMutex);.> .
8f00: 69 66 20 28 64 6c 6c 44 69 72 65 63 74 6f 72 79 if (dllDirectory
8f10: 4e 61 6d 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a Name == NULL) {.
8f20: 3e 20 09 20 20 20 20 69 66 20 28 28 6e 61 6d 65 > . if ((name
8f30: 4c 65 6e 20 3d 20 47 65 74 54 65 6d 70 50 61 74 Len = GetTempPat
8f40: 68 57 28 4d 41 58 5f 50 41 54 48 2c 20 6e 61 6d hW(MAX_PATH, nam
8f50: 65 29 29 20 3e 3d 20 30 29 20 7b 0a 3e 20 09 09 e)) >= 0) {.> ..
8f60: 69 66 20 28 6e 61 6d 65 4c 65 6e 20 3e 3d 20 4d if (nameLen >= M
8f70: 41 58 5f 50 41 54 48 2d 31 32 29 20 7b 0a 3e 20 AX_PATH-12) {.>
8f80: 09 09 20 20 20 20 54 63 6c 5f 53 65 74 45 72 72 .. Tcl_SetErr
8f90: 6e 6f 28 45 4e 41 4d 45 54 4f 4f 4c 4f 4e 47 29 no(ENAMETOOLONG)
8fa0: 3b 0a 3e 20 09 09 20 20 20 20 6e 61 6d 65 4c 65 ;.> .. nameLe
8fb0: 6e 20 3d 20 30 3b 0a 3e 20 09 09 7d 20 65 6c 73 n = 0;.> ..} els
8fc0: 65 20 7b 0a 3e 20 09 09 20 20 20 20 77 63 73 63 e {.> .. wcsc
8fd0: 70 79 28 6e 61 6d 65 2b 6e 61 6d 65 4c 65 6e 2c py(name+nameLen,
8fe0: 20 4c 22 54 43 4c 58 58 58 58 58 58 58 58 22 29 L"TCLXXXXXXXX")
8ff0: 3b 0a 3e 20 09 09 20 20 20 20 6e 61 6d 65 4c 65 ;.> .. nameLe
9000: 6e 20 2b 3d 20 31 31 3b 0a 3e 20 09 09 7d 0a 3e n += 11;.> ..}.>
9010: 20 09 20 20 20 20 7d 0a 3e 20 09 20 20 20 20 73 . }.> . s
9020: 74 61 74 75 73 20 3d 20 31 3b 0a 3e 20 09 20 20 tatus = 1;.> .
9030: 20 20 69 66 20 28 6e 61 6d 65 4c 65 6e 20 21 3d if (nameLen !=
9040: 20 30 29 20 7b 0a 3e 20 09 09 44 57 4f 52 44 20 0) {.> ..DWORD
9050: 69 64 3b 0a 3e 20 09 09 69 6e 74 20 69 20 3d 20 id;.> ..int i =
9060: 30 3b 0a 3e 20 09 09 69 64 20 3d 20 47 65 74 43 0;.> ..id = GetC
9070: 75 72 72 65 6e 74 50 72 6f 63 65 73 73 49 64 28 urrentProcessId(
9080: 29 3b 0a 3e 20 09 09 66 6f 72 20 28 3b 3b 29 20 );.> ..for (;;)
9090: 7b 0a 3e 20 09 09 20 20 20 20 44 57 4f 52 44 20 {.> .. DWORD
90a0: 6c 61 73 74 45 72 72 6f 72 3b 0a 3e 20 09 09 20 lastError;.> ..
90b0: 20 20 20 77 73 70 72 69 6e 74 66 57 28 6e 61 6d wsprintfW(nam
90c0: 65 2b 6e 61 6d 65 4c 65 6e 2d 38 2c 20 4c 22 25 e+nameLen-8, L"%
90d0: 30 38 78 22 2c 20 69 64 29 3b 0a 3e 20 09 09 20 08x", id);.> ..
90e0: 20 20 20 73 74 61 74 75 73 20 3d 20 43 72 65 61 status = Crea
90f0: 74 65 44 69 72 65 63 74 6f 72 79 57 28 6e 61 6d teDirectoryW(nam
9100: 65 2c 20 4e 55 4c 4c 29 3b 0a 3e 20 09 09 20 20 e, NULL);.> ..
9110: 20 20 69 66 20 28 73 74 61 74 75 73 29 20 7b 0a if (status) {.
9120: 3e 20 09 09 09 62 72 65 61 6b 3b 0a 3e 20 09 09 > ...break;.> ..
9130: 20 20 20 20 7d 0a 3e 20 09 09 20 20 20 20 69 66 }.> .. if
9140: 20 28 28 6c 61 73 74 45 72 72 6f 72 20 3d 20 47 ((lastError = G
9150: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 20 21 etLastError()) !
9160: 3d 20 45 52 52 4f 52 5f 41 4c 52 45 41 44 59 5f = ERROR_ALREADY_
9170: 45 58 49 53 54 53 29 20 7b 0a 3e 20 09 09 09 54 EXISTS) {.> ...T
9180: 63 6c 57 69 6e 43 6f 6e 76 65 72 74 45 72 72 6f clWinConvertErro
9190: 72 28 6c 61 73 74 45 72 72 6f 72 29 3b 0a 3e 20 r(lastError);.>
91a0: 09 09 09 62 72 65 61 6b 3b 0a 3e 20 09 09 20 20 ...break;.> ..
91b0: 20 20 7d 20 65 6c 73 65 20 69 66 20 28 2b 2b 69 } else if (++i
91c0: 20 3e 20 32 35 36 29 20 7b 0a 3e 20 09 09 09 54 > 256) {.> ...T
91d0: 63 6c 57 69 6e 43 6f 6e 76 65 72 74 45 72 72 6f clWinConvertErro
91e0: 72 28 6c 61 73 74 45 72 72 6f 72 29 3b 0a 3e 20 r(lastError);.>
91f0: 09 09 09 62 72 65 61 6b 3b 0a 3e 20 09 09 20 20 ...break;.> ..
9200: 20 20 7d 0a 3e 20 09 09 20 20 20 20 69 64 20 2a }.> .. id *
9210: 3d 20 31 36 37 37 37 36 31 39 3b 0a 3e 20 09 09 = 16777619;.> ..
9220: 7d 0a 3e 20 09 20 20 20 20 7d 0a 3e 20 09 20 20 }.> . }.> .
9230: 20 20 69 66 20 28 73 74 61 74 75 73 20 21 3d 20 if (status !=
9240: 30 29 20 7b 0a 3e 20 09 09 64 6c 6c 44 69 72 65 0) {.> ..dllDire
9250: 63 74 6f 72 79 4e 61 6d 65 20 3d 20 28 57 43 48 ctoryName = (WCH
9260: 41 52 2a 29 0a 3e 20 09 09 20 20 20 20 63 6b 61 AR*).> .. cka
9270: 6c 6c 6f 63 28 28 6e 61 6d 65 4c 65 6e 2b 31 29 lloc((nameLen+1)
9280: 20 2a 20 73 69 7a 65 6f 66 28 57 43 48 41 52 29 * sizeof(WCHAR)
9290: 29 3b 0a 3e 20 09 09 77 63 73 63 70 79 28 64 6c );.> ..wcscpy(dl
92a0: 6c 44 69 72 65 63 74 6f 72 79 4e 61 6d 65 2c 20 lDirectoryName,
92b0: 6e 61 6d 65 29 3b 0a 3e 20 09 20 20 20 20 7d 0a name);.> . }.
92c0: 3e 20 09 7d 0a 3e 20 09 54 63 6c 5f 4d 75 74 65 > .}.> .Tcl_Mute
92d0: 78 55 6e 6c 6f 63 6b 28 26 70 69 70 65 4d 75 74 xUnlock(&pipeMut
92e0: 65 78 29 3b 0a 3e 20 20 20 20 20 7d 0a 3e 20 20 ex);.> }.>
92f0: 20 20 20 69 66 20 28 64 6c 6c 44 69 72 65 63 74 if (dllDirect
9300: 6f 72 79 4e 61 6d 65 20 3d 3d 20 4e 55 4c 4c 29 oryName == NULL)
9310: 20 7b 0a 3e 20 09 54 63 6c 5f 41 70 70 65 6e 64 {.> .Tcl_Append
9320: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 Result(interp, "
9330: 63 6f 75 6c 64 6e 27 74 20 63 72 65 61 74 65 20 couldn't create
9340: 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 temporary direct
9350: 6f 72 79 3a 20 22 2c 0a 3e 20 09 09 09 20 54 63 ory: ",.> ... Tc
9360: 6c 5f 50 6f 73 69 78 45 72 72 6f 72 28 69 6e 74 l_PosixError(int
9370: 65 72 70 29 2c 20 4e 55 4c 4c 29 3b 0a 3e 20 20 erp), NULL);.>
9380: 20 20 20 7d 0a 3e 20 20 20 20 20 66 69 6c 65 4e }.> fileN
9390: 61 6d 65 20 3d 20 54 63 6c 70 4e 61 74 69 76 65 ame = TclpNative
93a0: 54 6f 4e 6f 72 6d 61 6c 69 7a 65 64 28 28 43 6c ToNormalized((Cl
93b0: 69 65 6e 74 44 61 74 61 29 20 64 6c 6c 44 69 72 ientData) dllDir
93c0: 65 63 74 6f 72 79 4e 61 6d 65 29 3b 0a 3e 20 20 ectoryName);.>
93d0: 20 20 20 74 61 69 6c 20 3d 20 54 63 6c 50 61 74 tail = TclPat
93e0: 68 50 61 72 74 28 69 6e 74 65 72 70 2c 20 70 61 hPart(interp, pa
93f0: 74 68 2c 20 54 43 4c 5f 50 41 54 48 5f 54 41 49 th, TCL_PATH_TAI
9400: 4c 29 3b 0a 3e 20 20 20 20 20 69 66 20 28 74 61 L);.> if (ta
9410: 69 6c 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 3e 20 il == NULL) {.>
9420: 09 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e .Tcl_DecrRefCoun
9430: 74 28 66 69 6c 65 4e 61 6d 65 29 3b 0a 3e 20 09 t(fileName);.> .
9440: 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a 3e 20 20 return NULL;.>
9450: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 3e 20 09 54 } else {.> .T
9460: 63 6c 5f 41 70 70 65 6e 64 54 6f 4f 62 6a 28 66 cl_AppendToObj(f
9470: 69 6c 65 4e 61 6d 65 2c 20 22 2f 22 2c 20 31 29 ileName, "/", 1)
9480: 3b 0a 3e 20 09 54 63 6c 5f 41 70 70 65 6e 64 4f ;.> .Tcl_AppendO
9490: 62 6a 54 6f 4f 62 6a 28 66 69 6c 65 4e 61 6d 65 bjToObj(fileName
94a0: 2c 20 74 61 69 6c 29 3b 0a 3e 20 09 72 65 74 75 , tail);.> .retu
94b0: 72 6e 20 66 69 6c 65 4e 61 6d 65 3b 0a 3e 20 20 rn fileName;.>
94c0: 20 20 20 7d 20 20 20 20 0a 3e 20 7d 0a 3e 20 0c } .> }.> .
94d0: 0a 3e 20 2f 2a 0a .> /*.