annotate loader/ext.c @ 35412:2de8e26093c4

Don't unconditionally reset AudioChannels after playback. Only do so if no media opened. This will continue displaying the correct audio channel information for the file still being opened after playback.
author ib
date Thu, 29 Nov 2012 11:35:22 +0000
parents 2a2e9b6551d8
children 389d43c448b3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1 /********************************************************
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
2 *
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
3 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
4 * Stub functions for Wine module
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
5 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
6 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
7 ********************************************************/
15166
f5537cc95b02 Mark modified imported files as such to comply with GPL ¡ø2a.
diego
parents: 13827
diff changeset
8
f5537cc95b02 Mark modified imported files as such to comply with GPL ¡ø2a.
diego
parents: 13827
diff changeset
9 /*
18783
0783dd397f74 CVS --> Subversion in copyright notices
diego
parents: 15166
diff changeset
10 * Modified for use with MPlayer, detailed changelog at
0783dd397f74 CVS --> Subversion in copyright notices
diego
parents: 15166
diff changeset
11 * http://svn.mplayerhq.hu/mplayer/trunk/
15166
f5537cc95b02 Mark modified imported files as such to comply with GPL ¡ø2a.
diego
parents: 13827
diff changeset
12 */
f5537cc95b02 Mark modified imported files as such to comply with GPL ¡ø2a.
diego
parents: 13827
diff changeset
13
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3134
diff changeset
14 #include "config.h"
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
15 #include <stdio.h>
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
16 #include <stdlib.h>
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
17 #include <unistd.h>
33412
2a2e9b6551d8 configure: Convert HAVE_SYS_MMAN_H into a 0/1 definition.
diego
parents: 32537
diff changeset
18 #if HAVE_SYS_MMAN_H
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
19 #include <sys/mman.h>
26111
eb82d1524b6d #include osdep/mman.h if sys/mman.h is not available.
diego
parents: 26105
diff changeset
20 #else
eb82d1524b6d #include osdep/mman.h if sys/mman.h is not available.
diego
parents: 26105
diff changeset
21 #include "osdep/mmap.h"
26105
c99d53b76ee5 Wrap '#include <sys/mman.h>' in HAVE_SYS_MMAN_H.
diego
parents: 25849
diff changeset
22 #endif
1
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 <string.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
26 #include <stdarg.h>
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3134
diff changeset
27 #include <ctype.h>
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 3775
diff changeset
28
21187
d9cedf7b8069 added mmap_anon to osdep lib. Used in loader for now
nplourde
parents: 18783
diff changeset
29 #include "osdep/mmap_anon.h"
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 3775
diff changeset
30 #include "wine/windef.h"
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 3775
diff changeset
31 #include "wine/winbase.h"
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 3775
diff changeset
32 #include "wine/debugtools.h"
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 3775
diff changeset
33 #include "wine/heap.h"
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
34 #include "ext.h"
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
35
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
36 #if 0
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
37 //REMOVE SIMPLIFY
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
38 static void* mymalloc(unsigned int size)
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
39 {
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
40 printf("malloc %d\n", size);
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
41 return malloc(size);
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
42 }
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
43
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
44 #undef malloc
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
45 #define malloc mymalloc
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
46 #endif
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
47
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
48 int dbg_header_err( const char *dbg_channel, const char *func )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
49 {
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
50 return 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
51 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
52 int dbg_header_warn( const char *dbg_channel, const char *func )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
53 {
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
54 return 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
55 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
56 int dbg_header_fixme( const char *dbg_channel, const char *func )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
57 {
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
58 return 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
59 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
60 int dbg_header_trace( const char *dbg_channel, const char *func )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
61 {
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
62 return 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
63 }
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
64 int dbg_vprintf( const char *format, va_list args )
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
65 {
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
66 return 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
67 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
68 int __vprintf( const char *format, ... )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
69 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
70 #ifdef DETAILED_OUT
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
71 va_list va;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
72 va_start(va, format);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
73 vprintf(format, va);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
74 va_end(va);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
75 #endif
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
76 return 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
77 }
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
78
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
79 HANDLE WINAPI GetProcessHeap(void)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
80 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
81 return 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
82 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
83
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
84 LPVOID WINAPI HeapAlloc(HANDLE heap, DWORD flags, DWORD size)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
85 {
24383
d7f252c2e3a6 warning fixes:
diego
parents: 22413
diff changeset
86 //static int i = 5;
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
87 void* m = (flags & 0x8) ? calloc(size, 1) : malloc(size);
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
88 //printf("HeapAlloc %p %d (%d)\n", m, size, flags);
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
89 //if (--i == 0)
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
90 // abort();
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
91 return m;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
92 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
93
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
94 WIN_BOOL WINAPI HeapFree(HANDLE heap, DWORD flags, LPVOID mem)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
95 {
32537
8fa2f43cb760 Remove most of the NULL pointer check before free all over the code
cboesch
parents: 32394
diff changeset
96 free(mem);
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
97 //printf("HeapFree %p\n", mem);
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
98 //if (!mem)
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
99 // abort();
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
100 return 1;
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
101 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
102
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
103 static int last_error;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
104
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
105 DWORD WINAPI GetLastError(void)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
106 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
107 return last_error;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
108 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
109
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
110 VOID WINAPI SetLastError(DWORD error)
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 last_error=error;
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
113 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
114
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
115 WIN_BOOL WINAPI ReadFile(HANDLE handle, LPVOID mem, DWORD size, LPDWORD result, LPOVERLAPPED flags)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
116 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
117 *result=read(handle, mem, size);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
118 return *result;
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
119 }
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
120 INT WINAPI lstrcmpiA(LPCSTR c1, LPCSTR c2)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
121 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
122 return strcasecmp(c1,c2);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
123 }
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
124 LPSTR WINAPI lstrcpynA(LPSTR dest, LPCSTR src, INT num)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
125 {
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
126 return strncpy(dest,src,num);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
127 }
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
128 INT WINAPI lstrlenA(LPCSTR s)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
129 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
130 return strlen(s);
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
131 }
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
132 INT WINAPI lstrlenW(LPCWSTR s)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
133 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
134 int l;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
135 if(!s)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
136 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
137 l=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
138 while(s[l])
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
139 l++;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
140 return l;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
141 }
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
142 LPSTR WINAPI lstrcpynWtoA(LPSTR dest, LPCWSTR src, INT count)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
143 {
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
144 LPSTR result = dest;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
145 int moved=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
146 if((dest==0) || (src==0))
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
147 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
148 while(moved<count)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
149 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
150 *dest=*src;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
151 moved++;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
152 if(*src==0)
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
153 break;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
154 src++;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
155 dest++;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
156 }
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
157 return result;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
158 }
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3134
diff changeset
159 /* i stands here for ignore case! */
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
160 int wcsnicmp(const unsigned short* s1, const unsigned short* s2, int n)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
161 {
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
162 /*
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
163 if(s1==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
164 return;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
165 if(s2==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
166 return;
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
167 */
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
168 while(n>0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
169 {
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3134
diff changeset
170 if (((*s1 | *s2) & 0xff00) || toupper((char)*s1) != toupper((char)*s2))
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3134
diff changeset
171 {
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3134
diff changeset
172
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3134
diff changeset
173 if(*s1<*s2)
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3134
diff changeset
174 return -1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
175 else
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3134
diff changeset
176 if(*s1>*s2)
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3134
diff changeset
177 return 1;
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3134
diff changeset
178 else
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3134
diff changeset
179 if(*s1==0)
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3134
diff changeset
180 return 0;
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3134
diff changeset
181 }
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3134
diff changeset
182 s1++;
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3134
diff changeset
183 s2++;
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3134
diff changeset
184 n--;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
185 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
186 return 0;
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
187 }
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
188
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
189 WIN_BOOL WINAPI IsBadReadPtr(LPCVOID data, UINT size)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
190 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
191 if(size==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
192 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
193 if(data==NULL)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
194 return 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
195 return 0;
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
196 }
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
197 LPSTR HEAP_strdupA(HANDLE heap, DWORD flags, LPCSTR string)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
198 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
199 // return strdup(string);
30702
9fc9d1e788aa Do not cast the results of malloc/calloc/realloc.
diego
parents: 29263
diff changeset
200 char* answ = malloc(strlen(string) + 1);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
201 strcpy(answ, string);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
202 return answ;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
203 }
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
204 LPWSTR HEAP_strdupAtoW(HANDLE heap, DWORD flags, LPCSTR string)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
205 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
206 int size, i;
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 3775
diff changeset
207 WCHAR* answer;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
208 if(string==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
209 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
210 size=strlen(string);
30702
9fc9d1e788aa Do not cast the results of malloc/calloc/realloc.
diego
parents: 29263
diff changeset
211 answer = malloc(sizeof(WCHAR) * (size + 1));
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
212 for(i=0; i<=size; i++)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
213 answer[i]=(short)string[i];
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
214 return answer;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
215 }
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
216 LPSTR HEAP_strdupWtoA(HANDLE heap, DWORD flags, LPCWSTR string)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
217 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
218 int size, i;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
219 char* answer;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
220 if(string==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
221 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
222 size=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
223 while(string[size])
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
224 size++;
30702
9fc9d1e788aa Do not cast the results of malloc/calloc/realloc.
diego
parents: 29263
diff changeset
225 answer = malloc(size + 2);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
226 for(i=0; i<=size; i++)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
227 answer[i]=(char)string[i];
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
228 return answer;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
229 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
230
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
231 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
232 * FILE_dommap
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
233 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
234
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
235 //#define MAP_PRIVATE
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
236 //#define MAP_SHARED
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
237 LPVOID FILE_dommap( int unix_handle, LPVOID start,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
238 DWORD size_high, DWORD size_low,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
239 DWORD offset_high, DWORD offset_low,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
240 int prot, int flags )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
241 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
242 int fd = -1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
243 int pos;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
244 LPVOID ret;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
245
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
246 if (size_high || offset_high)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
247 printf("offsets larger than 4Gb not supported\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
248
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
249 if (unix_handle == -1)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
250 {
21248
2de480457872 Remove useless fd parameter for mmap_anon
reimar
parents: 21246
diff changeset
251 ret = mmap_anon( start, size_low, prot, flags, offset_low );
21187
d9cedf7b8069 added mmap_anon to osdep lib. Used in loader for now
nplourde
parents: 18783
diff changeset
252 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
253 else
21187
d9cedf7b8069 added mmap_anon to osdep lib. Used in loader for now
nplourde
parents: 18783
diff changeset
254 {
d9cedf7b8069 added mmap_anon to osdep lib. Used in loader for now
nplourde
parents: 18783
diff changeset
255 fd = unix_handle;
d9cedf7b8069 added mmap_anon to osdep lib. Used in loader for now
nplourde
parents: 18783
diff changeset
256 ret = mmap( start, size_low, prot, flags, fd, offset_low );
d9cedf7b8069 added mmap_anon to osdep lib. Used in loader for now
nplourde
parents: 18783
diff changeset
257 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
258
21187
d9cedf7b8069 added mmap_anon to osdep lib. Used in loader for now
nplourde
parents: 18783
diff changeset
259 if (ret != (LPVOID)-1)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
260 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
261 // printf("address %08x\n", *(int*)ret);
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
262 // printf("%x\n", ret);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
263 return ret;
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
264 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
265
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
266 // printf("mmap %d\n", errno);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
267
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
268 /* mmap() failed; if this is because the file offset is not */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
269 /* page-aligned (EINVAL), or because the underlying filesystem */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
270 /* does not support mmap() (ENOEXEC), we do it by hand. */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
271
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
272 if (unix_handle == -1) return ret;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
273 if ((errno != ENOEXEC) && (errno != EINVAL)) return ret;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
274 if (prot & PROT_WRITE)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
275 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
276 /* We cannot fake shared write mappings */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
277 #ifdef MAP_SHARED
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
278 if (flags & MAP_SHARED) return ret;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
279 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
280 #ifdef MAP_PRIVATE
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
281 if (!(flags & MAP_PRIVATE)) return ret;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
282 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
283 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
284 /* printf( "FILE_mmap: mmap failed (%d), faking it\n", errno );*/
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
285 /* Reserve the memory with an anonymous mmap */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
286 ret = FILE_dommap( -1, start, size_high, size_low, 0, 0,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
287 PROT_READ | PROT_WRITE, flags );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
288 if (ret == (LPVOID)-1)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
289 // {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
290 // perror(
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
291 return ret;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
292 /* Now read in the file */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
293 if ((pos = lseek( fd, offset_low, SEEK_SET )) == -1)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
294 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
295 FILE_munmap( ret, size_high, size_low );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
296 // printf("lseek\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
297 return (LPVOID)-1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
298 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
299 read( fd, ret, size_low );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
300 lseek( fd, pos, SEEK_SET ); /* Restore the file pointer */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
301 mprotect( ret, size_low, prot ); /* Set the right protection */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
302 // printf("address %08x\n", *(int*)ret);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
303 return ret;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
304 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
305
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
306
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
307 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
308 * FILE_munmap
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
309 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
310 int FILE_munmap( LPVOID start, DWORD size_high, DWORD size_low )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
311 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
312 if (size_high)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
313 printf("offsets larger than 4Gb not supported\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
314 return munmap( start, size_low );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
315 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
316
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
317 struct file_mapping_s;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
318 typedef struct file_mapping_s
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
319 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
320 int mapping_size;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
321 char* name;
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
322 LPVOID handle;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
323 struct file_mapping_s* next;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
324 struct file_mapping_s* prev;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
325 }file_mapping;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
326 static file_mapping* fm=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
327
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
328
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
329
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
330 #define PAGE_NOACCESS 0x01
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
331 #define PAGE_READONLY 0x02
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
332 #define PAGE_READWRITE 0x04
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
333 #define PAGE_WRITECOPY 0x08
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
334 #define PAGE_EXECUTE 0x10
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
335 #define PAGE_EXECUTE_READ 0x20
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
336 #define PAGE_EXECUTE_READWRITE 0x40
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
337 #define PAGE_EXECUTE_WRITECOPY 0x80
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
338 #define PAGE_GUARD 0x100
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
339 #define PAGE_NOCACHE 0x200
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
340
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
341 HANDLE WINAPI CreateFileMappingA(HANDLE handle, LPSECURITY_ATTRIBUTES lpAttr,
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
342 DWORD flProtect,
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
343 DWORD dwMaxHigh, DWORD dwMaxLow,
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
344 LPCSTR name)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
345 {
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
346 int hFile = (int)handle;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
347 unsigned int len;
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
348 LPVOID answer;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
349 int anon=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
350 int mmap_access=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
351 if(hFile<0)
21187
d9cedf7b8069 added mmap_anon to osdep lib. Used in loader for now
nplourde
parents: 18783
diff changeset
352 anon=1;
d9cedf7b8069 added mmap_anon to osdep lib. Used in loader for now
nplourde
parents: 18783
diff changeset
353
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
354 if(!anon)
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
355 {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
356 len=lseek(hFile, 0, SEEK_END);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
357 lseek(hFile, 0, SEEK_SET);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
358 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
359 else len=dwMaxLow;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
360
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
361 if(flProtect & PAGE_READONLY)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
362 mmap_access |=PROT_READ;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
363 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
364 mmap_access |=PROT_READ|PROT_WRITE;
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
365
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
366 if(anon)
21248
2de480457872 Remove useless fd parameter for mmap_anon
reimar
parents: 21246
diff changeset
367 answer=mmap_anon(NULL, len, mmap_access, MAP_PRIVATE, 0);
21187
d9cedf7b8069 added mmap_anon to osdep lib. Used in loader for now
nplourde
parents: 18783
diff changeset
368 else
d9cedf7b8069 added mmap_anon to osdep lib. Used in loader for now
nplourde
parents: 18783
diff changeset
369 answer=mmap(NULL, len, mmap_access, MAP_PRIVATE, hFile, 0);
d9cedf7b8069 added mmap_anon to osdep lib. Used in loader for now
nplourde
parents: 18783
diff changeset
370
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
371 if(answer!=(LPVOID)-1)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
372 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
373 if(fm==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
374 {
30702
9fc9d1e788aa Do not cast the results of malloc/calloc/realloc.
diego
parents: 29263
diff changeset
375 fm = malloc(sizeof(file_mapping));
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
376 fm->prev=NULL;
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
377 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
378 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
379 {
30702
9fc9d1e788aa Do not cast the results of malloc/calloc/realloc.
diego
parents: 29263
diff changeset
380 fm->next = malloc(sizeof(file_mapping));
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
381 fm->next->prev=fm;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
382 fm=fm->next;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
383 }
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
384 fm->next=NULL;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
385 fm->handle=answer;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
386 if(name)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
387 {
30702
9fc9d1e788aa Do not cast the results of malloc/calloc/realloc.
diego
parents: 29263
diff changeset
388 fm->name = malloc(strlen(name)+1);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
389 strcpy(fm->name, name);
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
390 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
391 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
392 fm->name=NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
393 fm->mapping_size=len;
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
394
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
395 return (HANDLE)answer;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
396 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
397 return (HANDLE)0;
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
398 }
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
399 WIN_BOOL WINAPI UnmapViewOfFile(LPVOID handle)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
400 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
401 file_mapping* p;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
402 int result;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
403 if(fm==0)
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
404 return 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
405 for(p=fm; p; p=p->next)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
406 {
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
407 if(p->handle==handle)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
408 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
409 result=munmap((void*)handle, p->mapping_size);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
410 if(p->next)p->next->prev=p->prev;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
411 if(p->prev)p->prev->next=p->next;
32537
8fa2f43cb760 Remove most of the NULL pointer check before free all over the code
cboesch
parents: 32394
diff changeset
412 free(p->name);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
413 if(p==fm)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
414 fm=p->prev;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
415 free(p);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
416 return result;
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
417 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
418 }
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
419 return 0;
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
420 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
421 //static int va_size=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
422 struct virt_alloc_s;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
423 typedef struct virt_alloc_s
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
424 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
425 int mapping_size;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
426 char* address;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
427 struct virt_alloc_s* next;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
428 struct virt_alloc_s* prev;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
429 int state;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
430 }virt_alloc;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
431 static virt_alloc* vm=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
432 #define MEM_COMMIT 0x00001000
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
433 #define MEM_RESERVE 0x00002000
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
434
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
435 LPVOID WINAPI VirtualAlloc(LPVOID address, DWORD size, DWORD type, DWORD protection)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
436 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
437 void* answer;
13303
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
438 long pgsz;
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
439
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
440 //printf("VirtualAlloc(0x%08X, %u, 0x%08X, 0x%08X)\n", (unsigned)address, size, type, protection);
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
441
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
442 if ((type&(MEM_RESERVE|MEM_COMMIT)) == 0) return NULL;
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
443
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
444 if (type&MEM_RESERVE && (unsigned)address&0xffff) {
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
445 size += (unsigned)address&0xffff;
13827
374178b2a49a gcc-4.0.0-20041024 compile-fix
atmos4
parents: 13306
diff changeset
446 address = (unsigned)address&~0xffff;
13303
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
447 }
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
448 pgsz = sysconf(_SC_PAGESIZE);
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
449 if (type&MEM_COMMIT && (unsigned)address%pgsz) {
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
450 size += (unsigned)address%pgsz;
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
451 address -= (unsigned)address%pgsz;
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
452 }
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
453
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
454 if (type&MEM_RESERVE && size<0x10000) size = 0x10000;
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
455 if (size%pgsz) size += pgsz - size%pgsz;
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
456
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
457 if(address!=0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
458 {
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
459 //check whether we can allow to allocate this
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
460 virt_alloc* str=vm;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
461 while(str)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
462 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
463 if((unsigned)address>=(unsigned)str->address+str->mapping_size)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
464 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
465 str=str->prev;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
466 continue;
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
467 }
13303
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
468 if((unsigned)address+size<=(unsigned)str->address)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
469 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
470 str=str->prev;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
471 continue;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
472 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
473 if(str->state==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
474 {
32394
914208d188b9 Remove #warning preprocessor directives or replace them by suitable comments.
diego
parents: 30702
diff changeset
475 // FIXME
13303
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
476 if( ((unsigned)address >= (unsigned)str->address)
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
477 && ((unsigned)address+size<=(unsigned)str->address+str->mapping_size)
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
478 && (type & MEM_COMMIT))
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
479 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
480 return address; //returning previously reserved memory
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
481 }
13303
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
482 //printf(" VirtualAlloc(...) does not commit or not entirely within reserved, and\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
483 }
13303
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
484 /*printf(" VirtualAlloc(...) (0x%08X, %u) overlaps with (0x%08X, %u, state=%d)\n",
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
485 (unsigned)address, size, (unsigned)str->address, str->mapping_size, str->state);*/
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
486 return NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
487 }
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
488 }
13303
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
489
21187
d9cedf7b8069 added mmap_anon to osdep lib. Used in loader for now
nplourde
parents: 18783
diff changeset
490 answer=mmap_anon(address, size, PROT_READ | PROT_WRITE | PROT_EXEC,
21248
2de480457872 Remove useless fd parameter for mmap_anon
reimar
parents: 21246
diff changeset
491 MAP_PRIVATE, 0);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
492 // answer=FILE_dommap(-1, address, 0, size, 0, 0,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
493 // PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE);
21187
d9cedf7b8069 added mmap_anon to osdep lib. Used in loader for now
nplourde
parents: 18783
diff changeset
494
13303
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
495 if (answer != (void *)-1 && address && answer != address) {
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
496 /* It is dangerous to try mmap() with MAP_FIXED since it does not
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
497 always detect conflicts or non-allocation and chaos ensues after
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
498 a successful call but an overlapping or non-allocated region. */
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
499 munmap(answer, size);
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
500 answer = (void *) -1;
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
501 errno = EINVAL;
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
502 //printf(" VirtualAlloc(...) cannot satisfy requested address but address=NULL would work.\n");
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
503 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
504 if(answer==(void*)-1)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
505 {
13306
rtognimp
parents: 13303
diff changeset
506 /*printf(" VirtualAlloc(...) mmap(0x%08X, %u, ...) failed with errno=%d (\"%s\")\n",
rtognimp
parents: 13303
diff changeset
507 (unsigned)address, size, errno, strerror(errno));*/
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
508 return NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
509 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
510 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
511 {
30702
9fc9d1e788aa Do not cast the results of malloc/calloc/realloc.
diego
parents: 29263
diff changeset
512 virt_alloc *new_vm = malloc(sizeof(virt_alloc));
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
513 new_vm->mapping_size=size;
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 3775
diff changeset
514 new_vm->address=(char*)answer;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
515 new_vm->prev=vm;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
516 if(type == MEM_RESERVE)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
517 new_vm->state=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
518 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
519 new_vm->state=1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
520 if(vm)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
521 vm->next=new_vm;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
522 vm=new_vm;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
523 vm->next=0;
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 2651
diff changeset
524 //if(va_size!=0)
181db9e5a887 avifile sync again... :(
arpi
parents: 2651
diff changeset
525 // printf("Multiple VirtualAlloc!\n");
13303
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
526 //printf(" VirtualAlloc(...) provides (0x%08X, %u)\n", (unsigned)answer, size);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
527 return answer;
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
528 }
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
529 }
13303
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
530
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 2651
diff changeset
531 WIN_BOOL WINAPI VirtualFree(LPVOID address, SIZE_T dwSize, DWORD dwFreeType)//not sure
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
532 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
533 virt_alloc* str=vm;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
534 int answer;
13303
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
535
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
536 //printf("VirtualFree(0x%08X, %d, 0x%08X)\n", (unsigned)address, dwSize, dwFreeType);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
537 while(str)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
538 {
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
539 if(address!=str->address)
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
540 {
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
541 str=str->prev;
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
542 continue;
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
543 }
13303
2571b2e0c0b4 Fixes for VirtualAlloc function:
rtognimp
parents: 7386
diff changeset
544 //printf(" VirtualFree(...) munmap(0x%08X, %d)\n", (unsigned)str->address, str->mapping_size);
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
545 answer=munmap(str->address, str->mapping_size);
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
546 if(str->next)str->next->prev=str->prev;
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
547 if(str->prev)str->prev->next=str->next;
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 2651
diff changeset
548 if(vm==str)vm=str->prev;
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
549 free(str);
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
550 return 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
551 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
552 return -1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
553 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
554
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
555 INT WINAPI WideCharToMultiByte(UINT codepage, DWORD flags, LPCWSTR src,
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
556 INT srclen,LPSTR dest, INT destlen, LPCSTR defch, WIN_BOOL* used_defch)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
557 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
558 int i;
128
28091b3caff9 DLL loader updated from avifile-0.60beta4
arpi_esp
parents: 1
diff changeset
559 if(srclen==-1){srclen=0; while(src[srclen++]);}
22413
219d577285e1 Fix and simplify the WideCharToMultiByte and MultiByteToWideChar pseudo-implementations.
reimar
parents: 21248
diff changeset
560 if(destlen==0)
219d577285e1 Fix and simplify the WideCharToMultiByte and MultiByteToWideChar pseudo-implementations.
reimar
parents: 21248
diff changeset
561 return srclen;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
562 if(used_defch)
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
563 *used_defch=0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
564 for(i=0; i<min(srclen, destlen); i++)
22413
219d577285e1 Fix and simplify the WideCharToMultiByte and MultiByteToWideChar pseudo-implementations.
reimar
parents: 21248
diff changeset
565 *dest++=(char)*src++;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
566 return min(srclen, destlen);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
567 }
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
568 INT WINAPI MultiByteToWideChar(UINT codepage,DWORD flags, LPCSTR src, INT srclen,
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
569 LPWSTR dest, INT destlen)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
570 {
22413
219d577285e1 Fix and simplify the WideCharToMultiByte and MultiByteToWideChar pseudo-implementations.
reimar
parents: 21248
diff changeset
571 int i;
219d577285e1 Fix and simplify the WideCharToMultiByte and MultiByteToWideChar pseudo-implementations.
reimar
parents: 21248
diff changeset
572 if(srclen==-1){srclen=0; while(src[srclen++]);}
219d577285e1 Fix and simplify the WideCharToMultiByte and MultiByteToWideChar pseudo-implementations.
reimar
parents: 21248
diff changeset
573 if(destlen==0)
219d577285e1 Fix and simplify the WideCharToMultiByte and MultiByteToWideChar pseudo-implementations.
reimar
parents: 21248
diff changeset
574 return srclen;
219d577285e1 Fix and simplify the WideCharToMultiByte and MultiByteToWideChar pseudo-implementations.
reimar
parents: 21248
diff changeset
575 for(i=0; i<min(srclen, destlen); i++)
219d577285e1 Fix and simplify the WideCharToMultiByte and MultiByteToWideChar pseudo-implementations.
reimar
parents: 21248
diff changeset
576 *dest++=(WCHAR)*src++;
219d577285e1 Fix and simplify the WideCharToMultiByte and MultiByteToWideChar pseudo-implementations.
reimar
parents: 21248
diff changeset
577 return min(srclen, destlen);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
578 }
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 128
diff changeset
579 HANDLE WINAPI OpenFileMappingA(DWORD access, WIN_BOOL prot, LPCSTR name)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
580 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
581 file_mapping* p;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
582 if(fm==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
583 return (HANDLE)0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
584 if(name==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
585 return (HANDLE)0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
586 for(p=fm; p; p=p->prev)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
587 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
588 if(p->name==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
589 continue;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
590 if(strcmp(p->name, name)==0)
2069
ce45cce7f7a5 sync with avifile
arpi
parents: 1307
diff changeset
591 return (HANDLE)p->handle;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
592 }
2651
958d10763c34 partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents: 2069
diff changeset
593 return 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
594 }