WIN_BOOL WINAPI HeapFree(HANDLE heap, DWORD flags, LPVOID mem)
{
- if (mem) free(mem);
+ free( mem );
//printf("HeapFree %p\n", mem);
//if (!mem)
// abort();
{
int l;
if(!s)
- return 0;
+ return 0;
l=0;
while(s[l])
- l++;
+ l++;
return l;
}
LPSTR WINAPI lstrcpynWtoA(LPSTR dest, LPCWSTR src, INT count)
{
LPSTR result = dest;
int moved=0;
- if((dest==0) || (src==0))
- return 0;
+ if((dest==NULL) || (src==NULL))
+ return 0;
while(moved<count)
{
*dest=*src;
- moved++;
- if(*src==0)
- break;
- src++;
- dest++;
+ moved++;
+ if(*src==0)
+ break;
+ src++;
+ dest++;
}
return result;
}
{
/*
if(s1==0)
- return;
+ return;
if(s2==0)
return;
*/
while(n>0)
{
- if (((*s1 | *s2) & 0xff00) || toupper((char)*s1) != toupper((char)*s2))
- {
-
- if(*s1<*s2)
- return -1;
- else
- if(*s1>*s2)
- return 1;
- else
- if(*s1==0)
- return 0;
- }
- s1++;
- s2++;
- n--;
+ if (((*s1 | *s2) & 0xff00) || toupper((char)*s1) != toupper((char)*s2))
+ {
+
+ if(*s1<*s2)
+ return -1;
+ else
+ if(*s1>*s2)
+ return 1;
+ else
+ if(*s1==0)
+ return 0;
+ }
+ s1++;
+ s2++;
+ n--;
}
return 0;
}
WIN_BOOL WINAPI IsBadReadPtr(LPCVOID data, UINT size)
{
if(size==0)
- return 0;
+ return 0;
if(data==NULL)
return 1;
return 0;
{
int size, i;
WCHAR* answer;
- if(string==0)
- return 0;
+ if(string==NULL)
+ return 0;
size=strlen(string);
answer = (WCHAR*) malloc(sizeof(WCHAR) * (size + 1));
for(i=0; i<=size; i++)
- answer[i]=(short)string[i];
+ answer[i]=(short)string[i];
return answer;
}
LPSTR HEAP_strdupWtoA(HANDLE heap, DWORD flags, LPCWSTR string)
{
int size, i;
char* answer;
- if(string==0)
- return 0;
+ if(string==NULL)
+ return 0;
size=0;
while(string[size])
size++;
answer = (char*) malloc(size + 2);
for(i=0; i<=size; i++)
- answer[i]=(char)string[i];
+ answer[i]=(char)string[i];
return answer;
}
if (unix_handle == -1)
{
#ifdef MAP_ANON
-// printf("Anonymous\n");
+// printf("Anonymous\n");
flags |= MAP_ANON;
#else
static int fdzero = -1;
{
if ((fdzero = open( "/dev/zero", O_RDONLY )) == -1)
{
- perror( "Cannot open /dev/zero for READ. Check permissions! error: " );
+ perror( "Cannot open /dev/zero for READ. Check permissions! error: " );
exit(1);
}
}
fd = fdzero;
#endif /* MAP_ANON */
- /* Linux EINVAL's on us if we don't pass MAP_PRIVATE to an anon mmap */
+ /* Linux EINVAL's on us if we don't pass MAP_PRIVATE to an anon mmap */
#ifdef MAP_SHARED
- flags &= ~MAP_SHARED;
+ flags &= ~MAP_SHARED;
#endif
#ifdef MAP_PRIVATE
- flags |= MAP_PRIVATE;
+ flags |= MAP_PRIVATE;
#endif
}
else fd = unix_handle;
if ((ret = mmap( start, size_low, prot,
MAP_PRIVATE | MAP_FIXED, fd, offset_low )) != (LPVOID)-1)
{
-// printf("address %08x\n", *(int*)ret);
-// printf("%x\n", ret);
- return ret;
+// printf("address %08x\n", *(int*)ret);
+// printf("%x\n", ret);
+ return ret;
}
// printf("mmap %d\n", errno);
{
/* We cannot fake shared write mappings */
#ifdef MAP_SHARED
- if (flags & MAP_SHARED) return ret;
+ if (flags & MAP_SHARED) return ret;
#endif
#ifdef MAP_PRIVATE
- if (!(flags & MAP_PRIVATE)) return ret;
+ if (!(flags & MAP_PRIVATE)) return ret;
#endif
}
/* printf( "FILE_mmap: mmap failed (%d), faking it\n", errno );*/
PROT_READ | PROT_WRITE, flags );
if (ret == (LPVOID)-1)
// {
-// perror(
- return ret;
+// perror(
+ return ret;
/* Now read in the file */
if ((pos = lseek( fd, offset_low, SEEK_SET )) == -1)
{
FILE_munmap( ret, size_high, size_low );
-// printf("lseek\n");
+// printf("lseek\n");
return (LPVOID)-1;
}
read( fd, ret, size_low );
-#define PAGE_NOACCESS 0x01
-#define PAGE_READONLY 0x02
-#define PAGE_READWRITE 0x04
-#define PAGE_WRITECOPY 0x08
-#define PAGE_EXECUTE 0x10
-#define PAGE_EXECUTE_READ 0x20
-#define PAGE_EXECUTE_READWRITE 0x40
-#define PAGE_EXECUTE_WRITECOPY 0x80
-#define PAGE_GUARD 0x100
-#define PAGE_NOCACHE 0x200
+#define PAGE_NOACCESS 0x01
+#define PAGE_READONLY 0x02
+#define PAGE_READWRITE 0x04
+#define PAGE_WRITECOPY 0x08
+#define PAGE_EXECUTE 0x10
+#define PAGE_EXECUTE_READ 0x20
+#define PAGE_EXECUTE_READWRITE 0x40
+#define PAGE_EXECUTE_WRITECOPY 0x80
+#define PAGE_GUARD 0x100
+#define PAGE_NOCACHE 0x200
HANDLE WINAPI CreateFileMappingA(HANDLE handle, LPSECURITY_ATTRIBUTES lpAttr,
- DWORD flProtect,
- DWORD dwMaxHigh, DWORD dwMaxLow,
- LPCSTR name)
+ DWORD flProtect,
+ DWORD dwMaxHigh, DWORD dwMaxLow,
+ LPCSTR name)
{
int hFile = (int)handle;
unsigned int len;
int mmap_access=0;
if(hFile<0)
{
- anon=1;
- hFile=open("/dev/zero", O_RDWR);
- if(hFile<0){
- perror( "Cannot open /dev/zero for READ+WRITE. Check permissions! error: " );
- return 0;
- }
+ anon=1;
+ hFile=open("/dev/zero", O_RDWR);
+ if(hFile<0){
+ perror( "Cannot open /dev/zero for READ+WRITE. Check permissions! error: " );
+ return 0;
+ }
}
if(!anon)
{
len=lseek(hFile, 0, SEEK_END);
- lseek(hFile, 0, SEEK_SET);
+ lseek(hFile, 0, SEEK_SET);
}
else len=dwMaxLow;
if(flProtect & PAGE_READONLY)
- mmap_access |=PROT_READ;
+ mmap_access |=PROT_READ;
else
- mmap_access |=PROT_READ|PROT_WRITE;
+ mmap_access |=PROT_READ|PROT_WRITE;
answer=mmap(NULL, len, mmap_access, MAP_PRIVATE, hFile, 0);
if(anon)
close(hFile);
if(answer!=(LPVOID)-1)
{
- if(fm==0)
- {
- fm = (file_mapping*) malloc(sizeof(file_mapping));
- fm->prev=NULL;
- }
- else
- {
- fm->next = (file_mapping*) malloc(sizeof(file_mapping));
- fm->next->prev=fm;
- fm=fm->next;
- }
- fm->next=NULL;
- fm->handle=answer;
- if(name)
- {
- fm->name = (char*) malloc(strlen(name)+1);
- strcpy(fm->name, name);
- }
- else
- fm->name=NULL;
- fm->mapping_size=len;
-
- if(anon)
- close(hFile);
- return (HANDLE)answer;
+ if(fm==NULL)
+ {
+ fm = (file_mapping*) malloc(sizeof(file_mapping));
+ fm->prev=NULL;
+ }
+ else
+ {
+ fm->next = (file_mapping*) malloc(sizeof(file_mapping));
+ fm->next->prev=fm;
+ fm=fm->next;
+ }
+ fm->next=NULL;
+ fm->handle=answer;
+ if(name)
+ {
+ fm->name = (char*) malloc(strlen(name)+1);
+ strcpy(fm->name, name);
+ }
+ else
+ fm->name=NULL;
+ fm->mapping_size=len;
+
+ if(anon)
+ close(hFile);
+ return (HANDLE)answer;
}
return (HANDLE)0;
}
{
file_mapping* p;
int result;
- if(fm==0)
- return 0;
+ if(fm==NULL)
+ return 0;
for(p=fm; p; p=p->next)
{
- if(p->handle==handle)
- {
- result=munmap((void*)handle, p->mapping_size);
- if(p->next)p->next->prev=p->prev;
- if(p->prev)p->prev->next=p->next;
- if(p->name)
- free(p->name);
- if(p==fm)
- fm=p->prev;
- free(p);
- return result;
- }
+ if(p->handle==handle)
+ {
+ result=munmap((void*)handle, p->mapping_size);
+ if(p->next)p->next->prev=p->prev;
+ if(p->prev)p->prev->next=p->next;
+ free(p->name);
+ if(p==fm)
+ fm=p->prev;
+ free(p);
+ return result;
+ }
}
return 0;
}
fd=open("/dev/zero", O_RDWR);
if(fd<0){
perror( "Cannot open /dev/zero for READ+WRITE. Check permissions! error: " );
- return NULL;
+ return NULL;
}
if (type&MEM_RESERVE && (unsigned)address&0xffff) {
- size += (unsigned)address&0xffff;
- address = (unsigned)address&~0xffff;
+ size += (unsigned)address&0xffff;
+ address = (unsigned)address&~0xffff;
}
pgsz = sysconf(_SC_PAGESIZE);
if (type&MEM_COMMIT && (unsigned)address%pgsz) {
- size += (unsigned)address%pgsz;
- address -= (unsigned)address%pgsz;
+ size += (unsigned)address%pgsz;
+ address -= (unsigned)address%pgsz;
}
if (type&MEM_RESERVE && size<0x10000) size = 0x10000;
if (size%pgsz) size += pgsz - size%pgsz;
- if(address!=0)
+ if(address!=NULL)
{
//check whether we can allow to allocate this
virt_alloc* str=vm;
while(str)
{
- if((unsigned)address>=(unsigned)str->address+str->mapping_size)
- {
- str=str->prev;
- continue;
- }
- if((unsigned)address+size<=(unsigned)str->address)
- {
- str=str->prev;
- continue;
- }
- if(str->state==0)
- {
+ if((unsigned)address>=(unsigned)str->address+str->mapping_size)
+ {
+ str=str->prev;
+ continue;
+ }
+ if((unsigned)address+size<=(unsigned)str->address)
+ {
+ str=str->prev;
+ continue;
+ }
+ if(str->state==0)
+ {
#warning FIXME
- if( ((unsigned)address >= (unsigned)str->address)
- && ((unsigned)address+size<=(unsigned)str->address+str->mapping_size)
- && (type & MEM_COMMIT))
- {
- close(fd);
- return address; //returning previously reserved memory
- }
- //printf(" VirtualAlloc(...) does not commit or not entirely within reserved, and\n");
- }
- /*printf(" VirtualAlloc(...) (0x%08X, %u) overlaps with (0x%08X, %u, state=%d)\n",
- (unsigned)address, size, (unsigned)str->address, str->mapping_size, str->state);*/
- close(fd);
- return NULL;
- }
+ if( ((unsigned)address >= (unsigned)str->address)
+ && ((unsigned)address+size<=(unsigned)str->address+str->mapping_size)
+ && (type & MEM_COMMIT))
+ {
+ close(fd);
+ return address; //returning previously reserved memory
+ }
+ //printf(" VirtualAlloc(...) does not commit or not entirely within reserved, and\n");
+ }
+ /*printf(" VirtualAlloc(...) (0x%08X, %u) overlaps with (0x%08X, %u, state=%d)\n",
+ (unsigned)address, size, (unsigned)str->address, str->mapping_size, str->state);*/
+ close(fd);
+ return NULL;
+ }
}
answer=mmap(address, size, PROT_READ | PROT_WRITE | PROT_EXEC,
- MAP_PRIVATE, fd, 0);
+ MAP_PRIVATE, fd, 0);
// answer=FILE_dommap(-1, address, 0, size, 0, 0,
-// PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE);
+// PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE);
close(fd);
if (answer != (void *)-1 && address && answer != address) {
- /* It is dangerous to try mmap() with MAP_FIXED since it does not
- always detect conflicts or non-allocation and chaos ensues after
- a successful call but an overlapping or non-allocated region. */
- munmap(answer, size);
- answer = (void *) -1;
- errno = EINVAL;
- //printf(" VirtualAlloc(...) cannot satisfy requested address but address=NULL would work.\n");
+ /* It is dangerous to try mmap() with MAP_FIXED since it does not
+ always detect conflicts or non-allocation and chaos ensues after
+ a successful call but an overlapping or non-allocated region. */
+ munmap(answer, size);
+ answer = (void *) -1;
+ errno = EINVAL;
+ //printf(" VirtualAlloc(...) cannot satisfy requested address but address=NULL would work.\n");
}
if(answer==(void*)-1)
{
- /*printf(" VirtualAlloc(...) mmap(0x%08X, %u, ...) failed with errno=%d (\"%s\")\n",
- (unsigned)address, size, errno, strerror(errno));*/
- return NULL;
+ /*printf(" VirtualAlloc(...) mmap(0x%08X, %u, ...) failed with errno=%d (\"%s\")\n",
+ (unsigned)address, size, errno, strerror(errno));*/
+ return NULL;
}
else
{
- virt_alloc *new_vm = (virt_alloc*) malloc(sizeof(virt_alloc));
- new_vm->mapping_size=size;
- new_vm->address=(char*)answer;
+ virt_alloc *new_vm = (virt_alloc*) malloc(sizeof(virt_alloc));
+ new_vm->mapping_size=size;
+ new_vm->address=(char*)answer;
new_vm->prev=vm;
- if(type == MEM_RESERVE)
- new_vm->state=0;
- else
- new_vm->state=1;
- if(vm)
- vm->next=new_vm;
- vm=new_vm;
- vm->next=0;
- //if(va_size!=0)
- // printf("Multiple VirtualAlloc!\n");
- //printf(" VirtualAlloc(...) provides (0x%08X, %u)\n", (unsigned)answer, size);
+ if(type == MEM_RESERVE)
+ new_vm->state=0;
+ else
+ new_vm->state=1;
+ if(vm)
+ vm->next=new_vm;
+ vm=new_vm;
+ vm->next=0;
+ //if(va_size!=0)
+ // printf("Multiple VirtualAlloc!\n");
+ //printf(" VirtualAlloc(...) provides (0x%08X, %u)\n", (unsigned)answer, size);
return answer;
}
}
//printf("VirtualFree(0x%08X, %d, 0x%08X)\n", (unsigned)address, dwSize, dwFreeType);
while(str)
{
- if(address!=str->address)
- {
- str=str->prev;
- continue;
- }
- //printf(" VirtualFree(...) munmap(0x%08X, %d)\n", (unsigned)str->address, str->mapping_size);
- 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=str->prev;
- free(str);
- return 0;
+ if(address!=str->address)
+ {
+ str=str->prev;
+ continue;
+ }
+ //printf(" VirtualFree(...) munmap(0x%08X, %d)\n", (unsigned)str->address, str->mapping_size);
+ 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=str->prev;
+ free(str);
+ return 0;
}
return -1;
}
INT srclen,LPSTR dest, INT destlen, LPCSTR defch, WIN_BOOL* used_defch)
{
int i;
- if(src==0)
- return 0;
- if ((srclen==-1)&&(dest==0)) return 0;
+ if(src==NULL)
+ return 0;
+ if ((srclen==-1)&&(dest==NULL)) return 0;
if(srclen==-1){srclen=0; while(src[srclen++]);}
// for(i=0; i<srclen; i++)
-// printf("%c", src[i]);
+// printf("%c", src[i]);
// printf("\n");
- if(dest==0)
+ if(dest==NULL)
{
for(i=0; i<srclen; i++)
{
- src++;
- if(*src==0)
- return i+1;
+ 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;
- dest++;
- src++;
- if(*src==0)
- return i+1;
+ *dest=(char)*src;
+ dest++;
+ src++;
+ if(*src==0)
+ return i+1;
}
return min(srclen, destlen);
}
HANDLE WINAPI OpenFileMappingA(DWORD access, WIN_BOOL prot, LPCSTR name)
{
file_mapping* p;
- if(fm==0)
- return (HANDLE)0;
- if(name==0)
- return (HANDLE)0;
+ if(fm==NULL)
+ return (HANDLE)0;
+ if(name==NULL)
+ return (HANDLE)0;
for(p=fm; p; p=p->prev)
{
- if(p->name==0)
- continue;
- if(strcmp(p->name, name)==0)
- return (HANDLE)p->handle;
+ if(p->name==NULL)
+ continue;
+ if(strcmp(p->name, name)==0)
+ return (HANDLE)p->handle;
}
return 0;
}