summaryrefslogtreecommitdiffstats
path: root/loader
diff options
context:
space:
mode:
authorUoti Urpala <uau@glyph.nonexistent.invalid>2010-03-09 23:03:14 +0200
committerUoti Urpala <uau@glyph.nonexistent.invalid>2010-03-09 23:03:14 +0200
commit36e7a20e695b376287310d602b44d6719f82a021 (patch)
tree75070d702043e875c947fccaa2de7a419331de22 /loader
parent70fb003a9f2d9dc764e320f3ca64b0af1c68fdfb (diff)
parent93abb4f09229730c30e5bbdd6c54d4b981995eee (diff)
downloadmpv-36e7a20e695b376287310d602b44d6719f82a021.tar.bz2
mpv-36e7a20e695b376287310d602b44d6719f82a021.tar.xz
Merge svn changes up to r30550
Diffstat (limited to 'loader')
-rw-r--r--loader/com.h8
-rw-r--r--loader/dmo/DMO_Filter.h8
-rw-r--r--loader/drv.h8
-rw-r--r--loader/dshow/DS_Filter.h8
-rw-r--r--loader/ldt_keeper.c19
-rw-r--r--loader/ldt_keeper.h8
-rw-r--r--loader/loader.h8
-rw-r--r--loader/module.c29
-rw-r--r--loader/registry.h7
-rw-r--r--loader/win32.c167
-rw-r--r--loader/wine/basetsd.h8
-rw-r--r--loader/wine/ldt.h7
-rw-r--r--loader/wine/msacm.h8
-rw-r--r--loader/wine/ntdef.h8
-rw-r--r--loader/wine/vfw.h7
-rw-r--r--loader/wine/winbase.h8
-rw-r--r--loader/wine/windef.h16
-rw-r--r--loader/wine/windows.h8
-rw-r--r--loader/wine/winreg.h8
-rw-r--r--loader/wine/winuser.h8
-rw-r--r--loader/wineacm.h9
21 files changed, 155 insertions, 210 deletions
diff --git a/loader/com.h b/loader/com.h
index 6bbbc55b7d..3e9a94bd67 100644
--- a/loader/com.h
+++ b/loader/com.h
@@ -18,10 +18,6 @@
* Internal functions and structures for COM emulation code.
*/
-#ifdef __cplusplus
-extern "C" {
-#endif
-
#ifndef GUID_TYPE
#define GUID_TYPE
typedef struct
@@ -83,8 +79,4 @@ void* STDCALL CoTaskMemAlloc(unsigned long);
void STDCALL CoTaskMemFree(void*);
#endif
-#ifdef __cplusplus
-};
-#endif /* __cplusplus */
-
#endif /* MPLAYER_COM_H */
diff --git a/loader/dmo/DMO_Filter.h b/loader/dmo/DMO_Filter.h
index ca04b2c4cd..0273245669 100644
--- a/loader/dmo/DMO_Filter.h
+++ b/loader/dmo/DMO_Filter.h
@@ -4,10 +4,6 @@
#include "dmo_guids.h"
#include "dmo_interfaces.h"
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
typedef struct DMO_Filter
{
int m_iHandle;
@@ -40,8 +36,4 @@ void DMO_Filter_Destroy(DMO_Filter* This);
*/
CMediaBuffer* CMediaBufferCreate(unsigned long maxlen, void* mem, unsigned long len, int copy);
-#if defined(__cplusplus)
-}
-#endif
-
#endif /* MPLAYER_DMO_FILTER_H */
diff --git a/loader/drv.h b/loader/drv.h
index b064b46802..9ae1f8fbec 100644
--- a/loader/drv.h
+++ b/loader/drv.h
@@ -6,10 +6,6 @@
#ifndef MPLAYER_DRV_H
#define MPLAYER_DRV_H
-#ifdef __cplusplus
-extern "C" {
-#endif
-
#include "wine/windef.h"
#include "wine/driver.h"
@@ -20,8 +16,4 @@ void CodecRelease(void);
HDRVR DrvOpen(LPARAM lParam2);
void DrvClose(HDRVR hdrvr);
-#ifdef __cplusplus
-}
-#endif
-
#endif /* MPLAYER_DRV_H */
diff --git a/loader/dshow/DS_Filter.h b/loader/dshow/DS_Filter.h
index 8fda4b4ef2..945321a153 100644
--- a/loader/dshow/DS_Filter.h
+++ b/loader/dshow/DS_Filter.h
@@ -4,10 +4,6 @@
#include "inputpin.h"
#include "outputpin.h"
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
typedef struct {
char* frame_pointer;
long frame_size;
@@ -43,8 +39,4 @@ DS_Filter* DS_FilterCreate(const char* dllname, const GUID* id,
AM_MEDIA_TYPE* in_fmt, AM_MEDIA_TYPE* out_fmt,SampleProcUserData* pUserData);
void DS_Filter_Destroy(DS_Filter* This);
-#if defined(__cplusplus)
-}
-#endif
-
#endif /* MPLAYER_DS_FILTER_H */
diff --git a/loader/ldt_keeper.c b/loader/ldt_keeper.c
index 35025888ca..c5fa434e80 100644
--- a/loader/ldt_keeper.c
+++ b/loader/ldt_keeper.c
@@ -43,19 +43,12 @@
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,47)
#define modify_ldt_ldt_s user_desc
#endif
-/* prototype it here, so we won't depend on kernel headers */
-#ifdef __cplusplus
-extern "C" {
-#endif
/// declare modify_ldt with the _syscall3 macro for older glibcs
#if defined(__GLIBC__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ == 0))
_syscall3( int, modify_ldt, int, func, void *, ptr, unsigned long, bytecount );
#else
int modify_ldt(int func, void *ptr, unsigned long bytecount);
#endif
-#ifdef __cplusplus
-}
-#endif
#else
#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
#include <machine/segments.h>
@@ -69,13 +62,7 @@ int modify_ldt(int func, void *ptr, unsigned long bytecount);
/* solaris x86: add missing prototype for sysi86(), but only when sysi86(int, void*) is known to be valid */
#ifdef HAVE_SYSI86_iv
-#ifdef __cplusplus
-extern "C" {
-#endif
int sysi86(int, void*);
-#ifdef __cplusplus
-}
-#endif
#endif
#ifndef NUMSYSLDTS /* SunOS 2.5.1 does not define NUMSYSLDTS */
@@ -127,9 +114,6 @@ static unsigned int fs_ldt = TEB_SEL_IDX;
* in C++ we use static class for this...
*/
-#ifdef __cplusplus
-extern "C"
-#endif
void Setup_FS_Segment(void)
{
unsigned int ldt_desc = LDT_SEL(fs_ldt);
@@ -271,6 +255,9 @@ ldt_fs_t* Setup_LDT_Keeper(void)
printf("Couldn't install fs segment, expect segfault\n");
}
}
+#elif defined(__OS2__)
+ /* convert flat addr to sel idx for LDT_SEL() */
+ fs_ldt = (uintptr_t)fs_seg >> 16;
#endif
Setup_FS_Segment();
diff --git a/loader/ldt_keeper.h b/loader/ldt_keeper.h
index c339987635..9fff8de0c1 100644
--- a/loader/ldt_keeper.h
+++ b/loader/ldt_keeper.h
@@ -1,11 +1,6 @@
#ifndef MPLAYER_LDT_KEEPER_H
#define MPLAYER_LDT_KEEPER_H
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
typedef struct {
void* fs_seg;
char* prev_struct;
@@ -14,8 +9,5 @@ typedef struct {
void Setup_FS_Segment(void);
ldt_fs_t* Setup_LDT_Keeper(void);
void Restore_LDT_Keeper(ldt_fs_t* ldt_fs);
-#ifdef __cplusplus
-}
-#endif
#endif /* MPLAYER_LDT_KEEPER_H */
diff --git a/loader/loader.h b/loader/loader.h
index 29c13ef522..48778e1882 100644
--- a/loader/loader.h
+++ b/loader/loader.h
@@ -14,10 +14,6 @@
#ifndef MPLAYER_LOADER_H
#define MPLAYER_LOADER_H
-#ifdef __cplusplus
-extern "C" {
-#endif
-
#include "wine/windef.h"
#include "wine/driver.h"
#include "wine/mmreg.h"
@@ -33,8 +29,4 @@ int WritePrivateProfileStringA_(const char* appname, const char* keyname,
INT WINAPI LoadStringA( HINSTANCE instance, UINT resource_id,
LPSTR buffer, INT buflen );
-#ifdef __cplusplus
-}
-#endif
-
#endif /* MPLAYER_LOADER_H */
diff --git a/loader/module.c b/loader/module.c
index 2bce928544..feaab14605 100644
--- a/loader/module.c
+++ b/loader/module.c
@@ -744,6 +744,31 @@ static int dump_component(char* name, int type, void* orig, ComponentParameters
#ifdef EMU_QTX_API
+#ifdef __OS2__
+uint32_t _System DosQueryMem(void *, uint32_t *, uint32_t *);
+#endif
+
+static int is_invalid_ptr_handle(void *p)
+{
+#ifdef __OS2__
+ uint32_t cb = 1;
+ uint32_t fl;
+
+ if(DosQueryMem(p, &cb, &fl))
+ return 1;
+
+ // Occasionally, ptr with 'EXEC' attr is passed.
+ // On OS/2, however, malloc() never sets 'EXEC' attr.
+ // So ptr with 'EXEC' attr is invalid.
+ if(fl & 0x04)
+ return 1;
+
+ return 0;
+#else
+ return (uint32_t)p >= 0x60000000;
+#endif
+}
+
static uint32_t ret_array[4096];
static int ret_i=0;
@@ -844,10 +869,10 @@ static int report_func(void *stack_base, int stack_size, reg386_t *reg, uint32_t
#endif
return 1;
case 0x15002f: //DisposePtr
- if(((uint32_t *)stack_base)[1]>=0x60000000)
+ if(is_invalid_ptr_handle(((void **)stack_base)[1]))
printf("WARNING! Invalid Ptr handle!\n");
else
- free((void *)((uint32_t *)stack_base)[1]);
+ free(((void **)stack_base)[1]);
reg->eax=0;
#ifdef DEBUG_QTX_API
printf("%*sLEAVE(%d): EMULATED! 0x%X\n",ret_i*2,"",ret_i, reg->eax);
diff --git a/loader/registry.h b/loader/registry.h
index 4f0d09f53d..1b2a12afd7 100644
--- a/loader/registry.h
+++ b/loader/registry.h
@@ -13,10 +13,6 @@
* http://svn.mplayerhq.hu/mplayer/trunk/
*/
-#ifdef __cplusplus
-extern "C" {
-#endif
-
#include "wine/winbase.h"
void free_registry(void);
@@ -40,8 +36,5 @@ long __stdcall RegEnumKeyExA(HKEY hKey, DWORD dwIndex, LPSTR lpName, LPDWORD lpc
long __stdcall RegEnumValueA(HKEY hkey, DWORD index, LPSTR value, LPDWORD val_count,
LPDWORD reserved, LPDWORD type, LPBYTE data, LPDWORD count);
#endif
-#ifdef __cplusplus
-};
-#endif
#endif /* MPLAYER_REGISTRY_H */
diff --git a/loader/win32.c b/loader/win32.c
index 3b0dd5bb3e..812815e699 100644
--- a/loader/win32.c
+++ b/loader/win32.c
@@ -19,13 +19,14 @@ for DLL to know too much about its environment.
#include "config.h"
#include "mangle.h"
-#ifdef CONFIG_QTX_CODECS
-#define QTX
-#endif
#define REALPLAYER
//#define LOADLIB_TRY_NATIVE
-#ifdef QTX
+/* Hack to make sure the correct function declaration in com.h is used when
+ * this file is built for the test applications with WIN32_LOADER disabled. */
+#define WIN32_LOADER
+
+#ifdef CONFIG_QTX_CODECS
#define PSEUDO_SCREEN_WIDTH /*640*/800
#define PSEUDO_SCREEN_HEIGHT /*480*/600
#endif
@@ -72,6 +73,7 @@ for DLL to know too much about its environment.
#include "osdep/mmap.h"
#endif
#include "osdep/mmap_anon.h"
+#include "libavutil/avstring.h"
char* def_path = WIN32_PATH;
@@ -553,7 +555,7 @@ static HMODULE WINAPI expGetDriverModuleHandle(DRVR* pdrv)
#define MODULE_HANDLE_kernel32 ((HMODULE)0x120)
#define MODULE_HANDLE_user32 ((HMODULE)0x121)
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
#define MODULE_HANDLE_wininet ((HMODULE)0x122)
#define MODULE_HANDLE_ddraw ((HMODULE)0x123)
#define MODULE_HANDLE_advapi32 ((HMODULE)0x124)
@@ -562,13 +564,14 @@ static HMODULE WINAPI expGetDriverModuleHandle(DRVR* pdrv)
#define MODULE_HANDLE_msvcrt ((HMODULE)0x126)
#define MODULE_HANDLE_ole32 ((HMODULE)0x127)
#define MODULE_HANDLE_winmm ((HMODULE)0x128)
+#define MODULE_HANDLE_psapi ((HMODULE)0x129)
static HMODULE WINAPI expGetModuleHandleA(const char* name)
{
WINE_MODREF* wm;
HMODULE result;
if(!name)
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
result=1;
#else
result=0;
@@ -584,7 +587,7 @@ static HMODULE WINAPI expGetModuleHandleA(const char* name)
{
if(name && (strcasecmp(name, "kernel32")==0 || !strcasecmp(name, "kernel32.dll")))
result=MODULE_HANDLE_kernel32;
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
if(name && strcasecmp(name, "user32")==0)
result=MODULE_HANDLE_user32;
#endif
@@ -844,7 +847,7 @@ static void* WINAPI expWaitForSingleObject(void* object, int duration)
return (void *)ret;
}
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
static void* WINAPI expWaitForMultipleObjects(int count, const void** objects,
int WaitAll, int duration)
{
@@ -884,7 +887,7 @@ static HANDLE WINAPI expCreateMutexA(void *pSecAttr,
else
dbgprintf("CreateMutexA(0x%x, %d, NULL) => 0x%x\n",
pSecAttr, bInitialOwner, mlist);
-#ifndef QTX
+#ifndef CONFIG_QTX_CODECS
/* 10l to QTX, if CreateMutex returns a real mutex, WaitForSingleObject
waits for ever, else it works ;) */
return mlist;
@@ -1133,6 +1136,10 @@ static WIN_BOOL WINAPI expIsProcessorFeaturePresent(DWORD v)
return result;
}
+static WIN_BOOL WINAPI expIsDebuggerPresent(void)
+{
+ return 0;
+}
static long WINAPI expGetVersion(void)
{
@@ -1437,7 +1444,7 @@ static int WINAPI expGetCurrentProcess(void)
return getpid();
}
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
// this version is required for Quicktime codecs (.qtx/.qts) to work.
// (they assume some pointers at FS: segment)
@@ -2201,7 +2208,7 @@ static int WINAPI expGetStdHandle(int z)
return z+0x1234;
}
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
#define FILE_HANDLE_quicktimeqts ((HANDLE)0x444)
#define FILE_HANDLE_quicktimeqtx ((HANDLE)0x445)
#endif
@@ -2211,7 +2218,7 @@ static int WINAPI expGetFileType(int handle)
dbgprintf("GetFileType(0x%x) => 0x3 = pipe\n", handle);
return 0x3;
}
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
static int WINAPI expGetFileAttributesA(char *filename)
{
dbgprintf("GetFileAttributesA(%s) => FILE_ATTR_NORMAL\n", filename);
@@ -2269,6 +2276,21 @@ static int WINAPI expGetModuleFileNameA(int module, char* s, int len)
return result;
}
+static int WINAPI expGetModuleBaseNameA(int process, int module, char* s, int len)
+{
+ int result = 0;
+
+ if (s && len) {
+ av_strlcpy(s, "aviplay.dll", len);
+ result = strlen(s);
+ }
+
+ dbgprintf("GetModuleBaseNameA(0x%x, 0x%x, 0x%x, %d) => %d\n",
+ process, module, s, len, result);
+
+ return result;
+}
+
static int WINAPI expSetUnhandledExceptionFilter(void* filter)
{
dbgprintf("SetUnhandledExceptionFilter(0x%x) => 1\n", filter);
@@ -2312,7 +2334,7 @@ static int WINAPI expLoadLibraryA(char* name)
// return MODULE_HANDLE_kernel32;
return MODULE_HANDLE_user32;
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
if (strcasecmp(name, "wininet.dll") == 0 || strcasecmp(name, "wininet") == 0)
return MODULE_HANDLE_wininet;
if (strcasecmp(name, "ddraw.dll") == 0 || strcasecmp(name, "ddraw") == 0)
@@ -2329,6 +2351,8 @@ static int WINAPI expLoadLibraryA(char* name)
return MODULE_HANDLE_ole32;
if (strcasecmp(name, "winmm.dll") == 0 || strcasecmp(name, "winmm") == 0)
return MODULE_HANDLE_winmm;
+ if (strcasecmp(name, "psapi.dll") == 0 || strcasecmp(name, "psapi") == 0)
+ return MODULE_HANDLE_psapi;
result=LoadLibraryA(name);
dbgprintf("Returned LoadLibraryA(0x%x='%s'), def_path=%s => 0x%x\n", name, name, def_path, result);
@@ -2338,7 +2362,7 @@ static int WINAPI expLoadLibraryA(char* name)
static int WINAPI expFreeLibrary(int module)
{
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
int result=0; /* FIXME:XXX: qtx svq3 frees up qt.qts */
#else
int result=FreeLibrary(module);
@@ -2355,7 +2379,7 @@ static void* WINAPI expGetProcAddress(HMODULE mod, char* name)
result=LookupExternalByName("kernel32.dll", name); break;
case MODULE_HANDLE_user32:
result=LookupExternalByName("user32.dll", name); break;
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
case MODULE_HANDLE_wininet:
result=LookupExternalByName("wininet.dll", name); break;
case MODULE_HANDLE_ddraw:
@@ -2371,6 +2395,8 @@ static void* WINAPI expGetProcAddress(HMODULE mod, char* name)
result=LookupExternalByName("ole32.dll", name); break;
case MODULE_HANDLE_winmm:
result=LookupExternalByName("winmm.dll", name); break;
+ case MODULE_HANDLE_psapi:
+ result=LookupExternalByName("psapi.dll", name); break;
default:
result=GetProcAddress(mod, name);
}
@@ -2450,7 +2476,7 @@ static int WINAPI expCreateCompatibleDC(int hdc)
static int WINAPI expGetDeviceCaps(int hdc, int unk)
{
dbgprintf("GetDeviceCaps(0x%x, %d) => 0\n", hdc, unk);
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
#define BITSPIXEL 12
#define PLANES 14
if (unk == BITSPIXEL)
@@ -2483,7 +2509,7 @@ static void* WINAPI expGetWindowDC(int hdc)
return 0;
}
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
static int WINAPI expGetWindowRect(HWND win, RECT *r)
{
dbgprintf("GetWindowRect(0x%x, 0x%x) => 1\n", win, r);
@@ -2937,7 +2963,7 @@ static int WINAPI expGetCursorPos(void *cursor)
dbgprintf("GetCursorPos(0x%x) => 0x%x\n", cursor, cursor);
return 1;
}
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
static int show_cursor = 0;
static int WINAPI expShowCursor(int show)
{
@@ -2975,7 +3001,7 @@ static int WINAPI expGetCPInfo(int cp,void *info)
dbgprintf("GetCPInfo()\n");
return 0;
}
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
#define SM_CXSCREEN 0
#define SM_CYSCREEN 1
#define SM_XVIRTUALSCREEN 76
@@ -2987,7 +3013,7 @@ static int WINAPI expGetCPInfo(int cp,void *info)
static int WINAPI expGetSystemMetrics(int index)
{
dbgprintf("GetSystemMetrics(%d)\n", index);
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
switch(index)
{
case SM_XVIRTUALSCREEN:
@@ -3314,7 +3340,7 @@ static DIR* qtx_dir=NULL;
static WIN_BOOL WINAPI expFindNextFileA(HANDLE h,LPWIN32_FIND_DATAA lpfd)
{
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
dbgprintf("FindNextFileA(0x%x, 0x%x) => 0\n", h, lpfd);
if(h==FILE_HANDLE_quicktimeqtx){
struct dirent* d;
@@ -3340,7 +3366,7 @@ static HANDLE WINAPI expFindFirstFileA(LPCSTR s, LPWIN32_FIND_DATAA lpfd)
{
dbgprintf("FindFirstFileA(0x%x='%s', 0x%x) => 0\n", s, s, lpfd);
// printf("\n### FindFirstFileA('%s')...\n",s);
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
if(strstr(s, "quicktime\\*.QTX")){
dbgprintf("FindFirstFileA(0x%x='%s', 0x%x) => QTX\n", s, s, lpfd);
dbgprintf("\n### Searching for QuickTime plugins (*.qtx) at %s...\n",def_path);
@@ -3376,7 +3402,7 @@ static HANDLE WINAPI expFindFirstFileA(LPCSTR s, LPWIN32_FIND_DATAA lpfd)
static WIN_BOOL WINAPI expFindClose(HANDLE h)
{
dbgprintf("FindClose(0x%x) => 0\n", h);
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
// if(h==FILE_HANDLE_quicktimeqtx && qtx_dir){
// closedir(qtx_dir);
// qtx_dir=NULL;
@@ -3398,7 +3424,7 @@ static UINT WINAPI expGetWindowsDirectoryA(LPSTR s,UINT c)
dbgprintf("GetWindowsDirectoryA(0x%x, %d) => %d\n", s, c, result);
return result;
}
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
static UINT WINAPI expGetCurrentDirectoryA(UINT c, LPSTR s)
{
char curdir[]="c:\\";
@@ -3482,7 +3508,7 @@ static HANDLE WINAPI expCreateFileA(LPCSTR cs1,DWORD i1,DWORD i2,
i2, p1, i3, i4, i5);
if((!cs1) || (strlen(cs1)<2))return -1;
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
if(strstr(cs1, "QuickTime.qts"))
{
int result;
@@ -3598,7 +3624,7 @@ static DWORD WINAPI expGetFullPathNameA
dbgprintf("GetFullPathNameA('%s',%d,%p,%p)\n",lpFileName,nBufferLength,
lpBuffer, lpFilePart);
#if 0
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
strcpy(lpFilePart, "Quick123.qts");
#else
strcpy(lpFilePart, lpFileName);
@@ -3662,7 +3688,7 @@ static DWORD WINAPI expSetFilePointer(HANDLE h, LONG val, LPLONG ext, DWORD whe
default:
return -1;
}
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
if (val == 0 && ext != 0)
val = val&(*ext);
#endif
@@ -3768,7 +3794,7 @@ static void WINAPI expInitCommonControls(void)
return;
}
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
/* needed by QuickTime.qts */
static HWND WINAPI expCreateUpDownControl (DWORD style, INT x, INT y, INT cx, INT cy,
HWND parent, INT id, HINSTANCE inst,
@@ -4427,7 +4453,7 @@ static MMRESULT WINAPI exptimeBeginPeriod(UINT wPeriod)
return 0;
}
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
static MMRESULT WINAPI exptimeEndPeriod(UINT wPeriod)
{
dbgprintf("timeEndPeriod(%u) !\n", wPeriod);
@@ -4543,6 +4569,12 @@ static WIN_BOOL WINAPI expSetThreadPriority(
return TRUE;
}
+static void WINAPI expTerminateProcess( DWORD process, DWORD status )
+{
+ printf("EXIT - process %ld code %ld\n", process, status);
+ exit(status);
+}
+
static void WINAPI expExitProcess( DWORD status )
{
printf("EXIT - code %ld\n",status);
@@ -4551,7 +4583,7 @@ static void WINAPI expExitProcess( DWORD status )
static INT WINAPI expMessageBoxA(HWND hWnd, LPCSTR text, LPCSTR title, UINT type){
printf("MSGBOX '%s' '%s' (%d)\n",text,title,type);
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
if (type == MB_ICONHAND && !strlen(text) && !strlen(title))
return IDIGNORE;
#endif
@@ -4592,6 +4624,28 @@ static WINAPI inline unsigned long int expntohl(unsigned long int netlong)
// dbgprintf("ntohl(%x) => %x\n", netlong, ntohl(netlong));
return ntohl(netlong);
}
+
+static char* WINAPI expSysAllocStringLen(char *pch, unsigned cch)
+{
+ char *str;
+ dbgprintf("SysAllocStringLen('%s', %d)\n", pch, cch);
+ str = malloc(cch * 2 + sizeof(unsigned) + 2);
+ *(unsigned *)str = cch;
+ str += sizeof(unsigned);
+ if (pch)
+ memcpy(str, pch, cch * 2);
+ str[cch * 2] = 0;
+ str[cch * 2 + 1] = 0;
+ return str;
+}
+
+static void WINAPI expSysFreeString(char *str)
+{
+ if (str) {
+ free(str - sizeof(unsigned));
+ }
+}
+
static void WINAPI expVariantInit(void* p)
{
printf("InitCommonControls called!\n");
@@ -4610,7 +4664,7 @@ static int WINAPI expUnregisterClassA(const char *className, HINSTANCE hInstance
return 0;
}
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
/* should be fixed bcs it's not fully strlen equivalent */
static int expSysStringByteLen(void *str)
{
@@ -4846,6 +4900,25 @@ static void * WINAPI expDecodePointer(void *p)
return p;
}
+static DWORD WINAPI expGetThreadLocale(void)
+{
+ return 0;
+}
+
+/**
+ * Very incomplete implementation, return an error for almost all cases.
+ */
+static DWORD WINAPI expGetLocaleInfoA(DWORD locale, DWORD lctype, char* lpLCData, int cchData)
+{
+ if (lctype == 0x1004) { // LOCALE_IDEFAULTANSICODEPAGE
+ if (cchData < 4)
+ return cchData == 0 ? 4 : 0;
+ strcpy(lpLCData, "437");
+ return 4;
+ }
+ return 0;
+}
+
struct exports
{
char name[64];
@@ -4880,7 +4953,7 @@ struct exports exp_kernel32[]=
FF(SetEvent, -1)
FF(ResetEvent, -1)
FF(WaitForSingleObject, -1)
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
FF(WaitForMultipleObjects, -1)
FF(ExitThread, -1)
FF(CreateMutexA,-1)
@@ -4941,7 +5014,7 @@ struct exports exp_kernel32[]=
FF(GetStartupInfoA, -1)
FF(GetStdHandle, -1)
FF(GetFileType, -1)
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
FF(GetFileAttributesA, -1)
#endif
FF(SetHandleCount, -1)
@@ -4988,7 +5061,7 @@ struct exports exp_kernel32[]=
FF(CreateFileA,-1)
FF(GetSystemDirectoryA,-1)
FF(GetWindowsDirectoryA,-1)
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
FF(GetCurrentDirectoryA,-1)
FF(SetCurrentDirectoryA,-1)
FF(CreateDirectoryA,-1)
@@ -4997,6 +5070,7 @@ struct exports exp_kernel32[]=
FF(GetFullPathNameA,-1)
FF(SetErrorMode, -1)
FF(IsProcessorFeaturePresent, -1)
+ FF(IsDebuggerPresent, -1)
FF(GetProcessAffinityMask, -1)
FF(InterlockedExchange, -1)
FF(InterlockedCompareExchange, -1)
@@ -5017,12 +5091,15 @@ struct exports exp_kernel32[]=
FF(GlobalMemoryStatus,-1)
FF(GetThreadPriority,-1)
FF(SetThreadPriority,-1)
+ FF(TerminateProcess,-1)
FF(ExitProcess,-1)
{"LoadLibraryExA", -1, (void*)&LoadLibraryExA},
FF(SetThreadIdealProcessor,-1)
FF(SetProcessAffinityMask, -1)
FF(EncodePointer, -1)
FF(DecodePointer, -1)
+ FF(GetThreadLocale, -1)
+ FF(GetLocaleInfoA, -1)
UNDEFF(FlsAlloc, -1)
UNDEFF(FlsGetValue, -1)
UNDEFF(FlsSetValue, -1)
@@ -5101,11 +5178,14 @@ struct exports exp_winmm[]={
FF(OpenDriver, -1)
FF(timeGetDevCaps, -1)
FF(timeBeginPeriod, -1)
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
FF(timeEndPeriod, -1)
FF(waveOutGetNumDevs, -1)
#endif
};
+struct exports exp_psapi[]={
+ FF(GetModuleBaseNameA, -1)
+};
struct exports exp_user32[]={
FF(LoadIconA,-1)
FF(LoadStringA, -1)
@@ -5117,7 +5197,7 @@ struct exports exp_user32[]={
FF(LoadCursorA,-1)
FF(SetCursor,-1)
FF(GetCursorPos,-1)
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
FF(ShowCursor,-1)
#endif
FF(RegisterWindowMessageA,-1)
@@ -5129,7 +5209,7 @@ struct exports exp_user32[]={
FF(MessageBoxA, -1)
FF(RegisterClassA, -1)
FF(UnregisterClassA, -1)
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
FF(GetWindowRect, -1)
FF(MonitorFromWindow, -1)
FF(MonitorFromRect, -1)
@@ -5173,7 +5253,7 @@ struct exports exp_gdi32[]={
FF(DeleteObject, -1)
FF(GetDeviceCaps, -1)
FF(GetSystemPaletteEntries, -1)
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
FF(CreatePalette, -1)
FF(GetObjectA, -1)
FF(CreateRectRgn, -1)
@@ -5202,7 +5282,7 @@ struct exports exp_crtdll[]={
struct exports exp_comctl32[]={
FF(StringFromGUID2, -1)
FF(InitCommonControls, 17)
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
FF(CreateUpDownControl, 16)
#endif
};
@@ -5220,8 +5300,10 @@ struct exports exp_msdmo[]={
FF(MoInitMediaType, -1)
};
struct exports exp_oleaut32[]={
+ FF(SysAllocStringLen, 4)
+ FF(SysFreeString, 6)
FF(VariantInit, 8)
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
FF(SysStringByteLen, 149)
#endif
};
@@ -5261,7 +5343,7 @@ struct exports exp_pncrt[]={
};
#endif
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
struct exports exp_ddraw[]={
FF(DirectDrawCreate, -1)
};
@@ -5302,6 +5384,7 @@ struct libs libraries[]={
LL(kernel32)
LL(msvcrt)
LL(winmm)
+ LL(psapi)
LL(user32)
LL(advapi32)
LL(gdi32)
@@ -5315,7 +5398,7 @@ struct libs libraries[]={
#ifdef REALPLAYER
LL(pncrt)
#endif
-#ifdef QTX
+#ifdef CONFIG_QTX_CODECS
LL(ddraw)
#endif
LL(comdlg32)
diff --git a/loader/wine/basetsd.h b/loader/wine/basetsd.h
index 7a13d58dba..0ec90a9aeb 100644
--- a/loader/wine/basetsd.h
+++ b/loader/wine/basetsd.h
@@ -13,10 +13,6 @@
#include "config.h"
-#ifdef __cplusplus
-extern "C" {
-#endif /* defined(__cplusplus) */
-
/*
* Win32 was easy to implement under Unix since most (all?) 32-bit
* Unices uses the same type model (ILP32) as Win32, where int, long
@@ -165,8 +161,4 @@ typedef __uint32 DWORD_PTR, *PDWORD_PTR;
typedef INT_PTR SSIZE_T, *PSSIZE_T;
typedef UINT_PTR SIZE_T, *PSIZE_T;
-#ifdef __cplusplus
-} /* extern "C" */
-#endif /* defined(__cplusplus) */
-
#endif /* MPLAYER_BASETSD_H */
diff --git a/loader/wine/ldt.h b/loader/wine/ldt.h
index e3f511b062..e607085f33 100644
--- a/loader/wine/ldt.h
+++ b/loader/wine/ldt.h
@@ -26,10 +26,6 @@ typedef struct
int limit_in_pages; /* is the limit in pages or bytes? */
enum seg_type type; /* segment type */
} ldt_entry;
-#ifdef __cplusplus
-extern "C"
-{
-#endif
void LDT_BytesToEntry( const unsigned long *buffer, ldt_entry *content );
void LDT_EntryToBytes( unsigned long *buffer, const ldt_entry *content );
int LDT_GetEntry( int entry, ldt_entry *content );
@@ -92,8 +88,5 @@ extern unsigned char ldt_flags_copy[LDT_SIZE];
(!((sel) & 4) || (SELECTOR_TO_ENTRY(sel) < FIRST_LDT_ENTRY_TO_ALLOC))
#define IS_SELECTOR_32BIT(sel) \
(IS_SELECTOR_SYSTEM(sel) || (GET_SEL_FLAGS(sel) & LDT_FLAGS_32BIT))
-#ifdef __cplusplus
-}
-#endif
#endif /* MPLAYER_LDT_H */
diff --git a/loader/wine/msacm.h b/loader/wine/msacm.h
index 6a0be7c068..b8b24383c6 100644
--- a/loader/wine/msacm.h
+++ b/loader/wine/msacm.h
@@ -9,10 +9,6 @@
#include "driver.h"
#include "mmreg.h"
-#ifdef __cplusplus
-extern "C" {
-#endif /* defined(__cplusplus) */
-
//typedef WORD VERSION; /* major (high byte), minor (low byte) */
typedef UINT16 MMVERSION16;
@@ -934,8 +930,4 @@ MMRESULT WINAPI acmStreamUnprepareHeader(
HACMSTREAM has, PACMSTREAMHEADER pash, DWORD fdwUnprepare
);
-#ifdef __cplusplus
-} /* extern "C" */
-#endif /* defined(__cplusplus) */
-
#endif /* MPLAYER_MSACM_H */
diff --git a/loader/wine/ntdef.h b/loader/wine/ntdef.h
index 9e68828bbf..c7061a4c1d 100644
--- a/loader/wine/ntdef.h
+++ b/loader/wine/ntdef.h
@@ -6,10 +6,6 @@
#include "pshpack1.h"
-#ifdef __cplusplus
-extern "C" {
-#endif
-
#define NTAPI __stdcall
#ifndef IN
@@ -92,10 +88,6 @@ typedef OBJECT_ATTRIBUTES *POBJECT_ATTRIBUTES;
}
-#ifdef __cplusplus
-}
-#endif
-
#include "poppack.h"
#endif /* MPLAYER_NTDEF_H */
diff --git a/loader/wine/vfw.h b/loader/wine/vfw.h
index 1cf94b5ac7..7bf72be42d 100644
--- a/loader/wine/vfw.h
+++ b/loader/wine/vfw.h
@@ -6,10 +6,6 @@
#ifndef MPLAYER_VFW_H
#define MPLAYER_VFW_H
//#include "pshpack1.h"
-#ifdef __cplusplus
-extern "C" {
-#endif
-
#include "windef.h"
typedef struct __attribute__((__packed__))
@@ -667,7 +663,4 @@ typedef struct {
#define AVIERR_USERABORT MAKE_AVIERR(198)
#define AVIERR_ERROR MAKE_AVIERR(199)
-#ifdef __cplusplus
-}
-#endif
#endif /* MPLAYER_VFW_H */
diff --git a/loader/wine/winbase.h b/loader/wine/winbase.h
index b7ae733553..a8fe81ee3f 100644
--- a/loader/wine/winbase.h
++