diff options
author | Steve Slaven <bpk@hoopajoo.net> | 2005-03-13 02:18:06 (GMT) |
---|---|---|
committer | Steve Slaven <bpk@hoopajoo.net> | 2005-03-13 02:18:06 (GMT) |
commit | ab63de918b53985b98ea3338412b1fd47cb66c57 (patch) | |
tree | 91d13b8cd64e8a54df43363ba25047a0e07c3842 /cmd.c | |
parent | 214a3c4cecf7a4c409c76e4fffe4bd62af9e1ece (diff) | |
download | powwow-orig_v1.2.7.zip powwow-orig_v1.2.7.tar.gz powwow-orig_v1.2.7.tar.bz2 |
This commit was manufactured by cvs2svn to create tag 'powwow_1_2_7'.orig_v1.2.7
Diffstat (limited to 'cmd.c')
-rw-r--r-- | cmd.c | 36 |
1 files changed, 28 insertions, 8 deletions
@@ -228,28 +228,48 @@ static void cmd_module __P1 (char *,arg) { void *lib; void (*func)(); + int pindex; + struct stat junk; + char *prefixes[] = { + "./", + "/lib/powwow", + "/usr/lib/powwow", + "/usr/local/lib/powwow", + "$HOME/.powwow/lib" /* this doesn't work, but is here to remind me :p */ + }; + arg = skipspace(arg); - bzero( libname, 1024 ); - if( *arg == '.' || *arg == '/' ) { - /* No path mungling */ - strncpy( libname, arg, 1024 ); - }else{ - snprintf( libname, 1024, "/usr/local/lib/powwow/%s", arg ); + /* I changed it to work this way so that you can have libs in multiple places and + * also eventually to allow it to use .dll instead of .so under the cygwin environment */ + for( pindex = 0; pindex < 4; pindex++ ) { + bzero( libname, 1024 ); + + snprintf( libname, 1024, "%s/%s", prefixes[ pindex ], arg ); + if( stat( libname, &junk ) == 0 ) { + break; + } + + snprintf( libname, 1024, "%s/%s.so", prefixes[ pindex ], arg ); + if( stat( libname, &junk ) == 0 ) { + break; + } } /* open lib */ lib = dlopen( libname, RTLD_LAZY ); if( ! lib ) { - PRINTF( "#lib error: %s\n", dlerror() ); + PRINTF( "#module error: %s\n", dlerror() ); return; + }else{ + PRINTF( "#module loaded %s\n", libname ); } func = dlsym( lib, "powwow_init" ); if( func ) { (*func)(); }else{ - PRINTF( "#lib error: %s\n", dlerror() ); + PRINTF( "#module error: %s\n", dlerror() ); } } |