Mercurial > mplayer.hg
annotate loader/driver.c @ 8451:fb88ccbc5ccc
compiler warning fixes
based on patch by Dominik Mierzejewski <dominik@rangers.eu.org>
| author | arpi |
|---|---|
| date | Sat, 14 Dec 2002 17:56:35 +0000 |
| parents | 174e2a58b4cd |
| children | b0d1b415320c |
| rev | line source |
|---|---|
| 7386 | 1 #include "config.h" |
| 2 | |
| 1 | 3 #include <stdio.h> |
| 4 #ifdef HAVE_MALLOC_H | |
| 5 #include <malloc.h> | |
|
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
340
diff
changeset
|
6 #endif |
| 1 | 7 #include <stdlib.h> |
|
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
340
diff
changeset
|
8 #ifdef __FreeBSD__ |
|
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
340
diff
changeset
|
9 #include <sys/time.h> |
| 1 | 10 #endif |
| 11 | |
|
2068
3189c317dfc1
using ldt_keeper instead of setup_fs, includes changed
arpi
parents:
1307
diff
changeset
|
12 #include "win32.h" |
|
3189c317dfc1
using ldt_keeper instead of setup_fs, includes changed
arpi
parents:
1307
diff
changeset
|
13 #include "wine/driver.h" |
|
3189c317dfc1
using ldt_keeper instead of setup_fs, includes changed
arpi
parents:
1307
diff
changeset
|
14 #include "wine/pe_image.h" |
|
3189c317dfc1
using ldt_keeper instead of setup_fs, includes changed
arpi
parents:
1307
diff
changeset
|
15 #include "wine/winreg.h" |
|
3189c317dfc1
using ldt_keeper instead of setup_fs, includes changed
arpi
parents:
1307
diff
changeset
|
16 #include "wine/vfw.h" |
|
3189c317dfc1
using ldt_keeper instead of setup_fs, includes changed
arpi
parents:
1307
diff
changeset
|
17 #include "registry.h" |
|
3189c317dfc1
using ldt_keeper instead of setup_fs, includes changed
arpi
parents:
1307
diff
changeset
|
18 #include "ldt_keeper.h" |
|
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
340
diff
changeset
|
19 #include "driver.h" |
| 8451 | 20 #include "ext.h" |
| 1 | 21 |
| 7386 | 22 extern char* def_path; |
| 1 | 23 |
|
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
340
diff
changeset
|
24 #if 1 |
| 7386 | 25 |
|
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
340
diff
changeset
|
26 /* |
|
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
340
diff
changeset
|
27 * STORE_ALL/REST_ALL seems like an attempt to workaround problems due to |
|
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
340
diff
changeset
|
28 * WINAPI/no-WINAPI bustage. |
|
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
340
diff
changeset
|
29 * |
| 7386 | 30 * There should be no need for the STORE_ALL/REST_ALL hack once all |
|
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
340
diff
changeset
|
31 * function definitions agree with their prototypes (WINAPI-wise) and |
|
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
340
diff
changeset
|
32 * we make sure, that we do not call these functions without a proper |
|
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
340
diff
changeset
|
33 * prototype in scope. |
|
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
340
diff
changeset
|
34 */ |
| 7386 | 35 |
| 36 #define STORE_ALL | |
| 37 #define REST_ALL | |
|
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
340
diff
changeset
|
38 #else |
| 7386 | 39 // this asm code is no longer needed |
| 1 | 40 #define STORE_ALL \ |
| 7386 | 41 __asm__ __volatile__ ( \ |
| 1 | 42 "push %%ebx\n\t" \ |
| 43 "push %%ecx\n\t" \ | |
| 44 "push %%edx\n\t" \ | |
| 45 "push %%esi\n\t" \ | |
| 46 "push %%edi\n\t"::) | |
| 47 | |
| 48 #define REST_ALL \ | |
| 7386 | 49 __asm__ __volatile__ ( \ |
| 1 | 50 "pop %%edi\n\t" \ |
| 51 "pop %%esi\n\t" \ | |
| 52 "pop %%edx\n\t" \ | |
| 53 "pop %%ecx\n\t" \ | |
| 54 "pop %%ebx\n\t"::) | |
|
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
340
diff
changeset
|
55 #endif |
| 1 | 56 |
| 7386 | 57 static int needs_free=0; |
| 58 void SetCodecPath(const char* path) | |
| 59 { | |
| 60 if(needs_free)free(def_path); | |
| 61 if(path==0) | |
| 62 { | |
| 63 def_path=WIN32_PATH; | |
| 64 needs_free=0; | |
| 65 return; | |
| 66 } | |
| 67 def_path = (char*) malloc(strlen(path)+1); | |
| 68 strcpy(def_path, path); | |
| 69 needs_free=1; | |
| 70 } | |
| 1 | 71 |
| 72 static DWORD dwDrvID = 0; | |
| 73 | |
| 7386 | 74 LRESULT WINAPI SendDriverMessage(HDRVR hDriver, UINT message, |
| 75 LPARAM lParam1, LPARAM lParam2) | |
| 1 | 76 { |
| 77 DRVR* module=(DRVR*)hDriver; | |
| 78 int result; | |
| 7386 | 79 #ifndef __svr4__ |
| 80 char qw[300]; | |
| 81 #endif | |
| 82 #ifdef DETAILED_OUT | |
| 1 | 83 printf("SendDriverMessage: driver %X, message %X, arg1 %X, arg2 %X\n", hDriver, message, lParam1, lParam2); |
| 84 #endif | |
| 7386 | 85 if (!module || !module->hDriverModule || !module->DriverProc) return -1; |
| 86 #ifndef __svr4__ | |
| 87 __asm__ __volatile__ ("fsave (%0)\n\t": :"r"(&qw)); | |
| 88 #endif | |
| 89 | |
| 90 Setup_FS_Segment(); | |
| 1 | 91 |
| 7386 | 92 STORE_ALL; |
| 93 result=module->DriverProc(module->dwDriverID, hDriver, message, lParam1, lParam2); | |
| 94 REST_ALL; | |
| 95 | |
| 96 #ifndef __svr4__ | |
| 97 __asm__ __volatile__ ("frstor (%0)\n\t": :"r"(&qw)); | |
| 98 #endif | |
| 99 | |
| 100 #ifdef DETAILED_OUT | |
| 101 printf("\t\tResult: %X\n", result); | |
| 102 #endif | |
| 103 return result; | |
| 1 | 104 } |
| 105 | |
| 7386 | 106 void DrvClose(HDRVR hDriver) |
| 1 | 107 { |
| 7386 | 108 if (hDriver) |
| 109 { | |
| 110 DRVR* d = (DRVR*)hDriver; | |
| 111 if (d->hDriverModule) | |
| 112 { | |
| 113 Setup_FS_Segment(); | |
| 114 if (d->DriverProc) | |
| 115 { | |
| 116 SendDriverMessage(hDriver, DRV_CLOSE, 0, 0); | |
| 117 d->dwDriverID = 0; | |
| 118 SendDriverMessage(hDriver, DRV_FREE, 0, 0); | |
| 119 } | |
| 120 FreeLibrary(d->hDriverModule); | |
| 121 } | |
| 122 free(d); | |
| 1 | 123 } |
| 7386 | 124 CodecRelease(); |
| 1 | 125 } |
| 126 | |
| 7386 | 127 //DrvOpen(LPCSTR lpszDriverName, LPCSTR lpszSectionName, LPARAM lParam2) |
| 128 HDRVR DrvOpen(LPARAM lParam2) | |
| 1 | 129 { |
| 7386 | 130 NPDRVR hDriver; |
| 131 int i; | |
| 132 char unknown[0x124]; | |
| 133 const char* filename = (const char*) ((ICOPEN*) lParam2)->pV1Reserved; | |
| 1 | 134 |
| 7386 | 135 #ifdef MPLAYER |
| 236 | 136 Setup_LDT_Keeper(); |
| 7386 | 137 printf("Loading codec DLL: '%s'\n",filename); |
| 138 #endif | |
| 236 | 139 |
| 7386 | 140 hDriver = (NPDRVR) malloc(sizeof(DRVR)); |
| 141 if (!hDriver) | |
| 1 | 142 return ((HDRVR) 0); |
| 7386 | 143 memset((void*)hDriver, 0, sizeof(DRVR)); |
| 1 | 144 |
| 7386 | 145 CodecAlloc(); |
| 146 Setup_FS_Segment(); | |
| 147 | |
| 148 hDriver->hDriverModule = LoadLibraryA(filename); | |
| 149 if (!hDriver->hDriverModule) | |
| 150 { | |
| 151 printf("Can't open library %s\n", filename); | |
| 152 DrvClose((HDRVR)hDriver); | |
| 153 return ((HDRVR) 0); | |
| 1 | 154 } |
| 155 | |
| 7386 | 156 hDriver->DriverProc = (DRIVERPROC) GetProcAddress(hDriver->hDriverModule, |
| 157 "DriverProc"); | |
| 158 if (!hDriver->DriverProc) | |
| 1 | 159 { |
| 7386 | 160 printf("Library %s is not a valid VfW/ACM codec\n", filename); |
| 161 DrvClose((HDRVR)hDriver); | |
| 162 return ((HDRVR) 0); | |
| 1 | 163 } |
| 164 | |
| 7386 | 165 TRACE("DriverProc == %X\n", hDriver->DriverProc); |
| 166 SendDriverMessage((HDRVR)hDriver, DRV_LOAD, 0, 0); | |
| 167 TRACE("DRV_LOAD Ok!\n"); | |
| 168 SendDriverMessage((HDRVR)hDriver, DRV_ENABLE, 0, 0); | |
| 169 TRACE("DRV_ENABLE Ok!\n"); | |
| 170 hDriver->dwDriverID = ++dwDrvID; // generate new id | |
| 1 | 171 |
| 7386 | 172 // open driver and remmeber proper DriverID |
| 173 hDriver->dwDriverID = SendDriverMessage((HDRVR)hDriver, DRV_OPEN, (LPARAM) unknown, lParam2); | |
| 174 TRACE("DRV_OPEN Ok!(%X)\n", hDriver->dwDriverID); | |
| 1 | 175 |
| 7386 | 176 printf("Loaded DLL driver %s\n", filename); |
| 177 return (HDRVR)hDriver; | |
| 1 | 178 } |
