summaryrefslogtreecommitdiff
path: root/ldmicro/lib
diff options
context:
space:
mode:
authorRr422018-06-06 11:48:05 +0530
committerRr422018-06-06 11:48:05 +0530
commit27b5bf49732e586021d6f0edf4d95a8554e599ef (patch)
treee29bb4789aaf2915e98dbe5635bda0e817fbc6f1 /ldmicro/lib
parent7dbf07b87362bb883ce7d950371a6e5c1f355dd7 (diff)
downloadLDMicroGtk-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.cpp32
-rw-r--r--ldmicro/lib/linuxUI/linuxLD.h1
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