annotate loader/module.c @ 36660:7fd255e0db1b

stream.c: remove pointless NULL check. Since it currently is a fixed-size array it can never be NULL. But even if this was changed, this check has no real value: it should still only be possible in case of an obvious code bug during development and the crash it would cause would be easy enough to debug.
author reimar
date Sun, 26 Jan 2014 18:59:15 +0000
parents 5d19df9dfda8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1 /*
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2 * Modules
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
3 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
4 * Copyright 1995 Alexandre Julliard
15166
f5537cc95b02 Mark modified imported files as such to comply with GPL ¡ø2a.
diego
parents: 13745
diff changeset
5 *
18783
0783dd397f74 CVS --> Subversion in copyright notices
diego
parents: 18628
diff changeset
6 * Modified for use with MPlayer, detailed changelog at
0783dd397f74 CVS --> Subversion in copyright notices
diego
parents: 18628
diff changeset
7 * http://svn.mplayerhq.hu/mplayer/trunk/
15166
f5537cc95b02 Mark modified imported files as such to comply with GPL ¡ø2a.
diego
parents: 13745
diff changeset
8 *
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
9 */
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
10
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
11 // define for quicktime debugging (verbose logging):
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
12 //#define DEBUG_QTX_API
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
13
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
14 #include "config.h"
21261
a2e02e6b6379 Rename config.h --> debug.h and include config.h explicitly.
diego
parents: 18878
diff changeset
15 #include "debug.h"
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
16
33668
c78784f20d0b Fix compilation with --disable-qtx.
reimar
parents: 33412
diff changeset
17 // define for quicktime calls debugging and/or MacOS-level emulation:
c78784f20d0b Fix compilation with --disable-qtx.
reimar
parents: 33412
diff changeset
18 #if !defined(__APPLE__) && defined(CONFIG_QTX_CODECS)
c78784f20d0b Fix compilation with --disable-qtx.
reimar
parents: 33412
diff changeset
19 #define EMU_QTX_API
c78784f20d0b Fix compilation with --disable-qtx.
reimar
parents: 33412
diff changeset
20 #endif /* __APPLE__ */
c78784f20d0b Fix compilation with --disable-qtx.
reimar
parents: 33412
diff changeset
21
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
22 #include <assert.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
23 #include <errno.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
24 #include <fcntl.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
25 #include <stdio.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
26 #include <stdlib.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
27 #include <string.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
28 #include <unistd.h>
33412
2a2e9b6551d8 configure: Convert HAVE_SYS_MMAN_H into a 0/1 definition.
diego
parents: 31944
diff changeset
29 #if HAVE_SYS_MMAN_H
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
30 #include <sys/mman.h>
26105
c99d53b76ee5 Wrap '#include <sys/mman.h>' in HAVE_SYS_MMAN_H.
diego
parents: 25849
diff changeset
31 #endif
11868
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
32 #include <inttypes.h>
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
33
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 6768
diff changeset
34 #include "wine/windef.h"
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 6768
diff changeset
35 #include "wine/winerror.h"
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 6768
diff changeset
36 #include "wine/heap.h"
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 6768
diff changeset
37 #include "wine/module.h"
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 6768
diff changeset
38 #include "wine/pe_image.h"
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 6768
diff changeset
39 #include "wine/debugtools.h"
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
40
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
41 #undef HAVE_LIBDL
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
42
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
43 #ifdef HAVE_LIBDL
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
44 #include <dlfcn.h>
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 6768
diff changeset
45 #include "wine/elfdll.h"
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
46 #endif
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
47 #include "win32.h"
26999
0b21ffa03b9c Rename loader/driver.[ch] to loader/drv.[ch], otherwise loader/driver.h can
diego
parents: 26105
diff changeset
48 #include "drv.h"
30901
76a13038105e Rename get_path.[ch] --> path.[ch].
diego
parents: 30900
diff changeset
49 #include "path.h"
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
50
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
51 #ifdef EMU_QTX_API
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
52 #include "wrapper.h"
11868
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
53 static int report_func(void *stack_base, int stack_size, reg386_t *reg, uint32_t *flags);
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
54 static int report_func_ret(void *stack_base, int stack_size, reg386_t *reg, uint32_t *flags);
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
55 #endif
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
56
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
57 //#undef TRACE
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
58 //#define TRACE printf
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
59
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
60 //WINE_MODREF *local_wm=NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
61 modref_list* local_wm=NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
62
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
63 HANDLE SegptrHeap;
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
64
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
65 WINE_MODREF* MODULE_FindModule(LPCSTR m)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
66 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
67 modref_list* list=local_wm;
8277
db673d118d3f some extra debugging
alex
parents: 8271
diff changeset
68 TRACE("FindModule: Module %s request\n", m);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
69 if(list==NULL)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
70 return NULL;
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
71 // while(strcmp(m, list->wm->filename))
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
72 while(!strstr(list->wm->filename, m))
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
73 {
128
28091b3caff9 DLL loader updated from avifile-0.60beta4
arpi_esp
parents: 1
diff changeset
74 TRACE("%s: %x\n", list->wm->filename, list->wm->module);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
75 list=list->prev;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
76 if(list==NULL)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
77 return NULL;
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
78 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
79 TRACE("Resolved to %s\n", list->wm->filename);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
80 return list->wm;
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
81 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
82
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
83 static void MODULE_RemoveFromList(WINE_MODREF *mod)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
84 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
85 modref_list* list=local_wm;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
86 if(list==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
87 return;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
88 if(mod==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
89 return;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
90 if((list->prev==NULL)&&(list->next==NULL))
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
91 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
92 free(list);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
93 local_wm=NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
94 // uninstall_fs();
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
95 return;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
96 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
97 for(;list;list=list->prev)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
98 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
99 if(list->wm==mod)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
100 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
101 if(list->prev)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
102 list->prev->next=list->next;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
103 if(list->next)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
104 list->next->prev=list->prev;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
105 if(list==local_wm)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
106 local_wm=list->prev;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
107 free(list);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
108 return;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
109 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
110 }
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
111
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
112 }
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
113
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
114 WINE_MODREF *MODULE32_LookupHMODULE(HMODULE m)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
115 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
116 modref_list* list=local_wm;
8277
db673d118d3f some extra debugging
alex
parents: 8271
diff changeset
117 TRACE("LookupHMODULE: Module %X request\n", m);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
118 if(list==NULL)
8277
db673d118d3f some extra debugging
alex
parents: 8271
diff changeset
119 {
db673d118d3f some extra debugging
alex
parents: 8271
diff changeset
120 TRACE("LookupHMODULE failed\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
121 return NULL;
8277
db673d118d3f some extra debugging
alex
parents: 8271
diff changeset
122 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
123 while(m!=list->wm->module)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
124 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
125 // printf("Checking list %X wm %X module %X\n",
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
126 // list, list->wm, list->wm->module);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
127 list=list->prev;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
128 if(list==NULL)
8277
db673d118d3f some extra debugging
alex
parents: 8271
diff changeset
129 {
db673d118d3f some extra debugging
alex
parents: 8271
diff changeset
130 TRACE("LookupHMODULE failed\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
131 return NULL;
8277
db673d118d3f some extra debugging
alex
parents: 8271
diff changeset
132 }
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
133 }
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
134 TRACE("LookupHMODULE hit %p\n", list->wm);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
135 return list->wm;
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
136 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
137
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
138 /*************************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
139 * MODULE_InitDll
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
140 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
141 static WIN_BOOL MODULE_InitDll( WINE_MODREF *wm, DWORD type, LPVOID lpReserved )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
142 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
143 WIN_BOOL retv = TRUE;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
144
25798
c8c9b4e89fb7 Surround variable declarations by preprocessor conditionals to avoid warnings:
diego
parents: 25794
diff changeset
145 #ifdef DEBUG
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
146 static LPCSTR typeName[] = { "PROCESS_DETACH", "PROCESS_ATTACH",
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
147 "THREAD_ATTACH", "THREAD_DETACH" };
25798
c8c9b4e89fb7 Surround variable declarations by preprocessor conditionals to avoid warnings:
diego
parents: 25794
diff changeset
148 #endif
c8c9b4e89fb7 Surround variable declarations by preprocessor conditionals to avoid warnings:
diego
parents: 25794
diff changeset
149
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
150 assert( wm );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
151
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
152
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
153 /* Skip calls for modules loaded with special load flags */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
154
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
155 if ( ( wm->flags & WINE_MODREF_DONT_RESOLVE_REFS )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
156 || ( wm->flags & WINE_MODREF_LOAD_AS_DATAFILE ) )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
157 return TRUE;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
158
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
159
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
160 TRACE("(%s,%s,%p) - CALL\n", wm->modname, typeName[type], lpReserved );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
161
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
162 /* Call the initialization routine */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
163 switch ( wm->type )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
164 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
165 case MODULE32_PE:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
166 retv = PE_InitDLL( wm, type, lpReserved );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
167 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
168
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
169 case MODULE32_ELF:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
170 /* no need to do that, dlopen() already does */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
171 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
172
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
173 default:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
174 ERR("wine_modref type %d not handled.\n", wm->type );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
175 retv = FALSE;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
176 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
177 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
178
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
179 /* The state of the module list may have changed due to the call
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
180 to PE_InitDLL. We cannot assume that this module has not been
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
181 deleted. */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
182 TRACE("(%p,%s,%p) - RETURN %d\n", wm, typeName[type], lpReserved, retv );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
183
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
184 return retv;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
185 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
186
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
187 /*************************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
188 * MODULE_DllProcessAttach
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
189 *
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
190 * Send the process attach notification to all DLLs the given module
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
191 * depends on (recursively). This is somewhat complicated due to the fact that
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
192 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
193 * - we have to respect the module dependencies, i.e. modules implicitly
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
194 * referenced by another module have to be initialized before the module
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
195 * itself can be initialized
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
196 *
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
197 * - the initialization routine of a DLL can itself call LoadLibrary,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
198 * thereby introducing a whole new set of dependencies (even involving
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
199 * the 'old' modules) at any time during the whole process
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
200 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
201 * (Note that this routine can be recursively entered not only directly
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
202 * from itself, but also via LoadLibrary from one of the called initialization
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
203 * routines.)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
204 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
205 * Furthermore, we need to rearrange the main WINE_MODREF list to allow
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
206 * the process *detach* notifications to be sent in the correct order.
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
207 * This must not only take into account module dependencies, but also
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
208 * 'hidden' dependencies created by modules calling LoadLibrary in their
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
209 * attach notification routine.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
210 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
211 * The strategy is rather simple: we move a WINE_MODREF to the head of the
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
212 * list after the attach notification has returned. This implies that the
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
213 * detach notifications are called in the reverse of the sequence the attach
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
214 * notifications *returned*.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
215 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
216 * NOTE: Assumes that the process critical section is held!
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
217 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
218 */
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
219 static WIN_BOOL MODULE_DllProcessAttach( WINE_MODREF *wm, LPVOID lpReserved )
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
220 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
221 WIN_BOOL retv = TRUE;
24382
ea192b86100e warning fixes:
diego
parents: 21290
diff changeset
222 //int i;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
223 assert( wm );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
224
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
225 /* prevent infinite recursion in case of cyclical dependencies */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
226 if ( ( wm->flags & WINE_MODREF_MARKER )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
227 || ( wm->flags & WINE_MODREF_PROCESS_ATTACHED ) )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
228 return retv;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
229
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
230 TRACE("(%s,%p) - START\n", wm->modname, lpReserved );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
231
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
232 /* Tag current MODREF to prevent recursive loop */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
233 wm->flags |= WINE_MODREF_MARKER;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
234
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
235 /* Recursively attach all DLLs this one depends on */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
236 /* for ( i = 0; retv && i < wm->nDeps; i++ )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
237 if ( wm->deps[i] )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
238 retv = MODULE_DllProcessAttach( wm->deps[i], lpReserved );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
239 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
240 /* Call DLL entry point */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
241
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
242 //local_wm=wm;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
243 if(local_wm)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
244 {
30702
9fc9d1e788aa Do not cast the results of malloc/calloc/realloc.
diego
parents: 30660
diff changeset
245 local_wm->next = malloc(sizeof(modref_list));
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
246 local_wm->next->prev=local_wm;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
247 local_wm->next->next=NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
248 local_wm->next->wm=wm;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
249 local_wm=local_wm->next;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
250 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
251 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
252 {
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18783
diff changeset
253 local_wm = malloc(sizeof(modref_list));
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
254 local_wm->next=local_wm->prev=NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
255 local_wm->wm=wm;
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
256 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
257 /* Remove recursion flag */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
258 wm->flags &= ~WINE_MODREF_MARKER;
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
259
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
260 if ( retv )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
261 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
262 retv = MODULE_InitDll( wm, DLL_PROCESS_ATTACH, lpReserved );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
263 if ( retv )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
264 wm->flags |= WINE_MODREF_PROCESS_ATTACHED;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
265 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
266
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
267
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
268 TRACE("(%s,%p) - END\n", wm->modname, lpReserved );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
269
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
270 return retv;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
271 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
272
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
273 /*************************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
274 * MODULE_DllProcessDetach
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
275 *
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
276 * Send DLL process detach notifications. See the comment about calling
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
277 * sequence at MODULE_DllProcessAttach. Unless the bForceDetach flag
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
278 * is set, only DLLs with zero refcount are notified.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
279 */
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
280 static void MODULE_DllProcessDetach( WINE_MODREF* wm, WIN_BOOL bForceDetach, LPVOID lpReserved )
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
281 {
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
282 // WINE_MODREF *wm=local_wm;
24382
ea192b86100e warning fixes:
diego
parents: 21290
diff changeset
283 //modref_list* l = local_wm;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
284 wm->flags &= ~WINE_MODREF_PROCESS_ATTACHED;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
285 MODULE_InitDll( wm, DLL_PROCESS_DETACH, lpReserved );
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
286 /* while (l)
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
287 {
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
288 modref_list* f = l;
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
289 l = l->next;
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
290 free(f);
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
291 }
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
292 local_wm = 0;*/
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
293 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
294
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
295 /***********************************************************************
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
296 * MODULE_LoadLibraryExA (internal)
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
297 *
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
298 * Load a PE style module according to the load order.
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
299 *
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
300 * The HFILE parameter is not used and marked reserved in the SDK. I can
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
301 * only guess that it should force a file to be mapped, but I rather
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
302 * ignore the parameter because it would be extremely difficult to
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
303 * integrate this with different types of module represenations.
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
304 *
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
305 */
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
306 static WINE_MODREF *MODULE_LoadLibraryExA( LPCSTR libname, HFILE hfile, DWORD flags )
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
307 {
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
308 DWORD err = GetLastError();
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
309 WINE_MODREF *pwm;
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
310 // module_loadorder_t *plo;
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
311
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
312 SetLastError( ERROR_FILE_NOT_FOUND );
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
313 TRACE("Trying native dll '%s'\n", libname);
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
314 pwm = PE_LoadLibraryExA(libname, flags);
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
315 #ifdef HAVE_LIBDL
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
316 if(!pwm)
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
317 {
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
318 TRACE("Trying ELF dll '%s'\n", libname);
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
319 pwm=(WINE_MODREF*)ELFDLL_LoadLibraryExA(libname, flags);
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
320 }
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
321 #endif
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
322 // printf("0x%08x\n", pwm);
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
323 // break;
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
324 if(pwm)
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
325 {
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
326 /* Initialize DLL just loaded */
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
327 TRACE("Loaded module '%s' at 0x%08x, \n", libname, pwm->module);
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
328 /* Set the refCount here so that an attach failure will */
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
329 /* decrement the dependencies through the MODULE_FreeLibrary call. */
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
330 pwm->refCount++;
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
331
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
332 SetLastError( err ); /* restore last error */
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
333 return pwm;
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
334 }
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
335
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
336
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
337 WARN("Failed to load module '%s'; error=0x%08lx, \n", libname, GetLastError());
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
338 return NULL;
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
339 }
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
340
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
341 /***********************************************************************
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
342 * MODULE_FreeLibrary
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
343 *
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
344 * NOTE: Assumes that the process critical section is held!
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
345 */
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
346 static WIN_BOOL MODULE_FreeLibrary( WINE_MODREF *wm )
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
347 {
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
348 TRACE("(%s) - START\n", wm->modname );
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
349
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
350 /* Call process detach notifications */
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
351 MODULE_DllProcessDetach( wm, FALSE, NULL );
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
352
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
353 PE_UnloadLibrary(wm);
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
354
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
355 TRACE("END\n");
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
356
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
357 return TRUE;
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
358 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
359
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
360 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
361 * LoadLibraryExA (KERNEL32)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
362 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
363 HMODULE WINAPI LoadLibraryExA(LPCSTR libname, HANDLE hfile, DWORD flags)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
364 {
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
365 WINE_MODREF *wm = 0;
30913
e1e4487b9b43 Remove /usr[/local]/lib/win32 from the list of Win32 codec search paths.
diego
parents: 30907
diff changeset
366 char* listpath[] = { "", "", 0 };
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
367 char path[512];
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
368 char checked[2000];
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
369 int i = -1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
370
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
371 checked[0] = 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
372 if(!libname)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
373 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
374 SetLastError(ERROR_INVALID_PARAMETER);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
375 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
376 }
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
377
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
378 wm=MODULE_FindModule(libname);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
379 if(wm) return wm->module;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
380
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
381 // if(fs_installed==0)
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
382 // install_fs();
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
383
31944
68574c0269e4 Disable loading codecs from the current directory.
reimar
parents: 31390
diff changeset
384 // Do not load libraries from a path relative to the current directory
68574c0269e4 Disable loading codecs from the current directory.
reimar
parents: 31390
diff changeset
385 if (*libname != '/')
68574c0269e4 Disable loading codecs from the current directory.
reimar
parents: 31390
diff changeset
386 i++;
68574c0269e4 Disable loading codecs from the current directory.
reimar
parents: 31390
diff changeset
387
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
388 while (wm == 0 && listpath[++i])
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
389 {
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
390 if (i < 2)
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
391 {
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
392 if (i == 0)
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
393 /* check just original file name */
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
394 strncpy(path, libname, 511);
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
395 else
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
396 /* check default user path */
30907
b32527b30d17 Get rid of pointless def_path variable; use codec_path directly instead.
diego
parents: 30901
diff changeset
397 strncpy(path, codec_path, 300);
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
398 }
30907
b32527b30d17 Get rid of pointless def_path variable; use codec_path directly instead.
diego
parents: 30901
diff changeset
399 else if (strcmp(codec_path, listpath[i]))
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
400 /* path from the list */
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
401 strncpy(path, listpath[i], 300);
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
402 else
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
403 continue;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
404
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
405 if (i > 0)
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
406 {
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
407 strcat(path, "/");
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
408 strncat(path, libname, 100);
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
409 }
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
410 path[511] = 0;
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
411 wm = MODULE_LoadLibraryExA( path, hfile, flags );
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
412
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
413 if (!wm)
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
414 {
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
415 if (checked[0])
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
416 strcat(checked, ", ");
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
417 strcat(checked, path);
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
418 checked[1500] = 0;
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
419
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
420 }
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
421 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
422 if ( wm )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
423 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
424 if ( !MODULE_DllProcessAttach( wm, NULL ) )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
425 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
426 WARN_(module)("Attach failed for module '%s', \n", libname);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
427 MODULE_FreeLibrary(wm);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
428 SetLastError(ERROR_DLL_INIT_FAILED);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
429 MODULE_RemoveFromList(wm);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
430 wm = NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
431 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
432 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
433
25418
0cc73d213160 Stop MPlayer from complaining about bogus AviSynth DLL load failures.
diego
parents: 24382
diff changeset
434 if (!wm && !strstr(checked, "avisynth.dll"))
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
435 printf("Win32 LoadLibrary failed to load: %s\n", checked);
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 6768
diff changeset
436
18617
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
437 #define RVA(x) ((char *)wm->module+(unsigned int)(x))
33862
5d19df9dfda8 Add some runtime patching magic required for latest Cineform decoder.
reimar
parents: 33668
diff changeset
438 if (strstr(libname, "CFDecode2.ax") && wm)
5d19df9dfda8 Add some runtime patching magic required for latest Cineform decoder.
reimar
parents: 33668
diff changeset
439 {
5d19df9dfda8 Add some runtime patching magic required for latest Cineform decoder.
reimar
parents: 33668
diff changeset
440 if (PE_FindExportedFunction(wm, "DllGetClassObject", TRUE) == RVA(0xd00e0))
5d19df9dfda8 Add some runtime patching magic required for latest Cineform decoder.
reimar
parents: 33668
diff changeset
441 {
5d19df9dfda8 Add some runtime patching magic required for latest Cineform decoder.
reimar
parents: 33668
diff changeset
442 // Patch some movdqa to movdqu
5d19df9dfda8 Add some runtime patching magic required for latest Cineform decoder.
reimar
parents: 33668
diff changeset
443 // It is currently unclear why this is necessary, it seems
5d19df9dfda8 Add some runtime patching magic required for latest Cineform decoder.
reimar
parents: 33668
diff changeset
444 // to be some output frame, but our frame seems correctly
5d19df9dfda8 Add some runtime patching magic required for latest Cineform decoder.
reimar
parents: 33668
diff changeset
445 // aligned
5d19df9dfda8 Add some runtime patching magic required for latest Cineform decoder.
reimar
parents: 33668
diff changeset
446 int offsets[] = {0x7318c, 0x731ba, 0x731e0, 0x731fe, 0};
5d19df9dfda8 Add some runtime patching magic required for latest Cineform decoder.
reimar
parents: 33668
diff changeset
447 int i;
5d19df9dfda8 Add some runtime patching magic required for latest Cineform decoder.
reimar
parents: 33668
diff changeset
448 for (i = 0; offsets[i]; i++)
5d19df9dfda8 Add some runtime patching magic required for latest Cineform decoder.
reimar
parents: 33668
diff changeset
449 {
5d19df9dfda8 Add some runtime patching magic required for latest Cineform decoder.
reimar
parents: 33668
diff changeset
450 int ofs = offsets[i];
5d19df9dfda8 Add some runtime patching magic required for latest Cineform decoder.
reimar
parents: 33668
diff changeset
451 if (RVA(ofs)[0] == 0x66 && RVA(ofs)[1] == 0x0f &&
5d19df9dfda8 Add some runtime patching magic required for latest Cineform decoder.
reimar
parents: 33668
diff changeset
452 RVA(ofs)[2] == 0x7f)
5d19df9dfda8 Add some runtime patching magic required for latest Cineform decoder.
reimar
parents: 33668
diff changeset
453 RVA(ofs)[0] = 0xf3;
5d19df9dfda8 Add some runtime patching magic required for latest Cineform decoder.
reimar
parents: 33668
diff changeset
454 }
5d19df9dfda8 Add some runtime patching magic required for latest Cineform decoder.
reimar
parents: 33668
diff changeset
455 }
5d19df9dfda8 Add some runtime patching magic required for latest Cineform decoder.
reimar
parents: 33668
diff changeset
456 }
13621
8c6b747eeacf runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents: 13182
diff changeset
457 if (strstr(libname,"vp31vfw.dll") && wm)
8c6b747eeacf runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents: 13182
diff changeset
458 {
8c6b747eeacf runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents: 13182
diff changeset
459 int i;
8c6b747eeacf runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents: 13182
diff changeset
460
8c6b747eeacf runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents: 13182
diff changeset
461 // sse hack moved from patch dll into runtime patching
18617
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
462 if (PE_FindExportedFunction(wm, "DriverProc", TRUE)==RVA(0x1000)) {
13621
8c6b747eeacf runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents: 13182
diff changeset
463 fprintf(stderr, "VP3 DLL found\n");
18617
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
464 for (i=0;i<18;i++) RVA(0x4bd6)[i]=0x90;
13621
8c6b747eeacf runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents: 13182
diff changeset
465 }
8c6b747eeacf runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents: 13182
diff changeset
466 }
8c6b747eeacf runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents: 13182
diff changeset
467
12042
ebea9d9163b0 Support for vp5 and vp6 dll decoders
rtognimp
parents: 11868
diff changeset
468 // remove a few divs in the VP codecs that make trouble
ebea9d9163b0 Support for vp5 and vp6 dll decoders
rtognimp
parents: 11868
diff changeset
469 if (strstr(libname,"vp5vfw.dll") && wm)
ebea9d9163b0 Support for vp5 and vp6 dll decoders
rtognimp
parents: 11868
diff changeset
470 {
ebea9d9163b0 Support for vp5 and vp6 dll decoders
rtognimp
parents: 11868
diff changeset
471 int i;
18617
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
472 if (PE_FindExportedFunction(wm, "DriverProc", TRUE)==RVA(0x3930)) {
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
473 for (i=0;i<3;i++) RVA(0x4e86)[i]=0x90;
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
474 for (i=0;i<3;i++) RVA(0x5a23)[i]=0x90;
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
475 for (i=0;i<3;i++) RVA(0x5bff)[i]=0x90;
12042
ebea9d9163b0 Support for vp5 and vp6 dll decoders
rtognimp
parents: 11868
diff changeset
476 } else {
ebea9d9163b0 Support for vp5 and vp6 dll decoders
rtognimp
parents: 11868
diff changeset
477 fprintf(stderr, "Unsupported VP5 version\n");
ebea9d9163b0 Support for vp5 and vp6 dll decoders
rtognimp
parents: 11868
diff changeset
478 return 0;
ebea9d9163b0 Support for vp5 and vp6 dll decoders
rtognimp
parents: 11868
diff changeset
479 }
ebea9d9163b0 Support for vp5 and vp6 dll decoders
rtognimp
parents: 11868
diff changeset
480 }
ebea9d9163b0 Support for vp5 and vp6 dll decoders
rtognimp
parents: 11868
diff changeset
481
ebea9d9163b0 Support for vp5 and vp6 dll decoders
rtognimp
parents: 11868
diff changeset
482 if (strstr(libname,"vp6vfw.dll") && wm)
ebea9d9163b0 Support for vp5 and vp6 dll decoders
rtognimp
parents: 11868
diff changeset
483 {
ebea9d9163b0 Support for vp5 and vp6 dll decoders
rtognimp
parents: 11868
diff changeset
484 int i;
18617
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
485 if (PE_FindExportedFunction(wm, "DriverProc", TRUE)==RVA(0x3ef0)) {
12042
ebea9d9163b0 Support for vp5 and vp6 dll decoders
rtognimp
parents: 11868
diff changeset
486 // looks like VP 6.1.0.2
18617
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
487 for (i=0;i<6;i++) RVA(0x7268)[i]=0x90;
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
488 for (i=0;i<6;i++) RVA(0x7e83)[i]=0x90;
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
489 for (i=0;i<6;i++) RVA(0x806a)[i]=0x90;
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
490 } else if (PE_FindExportedFunction(wm, "DriverProc", TRUE)==RVA(0x4120)) {
12042
ebea9d9163b0 Support for vp5 and vp6 dll decoders
rtognimp
parents: 11868
diff changeset
491 // looks like VP 6.2.0.10
18617
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
492 for (i=0;i<6;i++) RVA(0x7688)[i]=0x90;
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
493 for (i=0;i<6;i++) RVA(0x82c3)[i]=0x90;
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
494 for (i=0;i<6;i++) RVA(0x84aa)[i]=0x90;
18628
ff4455b0bd7c Nop some instructions causing the vfwvp6 dll encoder to crash.
banan
parents: 18617
diff changeset
495 for (i=0;i<6;i++) RVA(0x1d2cc)[i]=0x90;
ff4455b0bd7c Nop some instructions causing the vfwvp6 dll encoder to crash.
banan
parents: 18617
diff changeset
496 for (i=0;i<6;i++) RVA(0x2179d)[i]=0x90;
ff4455b0bd7c Nop some instructions causing the vfwvp6 dll encoder to crash.
banan
parents: 18617
diff changeset
497 for (i=0;i<6;i++) RVA(0x1977f)[i]=0x90;
18617
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
498 } else if (PE_FindExportedFunction(wm, "DriverProc", TRUE)==RVA(0x3e70)) {
12422
ef68b86beaf4 Support vp6vfw.dll version 6.0.7.3
rtognimp
parents: 12042
diff changeset
499 // looks like VP 6.0.7.3
18617
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
500 for (i=0;i<6;i++) RVA(0x7559)[i]=0x90;
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
501 for (i=0;i<6;i++) RVA(0x81c3)[i]=0x90;
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
502 for (i=0;i<6;i++) RVA(0x839e)[i]=0x90;
12042
ebea9d9163b0 Support for vp5 and vp6 dll decoders
rtognimp
parents: 11868
diff changeset
503 } else {
ebea9d9163b0 Support for vp5 and vp6 dll decoders
rtognimp
parents: 11868
diff changeset
504 fprintf(stderr, "Unsupported VP6 version\n");
ebea9d9163b0 Support for vp5 and vp6 dll decoders
rtognimp
parents: 11868
diff changeset
505 return 0;
ebea9d9163b0 Support for vp5 and vp6 dll decoders
rtognimp
parents: 11868
diff changeset
506 }
ebea9d9163b0 Support for vp5 and vp6 dll decoders
rtognimp
parents: 11868
diff changeset
507 }
ebea9d9163b0 Support for vp5 and vp6 dll decoders
rtognimp
parents: 11868
diff changeset
508
13745
3db10035d297 Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents: 13622
diff changeset
509 // Windows Media Video 9 Advanced
3db10035d297 Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents: 13622
diff changeset
510 if (strstr(libname,"wmvadvd.dll") && wm)
3db10035d297 Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents: 13622
diff changeset
511 {
3db10035d297 Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents: 13622
diff changeset
512 // The codec calls IsRectEmpty with coords 0,0,0,0 => result is 0
3db10035d297 Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents: 13622
diff changeset
513 // but it really wants the rectangle to be not empty
18617
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
514 if (PE_FindExportedFunction(wm, "CreateInstance", TRUE)==RVA(0xb812)) {
13745
3db10035d297 Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents: 13622
diff changeset
515 // Dll version is 10.0.0.3645
18617
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
516 *RVA(0x8b0f)=0xeb; // Jump always, ignoring IsRectEmpty result
13745
3db10035d297 Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents: 13622
diff changeset
517 } else {
3db10035d297 Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents: 13622
diff changeset
518 fprintf(stderr, "Unsupported WMVA version\n");
3db10035d297 Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents: 13622
diff changeset
519 return 0;
3db10035d297 Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents: 13622
diff changeset
520 }
3db10035d297 Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents: 13622
diff changeset
521 }
3db10035d297 Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents: 13622
diff changeset
522
8318
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
523 if (strstr(libname,"QuickTime.qts") && wm)
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
524 {
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
525 void** ptr;
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
526 void *dispatch_addr;
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
527 int i;
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
528
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
529 // dispatch_addr = GetProcAddress(wm->module, "theQuickTimeDispatcher", TRUE);
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
530 dispatch_addr = PE_FindExportedFunction(wm, "theQuickTimeDispatcher", TRUE);
18617
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
531 if (dispatch_addr == RVA(0x124c30))
8318
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
532 {
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
533 fprintf(stderr, "QuickTime5 DLLs found\n");
18617
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
534 ptr = (void **)RVA(0x375ca4); // dispatch_ptr
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
535 for (i=0;i<5;i++) RVA(0x19e842)[i]=0x90; // make_new_region ?
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
536 for (i=0;i<28;i++) RVA(0x19e86d)[i]=0x90; // call__call_CreateCompatibleDC ?
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
537 for (i=0;i<5;i++) RVA(0x19e898)[i]=0x90; // jmp_to_call_loadbitmap ?
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
538 for (i=0;i<9;i++) RVA(0x19e8ac)[i]=0x90; // call__calls_OLE_shit ?
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
539 for (i=0;i<106;i++) RVA(0x261b10)[i]=0x90; // disable threads
8318
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
540 #if 0
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
541 /* CreateThread callers */
18617
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
542 for (i=0;i<5;i++) RVA(0x1487c5)[i]=0x90;
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
543 for (i=0;i<5;i++) RVA(0x14b275)[i]=0x90;
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
544 for (i=0;i<5;i++) RVA(0x1a24b1)[i]=0x90;
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
545 for (i=0;i<5;i++) RVA(0x1afc5a)[i]=0x90;
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
546 for (i=0;i<5;i++) RVA(0x2f799c)[i]=0x90;
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
547 for (i=0;i<5;i++) RVA(0x2f7efe)[i]=0x90;
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
548 for (i=0;i<5;i++) RVA(0x2fa33e)[i]=0x90;
8318
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
549 #endif
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
550
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
551 #if 0
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
552 /* TerminateQTML fix */
18617
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
553 for (i=0;i<47;i++) RVA(0x2fa3b8)[i]=0x90; // terminate thread
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
554 for (i=0;i<47;i++) RVA(0x2f7f78)[i]=0x90; // terminate thread
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
555 for (i=0;i<77;i++) RVA(0x1a13d5)[i]=0x90;
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
556 RVA(0x08e0ae)[0] = 0xc3; // font/dc remover
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
557 for (i=0;i<24;i++) RVA(0x07a1ad)[i]=0x90; // destroy window
8318
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
558 #endif
18617
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
559 } else if (dispatch_addr == RVA(0x13b330))
8318
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
560 {
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
561 fprintf(stderr, "QuickTime6 DLLs found\n");
18617
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
562 ptr = (void **)RVA(0x3b9524); // dispatcher_ptr
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
563 for (i=0;i<5;i++) RVA(0x2730cc)[i]=0x90; // make_new_region
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
564 for (i=0;i<28;i++) RVA(0x2730f7)[i]=0x90; // call__call_CreateCompatibleDC
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
565 for (i=0;i<5;i++) RVA(0x273122)[i]=0x90; // jmp_to_call_loadbitmap
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
566 for (i=0;i<9;i++) RVA(0x273131)[i]=0x90; // call__calls_OLE_shit
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
567 for (i=0;i<96;i++) RVA(0x2ac852)[i]=0x90; // disable threads
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
568 } else if (dispatch_addr == RVA(0x13c3e0))
10795
2ab9ab4f07b4 Support for QuickTime6.3 DLLs. Patch by Dima K. <dimakar@yahoo.com>
mosu
parents: 8451
diff changeset
569 {
2ab9ab4f07b4 Support for QuickTime6.3 DLLs. Patch by Dima K. <dimakar@yahoo.com>
mosu
parents: 8451
diff changeset
570 fprintf(stderr, "QuickTime6.3 DLLs found\n");
18617
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
571 ptr = (void **)RVA(0x3ca01c); // dispatcher_ptr
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
572 for (i=0;i<5;i++) RVA(0x268f6c)[i]=0x90; // make_new_region
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
573 for (i=0;i<28;i++) RVA(0x268f97)[i]=0x90; // call__call_CreateCompatibleDC
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
574 for (i=0;i<5;i++) RVA(0x268fc2)[i]=0x90; // jmp_to_call_loadbitmap
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
575 for (i=0;i<9;i++) RVA(0x268fd1)[i]=0x90; // call__calls_OLE_shit
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
576 for (i=0;i<96;i++) RVA(0x2b4722)[i]=0x90; // disable threads
8318
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
577 } else
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
578 {
8451
fb88ccbc5ccc compiler warning fixes
arpi
parents: 8318
diff changeset
579 fprintf(stderr, "Unsupported QuickTime version (%p)\n",
8318
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
580 dispatch_addr);
8451
fb88ccbc5ccc compiler warning fixes
arpi
parents: 8318
diff changeset
581 return 0;
8318
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
582 }
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
583
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
584 fprintf(stderr,"QuickTime.qts patched!!! old entry=%p\n",ptr[0]);
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
585
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
586 #ifdef EMU_QTX_API
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
587 report_entry = report_func;
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
588 report_ret = report_func_ret;
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
589 wrapper_target=ptr[0];
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
590 ptr[0]=wrapper;
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
591 #endif
1ed329d61051 both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents: 8286
diff changeset
592 }
18617
8a1439ab0d51 Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents: 15166
diff changeset
593 #undef RVA
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
594
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
595 return wm ? wm->module : 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
596 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
597
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
598
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
599 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
600 * LoadLibraryA (KERNEL32)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
601 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
602 HMODULE WINAPI LoadLibraryA(LPCSTR libname) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
603 return LoadLibraryExA(libname,0,0);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
604 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
605
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
606 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
607 * FreeLibrary
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
608 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
609 WIN_BOOL WINAPI FreeLibrary(HINSTANCE hLibModule)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
610 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
611 WIN_BOOL retv = FALSE;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
612 WINE_MODREF *wm;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
613
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
614 wm=MODULE32_LookupHMODULE(hLibModule);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
615
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
616 if ( !wm || !hLibModule )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
617 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
618 SetLastError( ERROR_INVALID_HANDLE );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
619 return 0;
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
620 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
621 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
622 retv = MODULE_FreeLibrary( wm );
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
623
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
624 MODULE_RemoveFromList(wm);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
625
128
28091b3caff9 DLL loader updated from avifile-0.60beta4
arpi_esp
parents: 1
diff changeset
626 /* garbage... */
28091b3caff9 DLL loader updated from avifile-0.60beta4
arpi_esp
parents: 1
diff changeset
627 if (local_wm == NULL) my_garbagecollection();
28091b3caff9 DLL loader updated from avifile-0.60beta4
arpi_esp
parents: 1
diff changeset
628
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
629 return retv;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
630 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
631
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
632 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
633 * GetProcAddress (KERNEL32.257)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
634 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
635 FARPROC WINAPI GetProcAddress( HMODULE hModule, LPCSTR function )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
636 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
637 return MODULE_GetProcAddress( hModule, function, TRUE );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
638 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
639
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
640 #ifdef DEBUG_QTX_API
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
641
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26999
diff changeset
642 /*
13622
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
643 http://lists.apple.com/archives/quicktime-api/2003/Jan/msg00278.html
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
644 */
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
645
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
646 struct ComponentParameters {
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
647 unsigned char flags; /* call modifiers: sync/async, deferred, immed, etc */
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
648 unsigned char paramSize; /* size in bytes of actual parameters passed to this call */
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
649 short what; /* routine selector, negative for Component management calls */
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
650 long params[1]; /* actual parameters for the indicated routine */
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
651 };
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
652 typedef struct ComponentParameters ComponentParameters;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
653
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
654 static char* component_func(int what){
13622
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
655 if (what < 0) // Range 0: Standard Component Calls
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
656 switch(what){
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
657 case -1: return "kComponentOpenSelect";
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
658 case -2: return "kComponentCloseSelect";
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
659 case -3: return "kComponentCanDoSelect";
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
660 case -4: return "kComponentVersionSelect";
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
661 case -5: return "kComponentRegisterSelect";
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
662 case -6: return "kComponentTargetSelect";
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
663 case -7: return "kComponentUnregisterSelect";
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
664 }
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
665
13622
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
666 if (what >= 0 && what <= 0xff) // Range 1: Generic codecs
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
667 switch(what & 0xff){
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
668 case 0: return "kImageCodecGetCodecInfoSelect";
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
669 case 1: return "kImageCodecGetCompressionTimeSelect";
13622
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
670 case 2: return "kImageCodecGetMaxCompressionSizeSelect";
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
671 case 3: return "kImageCodecPreCompressSelect";
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
672 case 4: return "kImageCodecBandCompressSelect";
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
673 case 5: return "kImageCodecPreDecompressSelect";
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
674 case 6: return "kImageCodecBandDecompressSelect";
13622
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
675 case 7: return "kImageCodecBusySelect";
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
676 // finish this list from the above URL
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
677 case 0x10: return "kImageCodecIsImageDescriptionEquivalentSelect";
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
678 case 0x12: return "kImageCodecDisposeMemorySelect";
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
679 case 0x14: return "kImageCodecNewImageBufferMemorySelect";
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
680 case 0x28: return "kImageCodecRequestGammaLevelSelect";
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
681 }
13622
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
682
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
683 //if (what >= 0x100 && what <= 0x1ff) // Range 2: Specific to QT Photo JPEG codecs
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
684
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
685 if (what >= 0x200 && what <= 0x2ff) // Range 3: Base Decompressor
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
686 switch(what & 0xff){
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
687 case 0: return "Preflight";
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
688 case 1: return "Initialize";
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
689 case 2: return "BeginBand";
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
690 case 3: return "DrawBand";
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
691 case 4: return "EndBand";
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
692 case 5: return "QueueStarting";
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
693 case 6: return "QueueStopping";
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
694 }
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
695
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
696 return "???";
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
697 }
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
698
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
699 static int c_level=0;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
700
25794
2c8cdb9123b8 Fix a ton of illegal identifiers. Identifiers starting with __ or _ and a
diego
parents: 25418
diff changeset
701 static int dump_component(char* name, int type, void* orig, ComponentParameters *params,void** glob){
2c8cdb9123b8 Fix a ton of illegal identifiers. Identifiers starting with __ or _ and a
diego
parents: 25418
diff changeset
702 int ( *orig)(ComponentParameters *params, void** glob) = orig;
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
703 int ret,i;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
704
13622
3c7d56b95a5a better component_func
alex
parents: 13621
diff changeset
705 fprintf(stderr,"%*sComponentCall: %s flags=0x%X size=%d what=0x%X %s\n",3*c_level,"",name,params->flags, params->paramSize, params->what, component_func(params->what));
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
706
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
707 for(i=0;i<params->paramSize/4;i++)
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
708 fprintf(stderr,"%*s param[%d] = 0x%X\n",3*c_level,"",i,params->params[i]);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
709
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
710 ++c_level;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
711 ret=orig(params,glob);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
712 --c_level;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26999
diff changeset
713
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
714 if(ret>=0x1000)
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
715 fprintf(stderr,"%*s return=0x%X\n",3*c_level,"",ret);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
716 else
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
717 fprintf(stderr,"%*s return=%d\n",3*c_level,"",ret);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
718 return ret;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
719 }
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
720
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
721 #define DECL_COMPONENT(sname,name,type) \
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
722 static void* real_ ## sname = NULL; \
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
723 static int fake_ ## sname(ComponentParameters *params,void** glob){ \
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
724 return dump_component(name,type,real_ ## sname, params, glob); \
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
725 }
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
726
31390
1edec80a4ad7 Rename loader/qt_comp.h --> loader/qt_comp_template.c.
diego
parents: 31138
diff changeset
727 #include "qt_comp_template.c"
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
728
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
729 #undef DECL_COMPONENT
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
730
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
731 #include "qt_fv.h"
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
732
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
733 #endif
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
734
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
735 #ifdef EMU_QTX_API
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
736
30499
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
737 #ifdef __OS2__
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
738 uint32_t _System DosQueryMem(void *, uint32_t *, uint32_t *);
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
739 #endif
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
740
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
741 static int is_invalid_ptr_handle(void *p)
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
742 {
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
743 #ifdef __OS2__
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
744 uint32_t cb = 1;
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
745 uint32_t fl;
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
746
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
747 if(DosQueryMem(p, &cb, &fl))
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
748 return 1;
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
749
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
750 // Occasionally, ptr with 'EXEC' attr is passed.
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
751 // On OS/2, however, malloc() never sets 'EXEC' attr.
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
752 // So ptr with 'EXEC' attr is invalid.
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
753 if(fl & 0x04)
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
754 return 1;
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
755
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
756 return 0;
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
757 #else
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
758 return (uint32_t)p >= 0x60000000;
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
759 #endif
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
760 }
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
761
11868
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
762 static uint32_t ret_array[4096];
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
763 static int ret_i=0;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
764
11868
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
765 static int report_func(void *stack_base, int stack_size, reg386_t *reg, uint32_t *flags)
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
766 {
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
767 #ifdef DEBUG_QTX_API
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
768 int i;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
769 int* dptr;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
770 void* pwrapper=NULL;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
771 void* pptr=NULL;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
772 char* pname=NULL;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
773 int plen=-1;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
774 // find the code:
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26999
diff changeset
775
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
776 dptr=0x62b67ae0;dptr+=2*((reg->eax>>16)&255);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
777 // printf("FUNC: flag=%d ptr=%p\n",dptr[0],dptr[1]);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
778 if(dptr[0]&255){
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
779 dptr=dptr[1];dptr+=4*(reg->eax&65535);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
780 // printf("FUNC: ptr2=%p eax=%p edx=%p\n",dptr[1],dptr[0],dptr[2]);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26999
diff changeset
781 pwrapper=dptr[1]; pptr=dptr[0]; plen=dptr[2];
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
782 } else {
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
783 pwrapper=0x62924910;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
784 switch(dptr[1]){
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
785 case 0x629248d0:
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
786 dptr=0x62b672c0;dptr+=2*(reg->eax&65535);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
787 // printf("FUNC: ptr2=%p eax=%p edx=%p\n",0x62924910,dptr[0],dptr[1]);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26999
diff changeset
788 pptr=dptr[0]; plen=dptr[1];
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
789 break;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
790 case 0x62924e40:
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
791 dptr=0x62b67c70;dptr+=2*(reg->eax&65535);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
792 // printf("FUNC: ptr2=%p eax=%p edx=%p\n",0x62924910,dptr[0],dptr[1]);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26999
diff changeset
793 pptr=dptr[0]; plen=dptr[1];
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
794 break;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
795 case 0x62924e60:
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
796 dptr=0x62b68108;if(reg->eax&0x8000) dptr+=2*(reg->eax|0xffff0000); else dptr+=2*(reg->eax&65535);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
797 // printf("FUNC: ptr2=%p eax=%p edx=%p\n",0x62924910,dptr[0],dptr[1]);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26999
diff changeset
798 pptr=dptr[0]; plen=dptr[1];
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
799 break;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
800 case 0x62924e80:
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
801 dptr=0x62b68108;if(reg->eax&0x8000) dptr+=2*(reg->eax|0xffff0000); else dptr+=2*(reg->eax&65535);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
802 // printf("FUNC: ptr2=%p eax=%p edx=%p\n",0x62924910,dptr[0],dptr[1]);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26999
diff changeset
803 pptr=dptr[0]; plen=dptr[1];
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
804 break;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
805 default:
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
806 printf("FUNC: unknown ptr & psize!\n");
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
807 pwrapper=dptr[1];
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
808 }
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
809 }
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
810
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
811 for(i=0;qt_fv_list[i].name;i++){
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
812 if(qt_fv_list[i].id==reg->eax){
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
813 pname=qt_fv_list[i].name;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
814 break;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
815 }
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
816 }
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
817
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
818 printf("FUNC[%X/%s]: wrapper=%p func=%p len=%d\n",reg->eax,
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
819 pname?pname:"???",pwrapper,pptr,plen);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
820
11868
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
821 printf("FUNC: caller=%p ebx=%p\n",((uint32_t *)stack_base)[0],reg->ebx);
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
822
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
823 if(pname)
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
824 printf("%*sENTER(%d): %s(",ret_i*2,"",ret_i,pname);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
825 else
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
826 printf("%*sENTER(%d): %X(",ret_i*2,"",ret_i,reg->eax);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
827 for (i=0;i<plen/4;i++){
11868
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
828 unsigned int val=((uint32_t *)stack_base)[1+i];
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
829 unsigned char* fcc=&val;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
830 printf("%s0x%X", i?", ":"",val);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
831 if(fcc[0]>=0x20 && fcc[0]<128 &&
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
832 fcc[1]>=0x20 && fcc[1]<128 &&
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
833 fcc[2]>=0x20 && fcc[2]<128 &&
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
834 fcc[3]>=0x20 && fcc[3]<128) printf("='%c%c%c%c'",fcc[3],fcc[2],fcc[1],fcc[0]);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
835 else if(val>=8 && val<65536) printf("=%d",val);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
836 }
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
837 printf(")\n");
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
838 fflush(stdout);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
839
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
840 #endif
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26999
diff changeset
841
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
842 // emulate some functions:
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
843 switch(reg->eax){
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
844 // memory management:
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
845 case 0x150011: //NewPtrClear
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
846 case 0x150012: //NewPtrSysClear
30702
9fc9d1e788aa Do not cast the results of malloc/calloc/realloc.
diego
parents: 30660
diff changeset
847 reg->eax = malloc(((uint32_t *)stack_base)[1]);
11868
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
848 memset((void *)reg->eax,0,((uint32_t *)stack_base)[1]);
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
849 #ifdef DEBUG_QTX_API
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
850 printf("%*sLEAVE(%d): EMULATED! 0x%X\n",ret_i*2,"",ret_i, reg->eax);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
851 #endif
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
852 return 1;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
853 case 0x15000F: //NewPtr
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
854 case 0x150010: //NewPtrSys
30702
9fc9d1e788aa Do not cast the results of malloc/calloc/realloc.
diego
parents: 30660
diff changeset
855 reg->eax = malloc(((uint32_t *)stack_base)[1]);
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
856 #ifdef DEBUG_QTX_API
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
857 printf("%*sLEAVE(%d): EMULATED! 0x%X\n",ret_i*2,"",ret_i, reg->eax);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
858 #endif
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
859 return 1;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
860 case 0x15002f: //DisposePtr
30499
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
861 if(is_invalid_ptr_handle(((void **)stack_base)[1]))
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
862 printf("WARNING! Invalid Ptr handle!\n");
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
863 else
30499
09b72a74d6da Add win32 loader support for OS/2
komh
parents: 29263
diff changeset
864 free(((void **)stack_base)[1]);
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
865 reg->eax=0;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
866 #ifdef DEBUG_QTX_API
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
867 printf("%*sLEAVE(%d): EMULATED! 0x%X\n",ret_i*2,"",ret_i, reg->eax);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
868 #endif
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
869 return 1;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
870 // mutexes:
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
871 case 0x1d0033: //QTMLCreateMutex
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
872 reg->eax=0xdeadbabe;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
873 #ifdef DEBUG_QTX_API
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
874 printf("%*sLEAVE(%d): EMULATED! 0x%X\n",ret_i*2,"",ret_i, reg->eax);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
875 #endif
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
876 return 1;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
877 case 0x1d0034: //QTMLDestroyMutex
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
878 case 0x1d0035: //QTMLGrabMutex
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
879 case 0x1d0036: //QTMLReturnMutex
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
880 case 0x1d003d: //QTMLTryGrabMutex
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
881 reg->eax=0;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
882 #ifdef DEBUG_QTX_API
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
883 printf("%*sLEAVE(%d): EMULATED! 0x%X\n",ret_i*2,"",ret_i, reg->eax);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
884 #endif
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
885 return 1;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
886 }
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
887
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
888 #if 0
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
889 switch(reg->eax){
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
890 // case 0x00010000:
11868
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
891 // printf("FUNC: ImageCodecInitialize/ImageCodecGetCodecInfo(ci=%p,&icap=%p)\n",((uint32_t *)stack_base)[1],((uint32_t *)stack_base)[4]);
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
892 // break;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
893 case 0x00010003:
11868
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
894 printf("FUNC: CountComponents(&desc=%p)\n",((uint32_t *)stack_base)[1]);
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
895 break;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
896 case 0x00010004:
11868
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
897 printf("FUNC: FindNextComponent(prev=%p,&desc=%p)\n",((uint32_t *)stack_base)[1],((uint32_t *)stack_base)[2]);
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
898 break;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
899 case 0x00010007:
11868
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
900 printf("FUNC: OpenComponent(prev=%p)\n",((uint32_t *)stack_base)[1]);
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
901 break;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
902 case 0x0003008b:
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
903 printf("FUNC: QTNewGWorldFromPtr(&pts=%p,fourcc=%.4s,&rect=%p,x1=%p,x2=%p,x3=%p,plane=%p,stride=%d)\n",
11868
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
904 ((uint32_t *)stack_base)[1],
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
905 &(((uint32_t *)stack_base)[2]),
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
906 ((uint32_t *)stack_base)[3],
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
907 ((uint32_t *)stack_base)[4],
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
908 ((uint32_t *)stack_base)[5],
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
909 ((uint32_t *)stack_base)[6],
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
910 ((uint32_t *)stack_base)[7],
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
911 ((uint32_t *)stack_base)[8]);
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
912 break;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
913 case 0x001c0018:
11868
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
914 printf("FUNC: GetGWorldPixMap(gworld=%p)\n",((uint32_t *)stack_base)[1]);
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
915 break;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
916 case 0x00110001:
11868
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
917 printf("FUNC: Gestalt(fourcc=%.4s, &ret=%p)\n",&(((uint32_t *)stack_base)[1]),((uint32_t *)stack_base)[2]);
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
918 break;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
919 default: {
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
920 int i;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
921 for(i=0;qt_fv_list[i].name;i++){
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
922 if(qt_fv_list[i].id==reg->eax){
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
923 printf("FUNC: %s\n",qt_fv_list[i].name);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
924 break;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
925 }
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
926 }
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
927 }
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
928 }
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
929
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26999
diff changeset
930 // print stack/reg information
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
931 printf("ENTER(%d) stack = %d bytes @ %p\n"
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
932 "eax = 0x%08x edx = 0x%08x ebx = 0x%08x ecx = 0x%08x\n"
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
933 "esp = 0x%08x ebp = 0x%08x esi = 0x%08x edi = 0x%08x\n"
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
934 "flags = 0x%08x\n", ret_i,
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
935 stack_size, stack_base,
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
936 reg->eax, reg->edx, reg->ebx, reg->ecx,
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
937 reg->esp, reg->ebp, reg->esi, reg->edi,
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
938 *flags);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
939 #endif
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
940
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
941 // save ret addr:
11868
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
942 ret_array[ret_i]=((uint32_t *)stack_base)[0];
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
943 ++ret_i;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
944
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
945 #if 0
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26999
diff changeset
946 // print first 7 longs in the stack (return address, arg[1], arg[2] ... )
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
947 printf("stack[] = { ");
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
948 for (i=0;i<7;i++) {
11868
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
949 printf("%08x ", ((uint32_t *)stack_base)[i]);
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
950 }
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
951 printf("}\n\n");
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
952 #endif
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26999
diff changeset
953
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26999
diff changeset
954 // // mess with function parameters
11868
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
955 // ((uint32_t *)stack_base)[1] = 0x66554433;
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
956
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
957 // // mess with return address...
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
958 // reg->eax = 0x11223344;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
959 return 0;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
960 }
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
961
11868
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
962 static int report_func_ret(void *stack_base, int stack_size, reg386_t *reg, uint32_t *flags)
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
963 {
24382
ea192b86100e warning fixes:
diego
parents: 21290
diff changeset
964 //int i;
25798
c8c9b4e89fb7 Surround variable declarations by preprocessor conditionals to avoid warnings:
diego
parents: 25794
diff changeset
965 #ifdef DEBUG_QTX_API
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
966 short err;
25798
c8c9b4e89fb7 Surround variable declarations by preprocessor conditionals to avoid warnings:
diego
parents: 25794
diff changeset
967 #endif
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
968
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
969 // restore ret addr:
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
970 --ret_i;
11868
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
971 ((uint32_t *)stack_base)[0]=ret_array[ret_i];
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
972
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
973 #ifdef DEBUG_QTX_API
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
974
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
975 #if 1
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
976 printf("%*sLEAVE(%d): 0x%X",ret_i*2,"",ret_i, reg->eax);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
977 err=reg->eax;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
978 if(err && (reg->eax>>16)==0) printf(" = %d",err);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
979 printf("\n");
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
980 fflush(stdout);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
981 #else
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26999
diff changeset
982 // print stack/reg information
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
983 printf("LEAVE(%d) stack = %d bytes @ %p\n"
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
984 "eax = 0x%08x edx = 0x%08x ebx = 0x%08x ecx = 0x%08x\n"
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
985 "esp = 0x%08x ebp = 0x%08x esi = 0x%08x edi = 0x%08x\n"
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
986 "flags = 0x%08x\n", ret_i,
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
987 stack_size, stack_base,
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
988 reg->eax, reg->edx, reg->ebx, reg->ecx,
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
989 reg->esp, reg->ebp, reg->esi, reg->edi,
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
990 *flags);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
991 #endif
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
992
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
993 #if 0
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26999
diff changeset
994 // print first 7 longs in the stack (return address, arg[1], arg[2] ... )
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
995 printf("stack[] = { ");
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
996 for (i=0;i<7;i++) {
11868
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
997 printf("%08x ", ((uint32_t *)stack_base)[i]);
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
998 }
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
999 printf("}\n\n");
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1000 #endif
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1001
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1002 #endif
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26999
diff changeset
1003
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26999
diff changeset
1004 // // mess with function parameters
11868
711e584107af switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents: 10795
diff changeset
1005 // ((uint32_t *)stack_base)[1] = 0x66554433;
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1006
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1007 // // mess with return address...
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1008 // reg->eax = 0x11223344;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1009 return 0;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1010 }
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1011
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1012 #endif
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1013
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1014 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1015 * MODULE_GetProcAddress (internal)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1016 */
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
1017 FARPROC MODULE_GetProcAddress(
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1018 HMODULE hModule, /* [in] current module handle */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1019 LPCSTR function, /* [in] function to be looked up */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1020 WIN_BOOL snoop )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1021 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1022 WINE_MODREF *wm = MODULE32_LookupHMODULE( hModule );
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
1023 // WINE_MODREF *wm=local_wm;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1024 FARPROC retproc;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1025
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1026 #ifdef DEBUG_QTX_API
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1027 if (HIWORD(function))
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1028 fprintf(stderr,"XXX GetProcAddress(%08lx,%s)\n",(DWORD)hModule,function);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1029 else
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1030 fprintf(stderr,"XXX GetProcAddress(%08lx,%p)\n",(DWORD)hModule,function);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1031 #endif
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1032
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1033 // TRACE_(win32)("(%08lx,%s)\n",(DWORD)hModule,function);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1034 // else
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1035 // TRACE_(win32)("(%08lx,%p)\n",(DWORD)hModule,function);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1036
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1037 if (!wm) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1038 SetLastError(ERROR_INVALID_HANDLE);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1039 return (FARPROC)0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1040 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1041 switch (wm->type)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1042 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1043 case MODULE32_PE:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1044 retproc = PE_FindExportedFunction( wm, function, snoop );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1045 if (!retproc) SetLastError(ERROR_PROC_NOT_FOUND);
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1046 break;
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
1047 #ifdef HAVE_LIBDL
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1048 case MODULE32_ELF:
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
1049 retproc = (FARPROC) dlsym( (void*) wm->module, function);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1050 if (!retproc) SetLastError(ERROR_PROC_NOT_FOUND);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1051 return retproc;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1052 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1053 default:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1054 ERR("wine_modref type %d not handled.\n",wm->type);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1055 SetLastError(ERROR_INVALID_HANDLE);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1056 return (FARPROC)0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1057 }
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1058
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1059 #ifdef EMU_QTX_API
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1060 if (HIWORD(function) && retproc){
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1061
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1062 #ifdef DEBUG_QTX_API
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1063 #define DECL_COMPONENT(sname,name,type) \
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1064 if(!strcmp(function,name)){ \
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1065 fprintf(stderr,name "dispatcher catched -> %p\n",retproc); \
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1066 real_ ## sname = retproc; retproc = fake_ ## sname; \
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1067 }
31390
1edec80a4ad7 Rename loader/qt_comp.h --> loader/qt_comp_template.c.
diego
parents: 31138
diff changeset
1068 #include "qt_comp_template.c"
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1069 #undef DECL_COMPONENT
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1070 #endif
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1071
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1072 if(!strcmp(function,"theQuickTimeDispatcher")
25794
2c8cdb9123b8 Fix a ton of illegal identifiers. Identifiers starting with __ or _ and a
diego
parents: 25418
diff changeset
1073 // || !strcmp(function,"CallComponentFunctionWithStorage")
2c8cdb9123b8 Fix a ton of illegal identifiers. Identifiers starting with __ or _ and a
diego
parents: 25418
diff changeset
1074 // || !strcmp(function,"CallComponent")
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1075 ){
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1076 fprintf(stderr,"theQuickTimeDispatcher catched -> %p\n",retproc);
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1077 report_entry = report_func;
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1078 report_ret = report_func_ret;
13182
25cb0d6432d4 loader gcc warning fixes and avifile sync
rathann
parents: 12422
diff changeset
1079 wrapper_target=(void(*)(void))retproc;
8451
fb88ccbc5ccc compiler warning fixes
arpi
parents: 8318
diff changeset
1080 retproc=(FARPROC)wrapper;
8269
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1081 }
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1082
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1083 }
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1084 #endif
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1085
8b905703a450 - qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents: 7386
diff changeset
1086 return retproc;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1087 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1088
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
1089 static int acounter = 0;
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
1090 void CodecAlloc(void)
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
1091 {
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
1092 acounter++;
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
1093 //printf("**************CODEC ALLOC %d\n", acounter);
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
1094 }
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
1095
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
1096 void CodecRelease(void)
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
1097 {
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
1098 acounter--;
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 2651
diff changeset
1099 //printf("**************CODEC RELEASE %d\n", acounter);
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
1100 if (acounter == 0)
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
1101 {
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
1102 for (;;)
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
1103 {
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
1104 modref_list* list = local_wm;
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
1105 if (!local_wm)
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
1106 break;
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
1107 //printf("CODECRELEASE %p\n", list);
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
1108 MODULE_FreeLibrary(list->wm);
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
1109 MODULE_RemoveFromList(list->wm);
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
1110 if (local_wm == NULL)
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
1111 my_garbagecollection();
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
1112 }
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
1113 }
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
1114 }