Tcl Source Code

Hex Artifact Content
Login

Artifact 7bb277b876c885cf9165126d651f807fc1c0cb0f:

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                                .> /*.