1 | /*****
2 | ** ** Module Header ******************************************************* **
3 | ** **
4 | ** Modules Revision 3.0 **
5 | ** Providing a flexible user environment **
6 | ** **
7 | ** File: ModuleCmd_Purge.c **
8 | ** First Edition: 1991/10/23 **
9 | ** **
10 | ** Authors: John Furlan, jlf@behere.com **
11 | ** Jens Hamisch, jens@Strawberry.COM **
12 | ** **
13 | ** Description: Removes all loaded modulefiles from the environment. **
14 | ** **
15 | ** Exports: ModuleCmd_Purge **
16 | ** **
17 | ** Notes: **
18 | ** **
19 | ** ************************************************************************ **
20 | ****/
21 |
22 | /** ** Copyright *********************************************************** **
23 | ** **
24 | ** Copyright 1991-1994 by John L. Furlan. **
25 | ** see LICENSE.GPL, which must be provided, for details **
26 | ** **
27 | ** ************************************************************************ **/
28 |
29 | static char Id[] = "@(#)$Id: ModuleCmd_Purge.c.src.html,v 1.6 2006/01/18 05:35:11 rkowen Exp $";
30 | static void *UseId[] = { &UseId, Id };
31 |
32 | /** ************************************************************************ **/
33 | /** HEADERS **/
34 | /** ************************************************************************ **/
35 |
36 | #include "modules_def.h"
37 |
38 | /** ************************************************************************ **/
39 | /** LOCAL DATATYPES **/
40 | /** ************************************************************************ **/
41 |
42 | /** not applicable **/
43 |
44 | /** ************************************************************************ **/
45 | /** CONSTANTS **/
46 | /** ************************************************************************ **/
47 |
48 | /** not applicable **/
49 |
50 | /** ************************************************************************ **/
51 | /** MACROS **/
52 | /** ************************************************************************ **/
53 |
54 | /** not applicable **/
55 |
56 | /** ************************************************************************ **/
57 | /** LOCAL DATA **/
58 | /** ************************************************************************ **/
59 |
60 | static char module_name[] = "ModuleCmd_Purge.c"; /** File name of this module **/
61 |
62 | /** ************************************************************************ **/
63 | /** PROTOTYPES **/
64 | /** ************************************************************************ **/
65 |
66 | /** not applicable **/
67 |
68 |
69 | /*++++
70 | ** ** Function-Header ***************************************************** **
71 | ** **
72 | ** Function: ModuleCmd_Purge **
73 | ** **
74 | ** Description: Execution of the module-command 'purge' **
75 | ** **
76 | ** First Edition: 1991/10/23 **
77 | ** **
78 | ** Parameters: Tcl_Interp *interp Attached Tcl Interp. **
79 | ** int argc Number of arguments **
80 | ** char *argv[] Argument list **
81 | ** **
82 | ** Result: int TCL_ERROR Failure **
83 | ** TCL_OK Successfull operation **
84 | ** **
85 | ** Attached Globals: **
86 | ** **
87 | ** ************************************************************************ **
88 | ++++*/
89 |
90 | int ModuleCmd_Purge( Tcl_Interp *interp,
91 | int argc,
92 | char *argv[])
93 | {
94 | char *lmodules = NULL,
95 | *cur_module = NULL,
96 | *loaded_modules,
97 | *unload_argv[ MOD_BUFSIZE];
98 | int unload_argc = 0,
99 | status;
100 |
101 | #if WITH_DEBUGGING_MODULECMD
102 | fprintf( stderr, "ModuleCmd_Purge(%d):DEBUG: Starting\n", __LINE__);
103 | #endif
104 |
105 | /**
106 | ** Get the list of currently loaded modules from the environment variable
107 | ** LOADEDMODULES
108 | **/
109 | if( NULL == (loaded_modules =
110 | (char *) Tcl_GetVar2( interp, "env", "LOADEDMODULES",
111 | TCL_GLOBAL_ONLY))) {
112 | if( OK != ErrorLogger( ERR_MODULE_PATH, LOC, NULL))
113 | return( TCL_ERROR); /** -------- EXIT (FAILURE) -------- **/
114 | else
115 | return( TCL_OK); /** ---- EXIT (Nothing to list) ---- **/
116 | }
117 |
118 | if((char *) NULL == (lmodules = stringer(NULL,0, loaded_modules, NULL)))
119 | if( OK != ErrorLogger( ERR_STRING, LOC, NULL))
120 | return( TCL_ERROR); /** -------- EXIT (FAILURE) -------- **/
121 |
122 | /**
123 | ** Build a NULL terminated list of loaded modules
124 | **/
125 | for( cur_module = strtok( lmodules, ":");
126 | cur_module && unload_argc < MOD_BUFSIZE-1;
127 | cur_module = strtok( NULL, ":"))
128 | unload_argv[ unload_argc++] = cur_module;
129 |
130 | unload_argv[ unload_argc] = NULL;
131 |
132 | /**
133 | ** Unload 'em all
134 | ** We always say the load succeeded. ModuleCmd_Load will
135 | ** output any necessary error messages.
136 | **/
137 | ModuleCmd_Load( interp, 0, unload_argc, unload_argv);
138 | status = TCL_OK;
139 |
140 | /**
141 | ** Free, what has been allocated and pass the load's result to the caller
142 | **/
143 | null_free((void *) &lmodules);
144 |
145 | #if WITH_DEBUGGING_MODULECMD
146 | fprintf( stderr, "ModuleCmd_Purge(%d):DEBUG: End\n", __LINE__);
147 | #endif
148 |
149 | return( status);
150 |
151 | } /** End of 'ModuleCmd_Purge' **/