summaryrefslogtreecommitdiff
path: root/modl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'modl.cpp')
-rwxr-xr-xmodl.cpp174
1 files changed, 47 insertions, 127 deletions
diff --git a/modl.cpp b/modl.cpp
index 9ca0f86..17c7b49 100755
--- a/modl.cpp
+++ b/modl.cpp
@@ -1,178 +1,98 @@
// class modl implementation.
-#ifndef MODL_CPP
-#define MODL_CPP
+#ifndef MODL_CXX
+#define MODL_CXX
#include <limits.h>
#include <stdlib.h>
#include <dlfcn.h>
#include <stdio.h>
-#include "s_conf.h"
#include "s_mutx.h"
-#include "s_ncur.h"
#include "modl.h"
-#include "dir.h"
using namespace std;
modl::modl( )
{
- map_mods = new hmap<dynmod*,string>(80);
- pthread_mutex_init( &mut_map_mods, NULL );
-
- if ( s_conf::get().get_val( "PRE_MODS_COMMANDS" ).compare( "ON" ) == 0 )
- preload_modules( new string("mods/commands/") );
-
- if ( s_conf::get().get_val( "PRE_MODS_HTML" ).compare( "ON" ) == 0 )
- preload_modules( new string("mods/html/") );
+ map_mods = new hmap<dynmod*,string>(80);
+ pthread_mutex_init( &mut_map_mods, NULL );
}
modl::~modl()
{
- pthread_mutex_lock ( &mut_map_mods );
+ pthread_mutex_lock ( &mut_map_mods );
- // dlclose all the_module's first!
- map_mods->run_func ( &modl::dlclose_ );
+ // dlclose all the_module's first!
+ map_mods->run_func ( &modl::dlclose_ );
- // then clean the hash map.
- map_mods->make_empty ( );
+ // then clean the hash map.
+ map_mods->make_empty ( );
- pthread_mutex_unlock ( &mut_map_mods );
- pthread_mutex_destroy( &mut_map_mods );
-}
-
-void
-modl::preload_modules( string *p_path )
-{
- dir* p_dir = new dir();
- p_dir->open_dir( *p_path );
- p_dir->read_dir();
-
- vector<string>* p_dir_vec = p_dir->get_dir_vec();
-
- if ( ! p_dir_vec->empty() )
- {
- vector<string>::iterator iter = p_dir_vec->begin();
-
- do
- {
- if ( iter->length() >= 3 && iter->compare( iter->length()-3, 3, ".so" ) == 0 )
- cache_module( *p_path + *iter );
- }
- while ( ++iter != p_dir_vec->end() );
- }
- p_dir->close_dir();
- p_dir->~dir();
+ pthread_mutex_unlock ( &mut_map_mods );
+ pthread_mutex_destroy( &mut_map_mods );
}
void
modl::dlclose_( dynmod* mod )
{
- dlclose( mod->the_module );
+ dlclose( mod->the_module );
}
dynmod*
modl::cache_module( string s_name )
{
- void *the_module = NULL;
- function *the_func = NULL;
-
- the_module = dlopen( s_name.c_str(), RTLD_NOW );
-
- if ( the_module == NULL )
- {
- pthread_mutex_lock ( &s_mutx::get
- ().mut_stdout );
-#ifdef NCURSES
-
- s_ncur::get
- ().print( dlerror() );
-#else
+ void *the_module = NULL;
+ function *the_func = NULL;
- cerr << "dlerror: " << dlerror() << endl;
-#endif
-
- pthread_mutex_unlock( &s_mutx::get
- ().mut_stdout );
- return NULL;
- }
-
- the_func = (function*) dlsym( the_module, "extern_function" );
-
- if ( the_func == NULL )
- {
- pthread_mutex_lock ( &s_mutx::get
- ().mut_stdout );
-#ifdef NCURSES
+ the_module = dlopen( s_name.c_str(), RTLD_NOW );
- s_ncur::get
- ().print( dlerror() );
-#else
+ if ( the_module == NULL )
+ {
+ pthread_mutex_lock ( &s_mutx::get().mut_stdout );
+ cerr << "dlerror: " << dlerror() << endl;
+ pthread_mutex_unlock( &s_mutx::get().mut_stdout );
+ return NULL;
+ }
- cerr << "dlerror: " << dlerror() << endl;
-#endif
+ the_func = (function*) dlsym( the_module, "extern_function" );
- pthread_mutex_unlock( &s_mutx::get
- ().mut_stdout );
- return NULL;
- }
+ if ( the_func == NULL )
+ {
+ pthread_mutex_lock ( &s_mutx::get().mut_stdout );
+ cerr << "dlerror: " << dlerror() << endl;
+ pthread_mutex_unlock( &s_mutx::get().mut_stdout );
+ return NULL;
+ }
#ifdef VERBOSE
- pthread_mutex_lock ( &s_mutx::get
- ().mut_stdout );
- cout << MODULEC << s_name << endl;
- pthread_mutex_unlock( &s_mutx::get
- ().mut_stdout );
-#endif
-#ifdef NCURSES
-
- {
- string s_tmp( MODULEC );
- s_tmp.append( s_name );
- s_ncur::get
- ().print( s_tmp.c_str() );
- }
+ pthread_mutex_lock ( &s_mutx::get().mut_stdout );
+ cout << MODULEC << s_name << endl;
+ pthread_mutex_unlock( &s_mutx::get().mut_stdout );
#endif
- dynmod *mod = new dynmod; // encapsulates the function and module handler.
- mod->the_func = the_func ; // the function to execute
- mod->the_module = the_module; // the module handler to close if function
- // is not needed anymore.
- pthread_mutex_lock ( &mut_map_mods );
- map_mods->add_elem ( mod, s_name );
- pthread_mutex_unlock( &mut_map_mods );
+ dynmod *mod = new dynmod; // encapsulates the function and module handler.
+ mod->the_func = the_func ; // the function to execute
+ mod->the_module = the_module; // the module handler to close if function
+ // is not needed anymore.
+ pthread_mutex_lock ( &mut_map_mods );
+ map_mods->add_elem ( mod, s_name );
+ pthread_mutex_unlock( &mut_map_mods );
- // DO NOT CLOSE AS LONG THERE EXIST A POINTER TO THE FUNCTION
- // dlclose( module );
+// DO NOT CLOSE AS LONG THERE EXIST A POINTER TO THE FUNCTION
+// dlclose( module );
- return mod;
+ return mod;
}
dynmod*
modl::get_module( string s_name )
{
-#ifdef VERBOSE
- pthread_mutex_lock ( &s_mutx::get
- ().mut_stdout );
- cout << MODULER << s_name << endl;
- pthread_mutex_unlock( &s_mutx::get
- ().mut_stdout );
-#endif
-#ifdef NCURSES
-
- {
- string s_tmp( MODULER );
- s_tmp.append( s_name );
- s_ncur::get
- ().print( s_tmp.c_str() );
- }
-#endif
- pthread_mutex_lock ( &mut_map_mods );
- dynmod* mod = map_mods->get_elem( s_name );
- pthread_mutex_unlock( &mut_map_mods );
+ pthread_mutex_lock ( &mut_map_mods );
+ dynmod* mod = map_mods->get_elem( s_name );
+ pthread_mutex_unlock( &mut_map_mods );
- return ! mod ? cache_module( s_name ) : mod;
+ return ! mod ? cache_module( s_name ) : mod;
}
#endif