Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
7df1fbb3
Commit
7df1fbb3
authored
Nov 01, 1998
by
Ulrich Weigand
Committed by
Alexandre Julliard
Nov 01, 1998
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Run Winelib applications as 32-bit processes in the initial task.
Simplified/removed several special 'if (__winelib)' cases in Wine main code obsoleted by that change.
parent
718cbaea
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
150 additions
and
133 deletions
+150
-133
pe_image.h
include/pe_image.h
+1
-0
winestub.c
library/winestub.c
+4
-7
elf.c
loader/elf.c
+63
-51
module.c
loader/module.c
+18
-26
resource.c
loader/resource.c
+50
-45
callback.c
misc/callback.c
+13
-1
win.c
windows/win.c
+1
-3
No files found.
include/pe_image.h
View file @
7df1fbb3
...
@@ -72,6 +72,7 @@ typedef struct {
...
@@ -72,6 +72,7 @@ typedef struct {
ELF_STDCALL_STUB
*
stubs
;
ELF_STDCALL_STUB
*
stubs
;
}
ELF_MODREF
;
}
ELF_MODREF
;
extern
struct
_wine_modref
*
ELF_CreateDummyModule
(
LPCSTR
,
LPCSTR
,
struct
_PDB32
*
);
extern
HMODULE32
ELF_LoadLibraryEx32A
(
LPCSTR
,
struct
_PDB32
*
,
HFILE32
,
DWORD
);
extern
HMODULE32
ELF_LoadLibraryEx32A
(
LPCSTR
,
struct
_PDB32
*
,
HFILE32
,
DWORD
);
extern
FARPROC32
ELF_FindExportedFunction
(
struct
_PDB32
*
process
,
struct
_wine_modref
*
wm
,
LPCSTR
funcName
);
extern
FARPROC32
ELF_FindExportedFunction
(
struct
_PDB32
*
process
,
struct
_wine_modref
*
wm
,
LPCSTR
funcName
);
...
...
library/winestub.c
View file @
7df1fbb3
...
@@ -5,8 +5,9 @@
...
@@ -5,8 +5,9 @@
#include "xmalloc.h"
#include "xmalloc.h"
extern
int
PASCAL
WinMain
(
HINSTANCE32
,
HINSTANCE32
,
LPSTR
,
int
);
extern
int
PASCAL
WinMain
(
HINSTANCE32
,
HINSTANCE32
,
LPSTR
,
int
);
extern
BOOL32
MAIN_WinelibInit
(
int
*
argc
,
char
*
argv
[]
);
extern
void
TASK_Reschedule
(
void
);
/* external declaration here because we don't want to depend on Wine headers */
extern
HINSTANCE32
MAIN_WinelibInit
(
int
*
argc
,
char
*
argv
[]
);
/* Most Windows C/C++ compilers use something like this to */
/* Most Windows C/C++ compilers use something like this to */
/* access argc and argv globally: */
/* access argc and argv globally: */
...
@@ -21,7 +22,7 @@ int main( int argc, char *argv [] )
...
@@ -21,7 +22,7 @@ int main( int argc, char *argv [] )
_ARGC
=
argc
;
_ARGC
=
argc
;
_ARGV
=
(
char
**
)
argv
;
_ARGV
=
(
char
**
)
argv
;
if
(
!
MAIN_WinelibInit
(
&
argc
,
argv
))
return
0
;
if
(
!
(
hInstance
=
MAIN_WinelibInit
(
&
argc
,
argv
)
))
return
0
;
/* Alloc szCmdParam */
/* Alloc szCmdParam */
for
(
i
=
1
;
i
<
argc
;
i
++
)
len
+=
strlen
(
argv
[
i
])
+
1
;
for
(
i
=
1
;
i
<
argc
;
i
++
)
len
+=
strlen
(
argv
[
i
])
+
1
;
...
@@ -31,10 +32,6 @@ int main( int argc, char *argv [] )
...
@@ -31,10 +32,6 @@ int main( int argc, char *argv [] )
else
lpszCmdParam
[
0
]
=
'\0'
;
else
lpszCmdParam
[
0
]
=
'\0'
;
for
(
i
=
2
;
i
<
argc
;
i
++
)
strcat
(
strcat
(
lpszCmdParam
,
" "
),
argv
[
i
]);
for
(
i
=
2
;
i
<
argc
;
i
++
)
strcat
(
strcat
(
lpszCmdParam
,
" "
),
argv
[
i
]);
hInstance
=
WinExec32
(
*
argv
,
SW_SHOWNORMAL
);
TASK_Reschedule
();
InitApp
(
hInstance
);
return
WinMain
(
hInstance
,
/* hInstance */
return
WinMain
(
hInstance
,
/* hInstance */
0
,
/* hPrevInstance */
0
,
/* hPrevInstance */
lpszCmdParam
,
/* lpszCmdParam */
lpszCmdParam
,
/* lpszCmdParam */
...
...
loader/elf.c
View file @
7df1fbb3
...
@@ -25,67 +25,24 @@
...
@@ -25,67 +25,24 @@
#include "module.h"
#include "module.h"
#include "debug.h"
#include "debug.h"
#if defined(HAVE_LIBDL) && defined(HAVE_DLFCN_H)
WINE_MODREF
*
ELF_CreateDummyModule
(
LPCSTR
libname
,
LPCSTR
modname
,
PDB32
*
process
)
#define UNIX_DLL_ENDING "so"
{
#define STUBSIZE 4095
#include <dlfcn.h>
HMODULE32
ELF_LoadLibraryEx32A
(
LPCSTR
libname
,
PDB32
*
process
,
HANDLE32
hf
,
DWORD
flags
)
{
WINE_MODREF
*
wm
;
char
*
modname
,
*
s
,
*
t
,
*
x
;
LPVOID
*
dlhandle
;
PIMAGE_DOS_HEADER
dh
;
PIMAGE_DOS_HEADER
dh
;
PIMAGE_NT_HEADERS
nth
;
PIMAGE_NT_HEADERS
nth
;
PIMAGE_SECTION_HEADER
sh
;
PIMAGE_SECTION_HEADER
sh
;
HMODULE32
hmod
;
WINE_MODREF
*
wm
;
HMODULE32
hmod
;
t
=
HeapAlloc
(
process
->
heap
,
HEAP_ZERO_MEMORY
,
strlen
(
libname
)
+
strlen
(
"lib.so"
)
+
1
);
*
t
=
'\0'
;
/* copy path to tempvar ... */
s
=
strrchr
(
libname
,
'/'
);
if
(
!
s
)
s
=
strrchr
(
libname
,
'\\'
);
if
(
s
)
{
strncpy
(
t
,
libname
,
s
-
libname
+
1
);
t
[
s
-
libname
+
1
]
=
'\0'
;
}
else
s
=
(
LPSTR
)
libname
;
modname
=
s
;
/* append "lib" foo ".so" */
strcat
(
t
,
"lib"
);
x
=
t
+
strlen
(
t
);
strcat
(
t
,
s
);
s
=
strchr
(
x
,
'.'
);
while
(
s
)
{
if
(
!
strcasecmp
(
s
,
".dll"
))
{
strcpy
(
s
+
1
,
UNIX_DLL_ENDING
);
break
;
}
s
=
strchr
(
s
+
1
,
'.'
);
}
/* FIXME: make UNIX filename from DOS fn? */
/* ... and open it */
dlhandle
=
dlopen
(
t
,
RTLD_NOW
);
if
(
!
dlhandle
)
{
HeapFree
(
process
->
heap
,
0
,
t
);
return
0
;
}
wm
=
(
WINE_MODREF
*
)
HeapAlloc
(
process
->
heap
,
HEAP_ZERO_MEMORY
,
sizeof
(
*
wm
));
wm
=
(
WINE_MODREF
*
)
HeapAlloc
(
process
->
heap
,
HEAP_ZERO_MEMORY
,
sizeof
(
*
wm
));
wm
->
type
=
MODULE32_ELF
;
wm
->
type
=
MODULE32_ELF
;
wm
->
binfmt
.
elf
.
dlhandle
=
dlhandle
;
/* FIXME: hmm, order? */
/* FIXME: hmm, order? */
wm
->
next
=
process
->
modref_list
;
wm
->
next
=
process
->
modref_list
;
process
->
modref_list
=
wm
;
process
->
modref_list
=
wm
;
wm
->
modname
=
HEAP_strdupA
(
process
->
heap
,
0
,
modname
);
wm
->
modname
=
HEAP_strdupA
(
process
->
heap
,
0
,
modname
);
wm
->
longname
=
HEAP_strdupA
(
process
->
heap
,
0
,
t
);
wm
->
longname
=
HEAP_strdupA
(
process
->
heap
,
0
,
libname
);
hmod
=
(
HMODULE32
)
HeapAlloc
(
process
->
heap
,
HEAP_ZERO_MEMORY
,
sizeof
(
IMAGE_DOS_HEADER
)
+
sizeof
(
IMAGE_NT_HEADERS
)
+
sizeof
(
IMAGE_SECTION_HEADER
)
+
100
);
hmod
=
(
HMODULE32
)
HeapAlloc
(
process
->
heap
,
HEAP_ZERO_MEMORY
,
sizeof
(
IMAGE_DOS_HEADER
)
+
sizeof
(
IMAGE_NT_HEADERS
)
+
sizeof
(
IMAGE_SECTION_HEADER
)
+
100
);
dh
=
(
PIMAGE_DOS_HEADER
)
hmod
;
dh
=
(
PIMAGE_DOS_HEADER
)
hmod
;
...
@@ -125,8 +82,63 @@ ELF_LoadLibraryEx32A(LPCSTR libname,PDB32 *process,HANDLE32 hf,DWORD flags) {
...
@@ -125,8 +82,63 @@ ELF_LoadLibraryEx32A(LPCSTR libname,PDB32 *process,HANDLE32 hf,DWORD flags) {
sh
->
PointerToRawData
=
0
;
sh
->
PointerToRawData
=
0
;
sh
->
Characteristics
=
IMAGE_SCN_CNT_CODE
|
IMAGE_SCN_CNT_INITIALIZED_DATA
|
IMAGE_SCN_MEM_EXECUTE
|
IMAGE_SCN_MEM_READ
;
sh
->
Characteristics
=
IMAGE_SCN_CNT_CODE
|
IMAGE_SCN_CNT_INITIALIZED_DATA
|
IMAGE_SCN_MEM_EXECUTE
|
IMAGE_SCN_MEM_READ
;
wm
->
module
=
hmod
;
wm
->
module
=
hmod
;
SNOOP_RegisterDLL
(
hmod
,
libname
,
STUBSIZE
/
sizeof
(
ELF_STDCALL_STUB
));
return
wm
;
return
hmod
;
}
#if defined(HAVE_LIBDL) && defined(HAVE_DLFCN_H)
#define UNIX_DLL_ENDING "so"
#define STUBSIZE 4095
#include <dlfcn.h>
HMODULE32
ELF_LoadLibraryEx32A
(
LPCSTR
libname
,
PDB32
*
process
,
HANDLE32
hf
,
DWORD
flags
)
{
WINE_MODREF
*
wm
;
char
*
modname
,
*
s
,
*
t
,
*
x
;
LPVOID
*
dlhandle
;
t
=
HeapAlloc
(
process
->
heap
,
HEAP_ZERO_MEMORY
,
strlen
(
libname
)
+
strlen
(
"lib.so"
)
+
1
);
*
t
=
'\0'
;
/* copy path to tempvar ... */
s
=
strrchr
(
libname
,
'/'
);
if
(
!
s
)
s
=
strrchr
(
libname
,
'\\'
);
if
(
s
)
{
strncpy
(
t
,
libname
,
s
-
libname
+
1
);
t
[
s
-
libname
+
1
]
=
'\0'
;
}
else
s
=
(
LPSTR
)
libname
;
modname
=
s
;
/* append "lib" foo ".so" */
strcat
(
t
,
"lib"
);
x
=
t
+
strlen
(
t
);
strcat
(
t
,
s
);
s
=
strchr
(
x
,
'.'
);
while
(
s
)
{
if
(
!
strcasecmp
(
s
,
".dll"
))
{
strcpy
(
s
+
1
,
UNIX_DLL_ENDING
);
break
;
}
s
=
strchr
(
s
+
1
,
'.'
);
}
/* FIXME: make UNIX filename from DOS fn? */
/* ... and open it */
dlhandle
=
dlopen
(
t
,
RTLD_NOW
);
if
(
!
dlhandle
)
{
HeapFree
(
process
->
heap
,
0
,
t
);
return
0
;
}
wm
=
ELF_CreateDummyModule
(
t
,
modname
,
process
);
wm
->
binfmt
.
elf
.
dlhandle
=
dlhandle
;
SNOOP_RegisterDLL
(
wm
->
module
,
libname
,
STUBSIZE
/
sizeof
(
ELF_STDCALL_STUB
));
return
wm
->
module
;
}
}
FARPROC32
FARPROC32
...
...
loader/module.c
View file @
7df1fbb3
...
@@ -407,29 +407,19 @@ static HINSTANCE16 NE_CreateProcess( LPCSTR name, LPCSTR cmd_line, LPCSTR env,
...
@@ -407,29 +407,19 @@ static HINSTANCE16 NE_CreateProcess( LPCSTR name, LPCSTR cmd_line, LPCSTR env,
LPSTARTUPINFO32A
startup
,
LPSTARTUPINFO32A
startup
,
LPPROCESS_INFORMATION
info
)
LPPROCESS_INFORMATION
info
)
{
{
HMODULE16
hModule
;
HINSTANCE16
hInstance
,
hPrevInstance
;
HINSTANCE16
hInstance
,
hPrevInstance
;
NE_MODULE
*
pModule
;
NE_MODULE
*
pModule
;
if
(
__winelib
)
/* Load module */
{
OFSTRUCT
ofs
;
lstrcpyn32A
(
ofs
.
szPathName
,
name
,
sizeof
(
ofs
.
szPathName
)
);
if
((
hModule
=
MODULE_CreateDummyModule
(
&
ofs
))
<
32
)
return
hModule
;
pModule
=
(
NE_MODULE
*
)
GlobalLock16
(
hModule
);
hInstance
=
NE_CreateInstance
(
pModule
,
&
hPrevInstance
,
FALSE
);
}
else
{
hInstance
=
NE_LoadModule
(
name
,
&
hPrevInstance
,
TRUE
,
FALSE
);
if
(
hInstance
<
32
)
return
hInstance
;
if
(
!
(
pModule
=
NE_GetPtr
(
hInstance
))
hInstance
=
NE_LoadModule
(
name
,
&
hPrevInstance
,
TRUE
,
FALSE
);
||
(
pModule
->
flags
&
NE_FFLAGS_LIBMODULE
))
if
(
hInstance
<
32
)
return
hInstance
;
{
/* FIXME: cleanup */
if
(
!
(
pModule
=
NE_GetPtr
(
hInstance
))
return
11
;
||
(
pModule
->
flags
&
NE_FFLAGS_LIBMODULE
))
}
{
/* FIXME: cleanup */
return
11
;
}
}
/* Create a task for this instance */
/* Create a task for this instance */
...
@@ -534,8 +524,13 @@ HINSTANCE32 WINAPI LoadModule32( LPCSTR name, LPVOID paramBlock )
...
@@ -534,8 +524,13 @@ HINSTANCE32 WINAPI LoadModule32( LPCSTR name, LPVOID paramBlock )
/* Get hInstance from process */
/* Get hInstance from process */
pdb
=
PROCESS_IdToPDB
(
info
.
dwProcessId
);
pdb
=
PROCESS_IdToPDB
(
info
.
dwProcessId
);
tdb
=
pdb
?
(
TDB
*
)
GlobalLock16
(
pdb
->
task
)
:
NULL
;
if
(
pdb
->
exe_modref
)
hInstance
=
tdb
?
tdb
->
hInstance
:
0
;
hInstance
=
pdb
->
exe_modref
->
module
;
else
{
tdb
=
pdb
?
(
TDB
*
)
GlobalLock16
(
pdb
->
task
)
:
NULL
;
hInstance
=
tdb
?
tdb
->
hInstance
:
0
;
}
/* Close off the handles */
/* Close off the handles */
CloseHandle
(
info
.
hThread
);
CloseHandle
(
info
.
hThread
);
...
@@ -676,7 +671,7 @@ BOOL32 WINAPI CreateProcess32A( LPCSTR lpApplicationName, LPSTR lpCommandLine,
...
@@ -676,7 +671,7 @@ BOOL32 WINAPI CreateProcess32A( LPCSTR lpApplicationName, LPSTR lpCommandLine,
FIXME
(
module
,
"(%s,...): STARTF_USEHOTKEY ignored
\n
"
,
name
);
FIXME
(
module
,
"(%s,...): STARTF_USEHOTKEY ignored
\n
"
,
name
);
/* Try NE
(or winelib)
module */
/* Try NE module */
hInstance
=
NE_CreateProcess
(
name
,
cmdline
,
lpEnvironment
,
hInstance
=
NE_CreateProcess
(
name
,
cmdline
,
lpEnvironment
,
lpStartupInfo
,
lpProcessInfo
);
lpStartupInfo
,
lpProcessInfo
);
...
@@ -902,7 +897,6 @@ HINSTANCE32 WINAPI WinExec32( LPCSTR lpCmdLine, UINT32 nCmdShow )
...
@@ -902,7 +897,6 @@ HINSTANCE32 WINAPI WinExec32( LPCSTR lpCmdLine, UINT32 nCmdShow )
{
{
HINSTANCE32
handle
=
2
;
HINSTANCE32
handle
=
2
;
char
*
p
,
filename
[
256
];
char
*
p
,
filename
[
256
];
static
int
use_load_module
=
1
;
int
spacelimit
=
0
,
exhausted
=
0
;
int
spacelimit
=
0
,
exhausted
=
0
;
LOADPARAMS32
params
;
LOADPARAMS32
params
;
UINT16
paramCmdShow
[
2
];
UINT16
paramCmdShow
[
2
];
...
@@ -954,10 +948,8 @@ HINSTANCE32 WINAPI WinExec32( LPCSTR lpCmdLine, UINT32 nCmdShow )
...
@@ -954,10 +948,8 @@ HINSTANCE32 WINAPI WinExec32( LPCSTR lpCmdLine, UINT32 nCmdShow )
/* Now load the executable file */
/* Now load the executable file */
if
(
use_load_module
)
if
(
!
__winelib
)
{
{
/* Winelib: Use LoadModule() only for the program itself */
if
(
__winelib
)
use_load_module
=
0
;
handle
=
LoadModule32
(
filename
,
&
params
);
handle
=
LoadModule32
(
filename
,
&
params
);
if
(
handle
==
2
)
/* file not found */
if
(
handle
==
2
)
/* file not found */
{
{
...
...
loader/resource.c
View file @
7df1fbb3
...
@@ -66,7 +66,7 @@ HANDLE32 WINAPI FindResourceEx32A( HMODULE32 hModule, LPCSTR type, LPCSTR name,
...
@@ -66,7 +66,7 @@ HANDLE32 WINAPI FindResourceEx32A( HMODULE32 hModule, LPCSTR type, LPCSTR name,
*/
*/
HRSRC32
WINAPI
FindResourceEx32W
(
HMODULE32
hModule
,
LPCWSTR
type
,
HRSRC32
WINAPI
FindResourceEx32W
(
HMODULE32
hModule
,
LPCWSTR
type
,
LPCWSTR
name
,
WORD
lang
)
LPCWSTR
name
,
WORD
lang
)
{
HRSRC32
ret
;
{
WINE_MODREF
*
wm
=
MODULE32_LookupHMODULE
(
PROCESS_Current
(),
hModule
);
WINE_MODREF
*
wm
=
MODULE32_LookupHMODULE
(
PROCESS_Current
(),
hModule
);
HRSRC32
hrsrc
;
HRSRC32
hrsrc
;
...
@@ -75,24 +75,27 @@ HRSRC32 WINAPI FindResourceEx32W( HMODULE32 hModule, LPCWSTR type,
...
@@ -75,24 +75,27 @@ HRSRC32 WINAPI FindResourceEx32W( HMODULE32 hModule, LPCWSTR type,
debugres_w
(
type
),
debugres_w
(
type
),
debugres_w
(
name
));
debugres_w
(
name
));
if
(
__winelib
)
{
if
(
!
wm
)
return
(
HRSRC32
)
0
;
hrsrc
=
LIBRES_FindResource
(
hModule
,
name
,
type
);
if
(
hrsrc
)
switch
(
wm
->
type
)
return
hrsrc
;
{
}
case
MODULE32_PE
:
if
(
wm
)
{
hrsrc
=
PE_FindResourceEx32W
(
wm
,
name
,
type
,
lang
);
switch
(
wm
->
type
)
{
break
;
case
MODULE32_PE
:
ret
=
PE_FindResourceEx32W
(
wm
,
name
,
type
,
lang
);
case
MODULE32_ELF
:
if
(
ret
==
0
)
hrsrc
=
LIBRES_FindResource
(
hModule
,
name
,
type
);
ERR
(
resource
,
"0x%08x(%s) %s(%s) not found!
\n
"
,
hModule
,
wm
->
modname
,
debugres_w
(
name
),
debugres_w
(
type
));
break
;
return
ret
;
default:
default:
ERR
(
module
,
"unknown module type %d
\n
"
,
wm
->
type
);
ERR
(
module
,
"unknown module type %d
\n
"
,
wm
->
type
);
break
;
return
(
HRSRC32
)
0
;
}
}
}
return
(
HRSRC32
)
0
;
if
(
!
hrsrc
)
ERR
(
resource
,
"0x%08x(%s) %s(%s) not found!
\n
"
,
hModule
,
wm
->
modname
,
debugres_w
(
name
),
debugres_w
(
type
));
return
hrsrc
;
}
}
...
@@ -124,16 +127,20 @@ HGLOBAL32 WINAPI LoadResource32(
...
@@ -124,16 +127,20 @@ HGLOBAL32 WINAPI LoadResource32(
ERR
(
resource
,
"hRsrc is 0, return 0.
\n
"
);
ERR
(
resource
,
"hRsrc is 0, return 0.
\n
"
);
return
0
;
return
0
;
}
}
if
(
wm
)
if
(
!
wm
)
return
0
;
switch
(
wm
->
type
)
{
case
MODULE32_PE
:
switch
(
wm
->
type
)
return
PE_LoadResource32
(
wm
,
hRsrc
);
{
default:
case
MODULE32_PE
:
ERR
(
resource
,
"unknown module type %d
\n
"
,
wm
->
type
);
return
PE_LoadResource32
(
wm
,
hRsrc
);
break
;
}
case
MODULE32_ELF
:
if
(
__winelib
)
return
LIBRES_LoadResource
(
hModule
,
hRsrc
);
return
LIBRES_LoadResource
(
hModule
,
hRsrc
);
default:
ERR
(
resource
,
"unknown module type %d
\n
"
,
wm
->
type
);
break
;
}
return
0
;
return
0
;
}
}
...
@@ -175,23 +182,21 @@ DWORD WINAPI SizeofResource32( HINSTANCE32 hModule, HRSRC32 hRsrc )
...
@@ -175,23 +182,21 @@ DWORD WINAPI SizeofResource32( HINSTANCE32 hModule, HRSRC32 hRsrc )
WINE_MODREF
*
wm
=
MODULE32_LookupHMODULE
(
PROCESS_Current
(),
hModule
);
WINE_MODREF
*
wm
=
MODULE32_LookupHMODULE
(
PROCESS_Current
(),
hModule
);
TRACE
(
resource
,
"module=%08x res=%08x
\n
"
,
hModule
,
hRsrc
);
TRACE
(
resource
,
"module=%08x res=%08x
\n
"
,
hModule
,
hRsrc
);
if
(
wm
)
if
(
!
wm
)
return
0
;
switch
(
wm
->
type
)
{
switch
(
wm
->
type
)
case
MODULE32_PE
:
{
{
case
MODULE32_PE
:
DWORD
ret
;
return
PE_SizeofResource32
(
hModule
,
hRsrc
);
ret
=
PE_SizeofResource32
(
hModule
,
hRsrc
);
if
(
ret
)
case
MODULE32_ELF
:
return
ret
;
FIXME
(
module
,
"Not implemented for ELF modules
\n
"
);
break
;
break
;
}
default:
default:
ERR
(
module
,
"unknown module type %d
\n
"
,
wm
->
type
);
ERR
(
module
,
"unknown module type %d
\n
"
,
wm
->
type
);
break
;
break
;
}
}
if
(
__winelib
)
FIXME
(
module
,
"Not implemented for WINELIB
\n
"
);
return
0
;
return
0
;
}
}
...
...
misc/callback.c
View file @
7df1fbb3
...
@@ -9,6 +9,7 @@
...
@@ -9,6 +9,7 @@
#include "windows.h"
#include "windows.h"
#include "callback.h"
#include "callback.h"
#include "task.h"
#include "task.h"
#include "syslevel.h"
/**********************************************************************
/**********************************************************************
...
@@ -232,6 +233,17 @@ static BOOL32 WINAPI CALLBACK_CallWOWCallback16Ex(
...
@@ -232,6 +233,17 @@ static BOOL32 WINAPI CALLBACK_CallWOWCallback16Ex(
}
}
/**********************************************************************
/**********************************************************************
* CALLBACK_CallTaskRescheduleProc
*/
static
void
WINAPI
CALLBACK_CallTaskRescheduleProc
(
void
)
{
SYSLEVEL_EnterWin16Lock
();
TASK_Reschedule
();
SYSLEVEL_LeaveWin16Lock
();
}
/**********************************************************************
* CALLBACK_WinelibTable
* CALLBACK_WinelibTable
*
*
* The callbacks function table for Winelib
* The callbacks function table for Winelib
...
@@ -240,7 +252,7 @@ static const CALLBACKS_TABLE CALLBACK_WinelibTable =
...
@@ -240,7 +252,7 @@ static const CALLBACKS_TABLE CALLBACK_WinelibTable =
{
{
CALLBACK_CallRegisterProc
,
/* CallRegisterShortProc */
CALLBACK_CallRegisterProc
,
/* CallRegisterShortProc */
CALLBACK_CallRegisterProc
,
/* CallRegisterLongProc */
CALLBACK_CallRegisterProc
,
/* CallRegisterLongProc */
TASK_Reschedule
,
/* CallTaskRescheduleProc */
CALLBACK_CallTaskRescheduleProc
,
/* CallTaskRescheduleProc */
NULL
,
/* CallFrom16WndProc */
NULL
,
/* CallFrom16WndProc */
CALLBACK_CallWndProc
,
/* CallWndProc */
CALLBACK_CallWndProc
,
/* CallWndProc */
CALLBACK_CallDriverProc
,
/* CallDriverProc */
CALLBACK_CallDriverProc
,
/* CallDriverProc */
...
...
windows/win.c
View file @
7df1fbb3
...
@@ -665,11 +665,9 @@ static HWND32 WIN_CreateWindowEx( CREATESTRUCT32A *cs, ATOM classAtom,
...
@@ -665,11 +665,9 @@ static HWND32 WIN_CreateWindowEx( CREATESTRUCT32A *cs, ATOM classAtom,
SEGPTR
menuName
=
(
SEGPTR
)
GetClassLong16
(
hwnd
,
GCL_MENUNAME
);
SEGPTR
menuName
=
(
SEGPTR
)
GetClassLong16
(
hwnd
,
GCL_MENUNAME
);
if
(
menuName
)
if
(
menuName
)
{
{
/* hInstance is still 16-bit in 980215 winelib */
if
(
HIWORD
(
cs
->
hInstance
))
if
(
HIWORD
(
cs
->
hInstance
)
||
__winelib
)
cs
->
hMenu
=
LoadMenu32A
(
cs
->
hInstance
,
PTR_SEG_TO_LIN
(
menuName
));
cs
->
hMenu
=
LoadMenu32A
(
cs
->
hInstance
,
PTR_SEG_TO_LIN
(
menuName
));
else
else
/* doesn't work for winelib, since resources are unicode */
cs
->
hMenu
=
LoadMenu16
(
cs
->
hInstance
,
menuName
);
cs
->
hMenu
=
LoadMenu16
(
cs
->
hInstance
,
menuName
);
if
(
cs
->
hMenu
)
SetMenu32
(
hwnd
,
cs
->
hMenu
);
if
(
cs
->
hMenu
)
SetMenu32
(
hwnd
,
cs
->
hMenu
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment