📄 loaddll
字号:
#ifdef WANT_DLL#ifdef NO_DLFCN_H# include "../compat/dlfcn.h"#else#if defined(__osf1__)#include <loader.h>#elif defined(HPUX)#include <dl.h>#else# include <dlfcn.h>#endif#endif#ifndef RTLD_NOW# define RTLD_NOW 1#endif#ifndef RTLD_GLOBAL# define RTLD_GLOBAL 0#endifextern IrcCommandDll *dll_commands;typedef int (Irc_PackageInitProc) _((IrcCommandDll **interp));typedef struct _package_installed { struct _package_installed *next; char *name;} Packages; Packages *install_pack = NULL; void dll_load _((char *command, char *args, char *subargs)){#if defined(__osf__) /* OSF /1 1.0/1.1/1.2 and related systems */ldr_module_t lm;#elif defined(HPUX) /* HP machines */ shl_t handle;#else /* linux SunOS AIX etc */void *handle = NULL;#endif char *filename = NULL;Irc_PackageInitProc *proc1Ptr;char *p, *procname = NULL;int code = 0; if (command) { if (install_pack) { Packages *pkg = install_pack; bitchsay("DLL packages installed"); for ( ; pkg; pkg = pkg->next) put_it("DLL %s", pkg->name); } else bitchsay("No dll's loaded"); return; } if (!args || !*args) { userage("LoadDll", "filename.so"); return; } filename = next_arg(args, &args);#if defined(__osf__) if ((lm = (Tcl_PackageInitProc *) load(fileName, LDR_NOFLAGS)) == LDR_NULL_MODULE) { return; } #elif defined(HPUX) if ((handle = shl_load(filename, BIND_IMMEDIATE, 0L)) == NULL) { return; } #else handle = dlopen(filename, RTLD_NOW | RTLD_GLOBAL); if (handle == NULL) { bitchsay("couldn't load file: %s %s", filename, dlerror()); return; }#endif if ((p = strrchr(filename, '/'))) p++; else p = filename; procname = m_strdup(p); if ((p = strchr(procname, '.'))) *p = 0; p = procname; *p = toupper(*p); p++; while (*p) { *p = tolower(*p++); } malloc_strcat(&procname, "_Init"); if (!procname) return; if (!find_in_list((List **)&install_pack, procname, 0)) { #if defined(__osf__) /* OSF1 */ *proc1Ptr = ldr_lookup_package(pkg, procname); code = (proc1Ptr)(&dll_commands);#elif defined(HPUX) /* HPUX */ if (shl_findsym(&handle, procname, (short) TYPE_PROCEDURE, (void *) proc1Ptr)) code = (proc1Ptr)(&dll_commands);#else if (!(proc1Ptr = (Irc_PackageInitProc *) dlsym(handle, (char *) procname))) bitchsay("UnSuccessful load"); else code = (proc1Ptr)(&dll_commands);#endif if (!code && proc1Ptr) { Packages *new; new = (Packages *) new_malloc(sizeof(Packages)); new->name = m_strdup(procname); add_to_list((List **)&install_pack, (List *)new); } else if (code) bitchsay("Error initiliziing dll"); } else bitchsay("Package Already installed"); new_free(&procname);}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -