diff options
author | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-11-03 19:40:38 +0000 |
---|---|---|
committer | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-11-03 19:40:38 +0000 |
commit | 74baf8a5bdd250c4490448d7b3cb2725cef36900 (patch) | |
tree | 5d72971a49ce2d571534ff3be03b530d43d566b6 /loader/module.c | |
parent | 0386dee16eb6e3ea8144aab09b0582dad3a9ab58 (diff) | |
download | mpv-74baf8a5bdd250c4490448d7b3cb2725cef36900.tar.bz2 mpv-74baf8a5bdd250c4490448d7b3cb2725cef36900.tar.xz |
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@2652 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'loader/module.c')
-rw-r--r-- | loader/module.c | 50 |
1 files changed, 41 insertions, 9 deletions
diff --git a/loader/module.c b/loader/module.c index c2c88bb74d..d53caed9af 100644 --- a/loader/module.c +++ b/loader/module.c @@ -52,6 +52,10 @@ struct modify_ldt_ldt_s { #include <wine/elfdll.h> #endif #include "win32.h" +//#include "driver.h" + +//#undef TRACE +//#define TRACE printf struct modref_list_t; @@ -60,13 +64,12 @@ typedef struct modref_list_t WINE_MODREF* wm; struct modref_list_t *next; struct modref_list_t *prev; -} -modref_list; +} modref_list; //WINE_MODREF *local_wm=NULL; modref_list* local_wm=NULL; -//HANDLE SegptrHeap; // unused? +HANDLE SegptrHeap; WINE_MODREF *MODULE_FindModule(LPCSTR m) { @@ -113,6 +116,7 @@ static void MODULE_RemoveFromList(WINE_MODREF *mod) return; } } + } WINE_MODREF *MODULE32_LookupHMODULE(HMODULE m) @@ -274,9 +278,17 @@ WIN_BOOL MODULE_DllProcessAttach( WINE_MODREF *wm, LPVOID lpReserved ) */ void MODULE_DllProcessDetach( WINE_MODREF* wm, WIN_BOOL bForceDetach, LPVOID lpReserved ) { -// WINE_MODREF *wm=local_wm; + // WINE_MODREF *wm=local_wm; + modref_list* l = local_wm; wm->flags &= ~WINE_MODREF_PROCESS_ATTACHED; MODULE_InitDll( wm, DLL_PROCESS_DETACH, lpReserved ); +/* while (l) + { + modref_list* f = l; + l = l->next; + free(f); + } + local_wm = 0;*/ } @@ -298,11 +310,7 @@ HMODULE WINAPI LoadLibraryExA(LPCSTR libname, HANDLE hfile, DWORD flags) SetLastError(ERROR_INVALID_PARAMETER); return 0; } - printf("Loading DLL: '%s'\n", libname); - -// if(fs_installed==0) -// install_fs(); while (wm == 0 && listpath[++i]) { @@ -310,7 +318,7 @@ HMODULE WINAPI LoadLibraryExA(LPCSTR libname, HANDLE hfile, DWORD flags) { if (i == 0) /* check just original file name */ - strncpy(path, libname, 511); + strncpy(path, libname, 511); else /* check default user path */ strncpy(path, def_path, 300); @@ -539,3 +547,27 @@ FARPROC MODULE_GetProcAddress( } } +static int acounter = 0; +void CodecAlloc(void) +{ + acounter++; +} + +void CodecRelease(void) +{ + acounter--; + if (acounter == 0) + { + for (;;) + { + modref_list* list = local_wm; + if (!local_wm) + break; + //printf("CODECRELEASE %p\n", list); + MODULE_FreeLibrary(list->wm); + MODULE_RemoveFromList(list->wm); + if (local_wm == NULL) + my_garbagecollection(); + } + } +} |