diff options
author | Sam Hartman <hartmans@mit.edu> | 2011-09-28 20:55:18 +0000 |
---|---|---|
committer | Sam Hartman <hartmans@mit.edu> | 2011-09-28 20:55:18 +0000 |
commit | 43b0bdc2bfbb8ce198a0f031e394bcc35cde12f3 (patch) | |
tree | a75b35f72a0068981004b3fcc6b664981ae30a94 /src/windows/leashdll | |
parent | ebf757101939bf391061c366ecec8d34b4c190c3 (diff) | |
download | krb5-43b0bdc2bfbb8ce198a0f031e394bcc35cde12f3.tar.gz krb5-43b0bdc2bfbb8ce198a0f031e394bcc35cde12f3.tar.xz krb5-43b0bdc2bfbb8ce198a0f031e394bcc35cde12f3.zip |
Moved LoadFuncs/UnloadFuncs() to windows/lib
Signed-off-by: Alexey Melnikov <aamelnikov@gmail.com>
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@25257 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/windows/leashdll')
-rw-r--r-- | src/windows/leashdll/Makefile.in | 5 | ||||
-rw-r--r-- | src/windows/leashdll/include/loadfuncs.h | 41 | ||||
-rw-r--r-- | src/windows/leashdll/loadfuncs.c | 88 |
3 files changed, 2 insertions, 132 deletions
diff --git a/src/windows/leashdll/Makefile.in b/src/windows/leashdll/Makefile.in index 12f281bd23..8846b5ec6a 100644 --- a/src/windows/leashdll/Makefile.in +++ b/src/windows/leashdll/Makefile.in @@ -32,8 +32,7 @@ OBJS= $(OUTPRE)AFSroutines.$(OBJEXT) \ $(OUTPRE)timesync.$(OBJEXT) \ $(OUTPRE)winerr.$(OBJEXT) \ $(OUTPRE)winutil.$(OBJEXT) \ - $(OUTPRE)registry.$(OBJEXT) \ - $(OUTPRE)loadfuncs.$(OBJEXT) + $(OUTPRE)registry.$(OBJEXT) #TODO: Fix resource compilation RESFILE = $(OUTPRE)lsh_pwd.res @@ -75,7 +74,7 @@ clean-windows:: $(OUTPRE)$(DLL_NAME).dll: $(DEF_FILE) $(OBJS) $(XOBJS) link $(WINDLLFLAGS) -def:$(DEF_FILE) -out:$*.dll \ - $(OBJS) $(XOBJS) $(WINLIBS) $(SCLIB) + $(OBJS) $(XOBJS) $(WINLIBS) ../lib/$(OUTPRE)libwin.lib $(SCLIB) $(_VC_MANIFEST_EMBED_DLL) #TODO: Add dependencies on include files here diff --git a/src/windows/leashdll/include/loadfuncs.h b/src/windows/leashdll/include/loadfuncs.h deleted file mode 100644 index 7aef62d21c..0000000000 --- a/src/windows/leashdll/include/loadfuncs.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef __LOADFUNCS_H__ -#define __LOADFUNCS_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include <windows.h> - -typedef struct _FUNC_INFO { - void** func_ptr_var; - char* func_name; -} FUNC_INFO; - -#define DECL_FUNC_PTR(x) FP_##x p##x -#define MAKE_FUNC_INFO(x) { (void**) &p##x, #x } -#define END_FUNC_INFO { 0, 0 } -#define TYPEDEF_FUNC(ret, call, name, args) typedef ret (call *FP_##name) args - -void -UnloadFuncs( - FUNC_INFO fi[], - HINSTANCE h - ); - -int -LoadFuncs( - const char* dll_name, - FUNC_INFO fi[], - HINSTANCE* ph, // [out, optional] - DLL handle - int* pindex, // [out, optional] - index of last func loaded (-1 if none) - int cleanup, // cleanup function pointers and unload on error - int go_on, // continue loading even if some functions cannot be loaded - int silent // do not pop-up a system dialog if DLL cannot be loaded - ); - -#ifdef __cplusplus -} -#endif - -#endif /* __LOADFUNCS_H__ */ diff --git a/src/windows/leashdll/loadfuncs.c b/src/windows/leashdll/loadfuncs.c deleted file mode 100644 index 44ec54dfaa..0000000000 --- a/src/windows/leashdll/loadfuncs.c +++ /dev/null @@ -1,88 +0,0 @@ -#define WIN32_LEAN_AND_MEAN -#include <windows.h> -#include "loadfuncs.h" - -// -// UnloadFuncs: -// -// This function will reset all the function pointers of a function loaded -// by LaodFuncs and will free the DLL instance provided. -// - -void -UnloadFuncs( - FUNC_INFO fi[], - HINSTANCE h - ) -{ - int n; - if (fi) - for (n = 0; fi[n].func_ptr_var; n++) - *(fi[n].func_ptr_var) = NULL; - if (h) FreeLibrary(h); -} - - -// -// LoadFuncs: -// -// This function try to load the functions for a DLL. It returns 0 on failure -// and non-zero on success. The parameters are descibed below. -// - -int -LoadFuncs( - const char* dll_name, - FUNC_INFO fi[], - HINSTANCE* ph, // [out, optional] - DLL handle - int* pindex, // [out, optional] - index of last func loaded (-1 if none) - int cleanup, // cleanup function pointers and unload on error - int go_on, // continue loading even if some functions cannot be loaded - int silent // do not pop-up a system dialog if DLL cannot be loaded - - ) -{ - HINSTANCE h; - int i, n, last_i; - int error = 0; - UINT em; - - if (ph) *ph = 0; - if (pindex) *pindex = -1; - - for (n = 0; fi[n].func_ptr_var; n++) - *(fi[n].func_ptr_var) = NULL; - - if (silent) - em = SetErrorMode(SEM_FAILCRITICALERRORS); - h = LoadLibrary(dll_name); - if (silent) - SetErrorMode(em); - - if (!h) - return 0; - - last_i = -1; - for (i = 0; (go_on || !error) && (i < n); i++) - { - void* p = (void*)GetProcAddress(h, fi[i].func_name); - if (!p) - error = 1; - else - { - last_i = i; - *(fi[i].func_ptr_var) = p; - } - } - if (pindex) *pindex = last_i; - if (error && cleanup && !go_on) { - for (i = 0; i < n; i++) { - *(fi[i].func_ptr_var) = NULL; - } - FreeLibrary(h); - return 0; - } - if (ph) *ph = h; - if (error) return 0; - return 1; -} |