summaryrefslogtreecommitdiffstats
path: root/loader/module.c
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-11-03 19:40:38 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-11-03 19:40:38 +0000
commit74baf8a5bdd250c4490448d7b3cb2725cef36900 (patch)
tree5d72971a49ce2d571534ff3be03b530d43d566b6 /loader/module.c
parent0386dee16eb6e3ea8144aab09b0582dad3a9ab58 (diff)
downloadmpv-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.c50
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();
+ }
+ }
+}