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: 91/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.2 2005/11/25 20:09:37 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: 91/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 = Tcl_GetVar2( interp, "env", "LOADEDMODULES",
110 | TCL_GLOBAL_ONLY))) {
111 | if( OK != ErrorLogger( ERR_MODULE_PATH, LOC, NULL))
112 | return( TCL_ERROR); /** -------- EXIT (FAILURE) -------- **/
113 | else
114 | return( TCL_OK); /** ---- EXIT (Nothing to list) ---- **/
115 | }
116 |
117 | if((char *) NULL == (lmodules = stringer(NULL,0, loaded_modules, NULL)))
118 | if( OK != ErrorLogger( ERR_STRING, LOC, NULL))
119 | return( TCL_ERROR); /** -------- EXIT (FAILURE) -------- **/
120 |
121 | /**
122 | ** Build a NULL terminated list of loaded modules
123 | **/
124 | for( cur_module = strtok( lmodules, ":");
125 | cur_module && unload_argc < MOD_BUFSIZE-1;
126 | cur_module = strtok( NULL, ":"))
127 | unload_argv[ unload_argc++] = cur_module;
128 |
129 | unload_argv[ unload_argc] = NULL;
130 |
131 | /**
132 | ** Unload 'em all
133 | ** We always say the load succeeded. ModuleCmd_Load will
134 | ** output any necessary error messages.
135 | **/
136 | ModuleCmd_Load( interp, 0, unload_argc, unload_argv);
137 | status = TCL_OK;
138 |
139 | /**
140 | ** Free, what has been allocated and pass the load's result to the caller
141 | **/
142 | null_free((void *) &lmodules);
143 |
144 | #if WITH_DEBUGGING_MODULECMD
145 | fprintf( stderr, "ModuleCmd_Purge(%d):DEBUG: End\n", __LINE__);
146 | #endif
147 |
148 | return( status);
149 |
150 | } /** End of 'ModuleCmd_Purge' **/