diff options
Diffstat (limited to 'src/libw32dll/wine/ext.c')
-rw-r--r-- | src/libw32dll/wine/ext.c | 213 |
1 files changed, 116 insertions, 97 deletions
diff --git a/src/libw32dll/wine/ext.c b/src/libw32dll/wine/ext.c index 85adbc203..5c7576a18 100644 --- a/src/libw32dll/wine/ext.c +++ b/src/libw32dll/wine/ext.c @@ -1,5 +1,5 @@ /******************************************************** - * + * * * Stub functions for Wine module * @@ -8,10 +8,10 @@ #include "config.h" #include <stdio.h> #include <stdlib.h> -#include <unistd.h> #ifdef HAVE_MALLOC_H #include <malloc.h> #endif +#include <unistd.h> #include <sys/mman.h> #include <errno.h> #include <fcntl.h> @@ -23,25 +23,37 @@ #include "heap.h" #include "ext.h" +#if 0 +//REMOVE SIMPLIFY +static void* mymalloc(unsigned int size) +{ + printf("malloc %d\n", size); + return malloc(size); +} + +#undef malloc +#define malloc mymalloc +#endif + int dbg_header_err( const char *dbg_channel, const char *func ) { - return 0; + return 0; } int dbg_header_warn( const char *dbg_channel, const char *func ) { - return 0; + return 0; } int dbg_header_fixme( const char *dbg_channel, const char *func ) { - return 0; + return 0; } int dbg_header_trace( const char *dbg_channel, const char *func ) { - return 0; + return 0; } int dbg_vprintf( const char *format, va_list args ) { - return 0; + return 0; } int __vprintf( const char *format, ... ) { @@ -50,11 +62,10 @@ int __vprintf( const char *format, ... ) va_start(va, format); vprintf(format, va); va_end(va); - fflush(stdout); #endif - return 0; + return 0; } - + HANDLE WINAPI GetProcessHeap(void) { return 1; @@ -62,17 +73,22 @@ HANDLE WINAPI GetProcessHeap(void) LPVOID WINAPI HeapAlloc(HANDLE heap, DWORD flags, DWORD size) { - if(flags & 0x8) - return calloc(size, 1); - else - return malloc(size); + //static int i = 5; + void* m = (flags & 0x8) ? calloc(size, 1) : malloc(size); + //printf("HeapAlloc %p %d (%d)\n", m, size, flags); + //if (--i == 0) + // abort(); + return m; } WIN_BOOL WINAPI HeapFree(HANDLE heap, DWORD flags, LPVOID mem) { - free(mem); + if (mem) free(mem); + //printf("HeapFree %p\n", mem); + //if (!mem) + // abort(); return 1; -} +} static int last_error; @@ -81,29 +97,29 @@ DWORD WINAPI GetLastError(void) return last_error; } -void WINAPI SetLastError(DWORD error) -{ +VOID WINAPI SetLastError(DWORD error) +{ last_error=error; -} +} WIN_BOOL WINAPI ReadFile(HANDLE handle, LPVOID mem, DWORD size, LPDWORD result, LPOVERLAPPED flags) { *result=read(handle, mem, size); return *result; -} +} INT WINAPI lstrcmpiA(LPCSTR c1, LPCSTR c2) { return strcasecmp(c1,c2); } -char* WINAPI lstrcpynA(char* dest, const char* src, int num) +LPSTR WINAPI lstrcpynA(LPSTR dest, LPCSTR src, INT num) { return strncpy(dest,src,num); } -int WINAPI lstrlenA(const char* s) +INT WINAPI lstrlenA(LPCSTR s) { return strlen(s); -} -int WINAPI lstrlenW(LPCWSTR s) +} +INT WINAPI lstrlenW(LPCWSTR s) { int l; if(!s) @@ -115,7 +131,7 @@ int WINAPI lstrlenW(LPCWSTR s) } LPSTR WINAPI lstrcpynWtoA(LPSTR dest, LPCWSTR src, INT count) { - LPSTR retval = dest; + LPSTR result = dest; int moved=0; if((dest==0) || (src==0)) return 0; @@ -128,14 +144,16 @@ LPSTR WINAPI lstrcpynWtoA(LPSTR dest, LPCWSTR src, INT count) src++; dest++; } - return retval; + return result; } int wcsnicmp(const unsigned short* s1, const unsigned short* s2, int n) { + /* if(s1==0) - return 0; + return; if(s2==0) - return 0; + return; + */ while(n>0) { if(*s1<*s2) @@ -151,9 +169,8 @@ int wcsnicmp(const unsigned short* s1, const unsigned short* s2, int n) n--; } return 0; -} - - +} + WIN_BOOL WINAPI IsBadReadPtr(LPCVOID data, UINT size) { if(size==0) @@ -161,7 +178,7 @@ WIN_BOOL WINAPI IsBadReadPtr(LPCVOID data, UINT size) if(data==NULL) return 1; return 0; -} +} LPSTR HEAP_strdupA(HANDLE heap, DWORD flags, LPCSTR string) { // return strdup(string); @@ -176,12 +193,12 @@ LPWSTR HEAP_strdupAtoW(HANDLE heap, DWORD flags, LPCSTR string) if(string==0) return 0; size=strlen(string); - answer=malloc(size+size+2); + answer=malloc(2 * (size + 1)); for(i=0; i<=size; i++) answer[i]=(short)string[i]; - return answer; + return answer; } -char* HEAP_strdupWtoA(HANDLE heap, DWORD flags, LPCWSTR string) +LPSTR HEAP_strdupWtoA(HANDLE heap, DWORD flags, LPCWSTR string) { int size, i; char* answer; @@ -193,7 +210,7 @@ char* HEAP_strdupWtoA(HANDLE heap, DWORD flags, LPCWSTR string) answer=malloc(size+2); for(i=0; i<=size; i++) answer[i]=(char)string[i]; - return answer; + return answer; } /*********************************************************************** @@ -249,9 +266,9 @@ LPVOID FILE_dommap( int unix_handle, LPVOID start, MAP_PRIVATE | MAP_FIXED, fd, offset_low )) != (LPVOID)-1) { // printf("address %08x\n", *(int*)ret); -// printf("%x\n", ret); +// printf("%x\n", ret); return ret; - } + } // printf("mmap %d\n", errno); @@ -303,14 +320,14 @@ int FILE_munmap( LPVOID start, DWORD size_high, DWORD size_low ) printf("offsets larger than 4Gb not supported\n"); return munmap( start, size_low ); } -//static int mapping_size=0; +static int mapping_size=0; struct file_mapping_s; typedef struct file_mapping_s { int mapping_size; char* name; - void* handle; + LPVOID handle; struct file_mapping_s* next; struct file_mapping_s* prev; }file_mapping; @@ -329,27 +346,27 @@ static file_mapping* fm=0; #define PAGE_GUARD 0x100 #define PAGE_NOCACHE 0x200 -HANDLE WINAPI CreateFileMappingA(HANDLE hFile, LPSECURITY_ATTRIBUTES lpAttr, +HANDLE WINAPI CreateFileMappingA(HANDLE handle, LPSECURITY_ATTRIBUTES lpAttr, DWORD flProtect, - DWORD dwMaxHigh, DWORD dwMaxLow, + DWORD dwMaxHigh, DWORD dwMaxLow, LPCSTR name) { - int filedesc = (int)hFile; + int hFile = (int)handle; unsigned int len; - void* answer; + LPVOID answer; int anon=0; int mmap_access=0; - if(filedesc<0) + if(hFile<0) { anon=1; - filedesc=open("/dev/zero", O_RDWR); - if(filedesc<0) + hFile=open("/dev/zero", O_RDWR); + if(hFile<0) return 0; - } + } if(!anon) - { - len=lseek(filedesc, 0, SEEK_END); - lseek(filedesc, 0, SEEK_SET); + { + len=lseek(hFile, 0, SEEK_END); + lseek(hFile, 0, SEEK_SET); } else len=dwMaxLow; @@ -357,46 +374,46 @@ HANDLE WINAPI CreateFileMappingA(HANDLE hFile, LPSECURITY_ATTRIBUTES lpAttr, mmap_access |=PROT_READ; else mmap_access |=PROT_READ|PROT_WRITE; - - answer=mmap(NULL, len, mmap_access, MAP_PRIVATE, filedesc, 0); + + answer=mmap(NULL, len, mmap_access, MAP_PRIVATE, hFile, 0); if(anon) - close(filedesc); - if(answer!=(void*)-1) + close(hFile); + if(answer!=(LPVOID)-1) { if(fm==0) { fm=malloc(sizeof(file_mapping)); fm->prev=NULL; - } + } else { fm->next=malloc(sizeof(file_mapping)); fm->next->prev=fm; fm=fm->next; } - fm->next=NULL; + fm->next=NULL; fm->handle=answer; if(name) { fm->name=malloc(strlen(name)+1); strcpy(fm->name, name); - } + } else fm->name=NULL; fm->mapping_size=len; - + if(anon) - close(filedesc); + close(hFile); return (HANDLE)answer; } return (HANDLE)0; -} +} WIN_BOOL WINAPI UnmapViewOfFile(LPVOID handle) { file_mapping* p; int result; if(fm==0) - return (HANDLE)0; + return 0; for(p=fm; p; p=p->next) { if(p->handle==handle) @@ -410,10 +427,10 @@ WIN_BOOL WINAPI UnmapViewOfFile(LPVOID handle) fm=p->prev; free(p); return result; - } + } } - return 0; -} + return 0; +} //static int va_size=0; struct virt_alloc_s; typedef struct virt_alloc_s @@ -428,7 +445,7 @@ static virt_alloc* vm=0; #define MEM_COMMIT 0x00001000 #define MEM_RESERVE 0x00002000 -void* WINAPI VirtualAlloc(void* address, DWORD size, DWORD type, DWORD protection) +LPVOID WINAPI VirtualAlloc(LPVOID address, DWORD size, DWORD type, DWORD protection) { void* answer; int fd=open("/dev/zero", O_RDWR); @@ -436,7 +453,7 @@ void* WINAPI VirtualAlloc(void* address, DWORD size, DWORD type, DWORD protecti // printf("VirtualAlloc(0x%08X, %d)\n", address if(address!=0) { - //check whether we can allow to allocate this + //check whether we can allow to allocate this virt_alloc* str=vm; while(str) { @@ -444,7 +461,7 @@ void* WINAPI VirtualAlloc(void* address, DWORD size, DWORD type, DWORD protecti { str=str->prev; continue; - } + } if((unsigned)address+size<(unsigned)str->address) { str=str->prev; @@ -458,16 +475,16 @@ void* WINAPI VirtualAlloc(void* address, DWORD size, DWORD type, DWORD protecti close(fd); return address; //returning previously reserved memory } - return NULL; + return NULL; } close(fd); return NULL; } - answer=mmap(address, size, PROT_READ | PROT_WRITE | PROT_EXEC, + answer=mmap(address, size, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_FIXED | MAP_PRIVATE, fd, 0); - } + } else - answer=mmap(address, size, PROT_READ | PROT_WRITE | PROT_EXEC, + answer=mmap(address, size, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE, fd, 0); // answer=FILE_dommap(-1, address, 0, size, 0, 0, // PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE); @@ -475,7 +492,7 @@ void* WINAPI VirtualAlloc(void* address, DWORD size, DWORD type, DWORD protecti if(answer==(void*)-1) { printf("Error no %d\n", errno); - printf("VirtualAlloc(0x%08X, %ld) failed\n", (int) address, size); + printf("VirtualAlloc(0x%p, %ld) failed\n", address, size); return NULL; } else @@ -493,41 +510,43 @@ void* WINAPI VirtualAlloc(void* address, DWORD size, DWORD type, DWORD protecti vm=new_vm; vm->next=0; // if(va_size!=0) -// printf("Multiple VirtualAlloc!\n"); +// printf("Multiple VirtualAlloc!\n"); // printf("answer=0x%08x\n", answer); return answer; - } -} -WIN_BOOL WINAPI VirtualFree(LPVOID address, DWORD t1, DWORD t2)//not sure + } +} +WIN_BOOL WINAPI VirtualFree(LPVOID address, DWORD t1, DWORD t2)//not sure { virt_alloc* str=vm; int answer; while(str) { - if(address!=str->address) - { - str=str->prev; - continue; - } - answer=munmap(str->address, str->mapping_size); - if(str->next)str->next->prev=str->prev; - if(str->prev)str->prev->next=str->next; - if(vm==str)vm=0; - free(str); - return 0; + if(address!=str->address) + { + str=str->prev; + continue; + } + answer=munmap(str->address, str->mapping_size); + if(str->next)str->next->prev=str->prev; + if(str->prev)str->prev->next=str->next; + if(vm==str)vm=0; + free(str); + return 0; } return -1; } -int WINAPI WideCharToMultiByte(UINT codepage, DWORD flags, LPCWSTR src, +INT WINAPI WideCharToMultiByte(UINT codepage, DWORD flags, LPCWSTR src, INT srclen,LPSTR dest, INT destlen, LPCSTR defch, WIN_BOOL* used_defch) { int i; if(src==0) return 0; - for(i=0; i<srclen; i++) - printf("%c", src[i]); - printf("\n"); + if ((srclen==-1)&&(dest==0)) return 0; + if(srclen==-1){srclen=0; while(src[srclen++]);} +// for(i=0; i<srclen; i++) +// printf("%c", src[i]); +// printf("\n"); if(dest==0) { for(i=0; i<srclen; i++) @@ -536,10 +555,10 @@ int WINAPI WideCharToMultiByte(UINT codepage, DWORD flags, LPCWSTR src, if(*src==0) return i+1; } - return srclen+1; - } + return srclen+1; + } if(used_defch) - *used_defch=0; + *used_defch=0; for(i=0; i<min(srclen, destlen); i++) { *dest=(char)*src; @@ -547,7 +566,7 @@ int WINAPI WideCharToMultiByte(UINT codepage, DWORD flags, LPCWSTR src, src++; if(*src==0) return i+1; - } + } return min(srclen, destlen); } INT WINAPI MultiByteToWideChar(UINT codepage,DWORD flags, LPCSTR src, INT srclen, @@ -569,5 +588,5 @@ HANDLE WINAPI OpenFileMappingA(DWORD access, WIN_BOOL prot, LPCSTR name) if(strcmp(p->name, name)==0) return (HANDLE)p->handle; } - return 0; + return 0; } |