diff options
author | Rr42 | 2018-06-06 11:48:05 +0530 |
---|---|---|
committer | Rr42 | 2018-06-06 11:48:05 +0530 |
commit | 27b5bf49732e586021d6f0edf4d95a8554e599ef (patch) | |
tree | e29bb4789aaf2915e98dbe5635bda0e817fbc6f1 /ldmicro/lib | |
parent | 7dbf07b87362bb883ce7d950371a6e5c1f355dd7 (diff) | |
download | LDMicroGtk-27b5bf49732e586021d6f0edf4d95a8554e599ef.tar.gz LDMicroGtk-27b5bf49732e586021d6f0edf4d95a8554e599ef.tar.bz2 LDMicroGtk-27b5bf49732e586021d6f0edf4d95a8554e599ef.zip |
Updated LDMicro core (Tested, functional)
Diffstat (limited to 'ldmicro/lib')
-rw-r--r-- | ldmicro/lib/linuxUI/linuxLD.cpp | 32 | ||||
-rw-r--r-- | ldmicro/lib/linuxUI/linuxLD.h | 1 |
2 files changed, 26 insertions, 7 deletions
diff --git a/ldmicro/lib/linuxUI/linuxLD.cpp b/ldmicro/lib/linuxUI/linuxLD.cpp index 487905c..0b9ed9a 100644 --- a/ldmicro/lib/linuxUI/linuxLD.cpp +++ b/ldmicro/lib/linuxUI/linuxLD.cpp @@ -15,7 +15,7 @@ HANDLE HeapCreate(DWORD flOptions, SIZE_T dwInitialSize, SIZE_T dwMaximumSize) hHeapRecord.dwSize = dwInitialSize; hHeapRecord.hHeap = hHeap; hHeapRecord.dwAllocatedSizeOffset = 0; - hHeapRecord.HeapID = hHeapRecords.size()+1; + hHeapRecord.HeapID = HeapRecords.size()+1; HeapRecords.push_back(hHeapRecord); return hHeap; @@ -23,6 +23,13 @@ HANDLE HeapCreate(DWORD flOptions, SIZE_T dwInitialSize, SIZE_T dwMaximumSize) LPVOID HeapAlloc(HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes) { + if (hHeap == NULL) + { + printf("Alloc**********NULL HEAP***************\n"); + LPVOID p = malloc(dwBytes); + return p; + } + auto it = std::find_if(HeapRecords.begin(), HeapRecords.end(), [&hHeap](HEAPRECORD &Record) { return Record.hHeap == hHeap; }); if (it == HeapRecords.end()) @@ -40,9 +47,13 @@ LPVOID HeapAlloc(HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes) /// HEAP_ZERO_MEMORY is set by default DWORD flags = MAP_ANONYMOUS; - if ( (dwFlags & HEAP_ZERO_MEMORY) == HEAP_ZERO_MEMORY) - flags = MAP_ANONYMOUS | MAP_UNINITIALIZED; - //void * memset ( void * ptr, int value, size_t num ); + + // if ( !((dwFlags & HEAP_ZERO_MEMORY) == HEAP_ZERO_MEMORY) ) + // flags = MAP_ANONYMOUS | MAP_UNINITIALIZED; + + /* Use for setting a meamory chunck with some value + * void * memset ( void * ptr, int value, size_t num ); + */ LPVOID p = mmap(hHeap + (*it).dwAllocatedSizeOffset, dwBytes, PROT_EXEC, flags, -1, 0); if (p == NULL) @@ -59,15 +70,22 @@ LPVOID HeapAlloc(HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes) BOOL HeapFree(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem) { + /// if NULL free() + if (hHeap == NULL) + { + printf("free*********NULL HEAP***************\n"); + free(lpMem); + return TRUE; + } auto heap_it = std::find_if(HeapRecords.begin(), HeapRecords.end(), [&hHeap](HEAPRECORD &Record) { return Record.hHeap == hHeap; }); - + if (heap_it == HeapRecords.end()) - return NULL; + return FALSE; auto chunck_it = std::find_if((*heap_it).Element.begin(), (*heap_it).Element.end(), [&lpMem](HEAPCHUNCK &Chunck) { return Chunck.Chunck == lpMem; }); if (chunck_it == (*heap_it).Element.end()) - return NULL; + return FALSE; int result = munmap((*chunck_it).Chunck, (*chunck_it).dwSize); diff --git a/ldmicro/lib/linuxUI/linuxLD.h b/ldmicro/lib/linuxUI/linuxLD.h index 525f6a8..4955361 100644 --- a/ldmicro/lib/linuxUI/linuxLD.h +++ b/ldmicro/lib/linuxUI/linuxLD.h @@ -4,6 +4,7 @@ #include "linuxUI.h" #include <vector> #include <algorithm> +#include <sys/mman.h> /// common windows referances for linux |