#define _LARGEFILE64_SOURCE
#include <sys/stat.h>
-#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <malloc.h>
#include <time.h>
+#ifdef __unix__
+ #include <unistd.h>
+#endif
+
#include <stdlib.h>
#include <stdarg.h>
#include <string.h> // TODO: Replace with needed functions
#include <stdint.h>
#include <assert.h>
+#include <stdio.h>
//-------------------------------------------------------------------------------------
// Better types
#ifdef BH_DEBUG
void* bh__debug_malloc(size_t size, const char* file, u64 line);
-void* bh__debug_memalign(size_t alignment, size_t size, const char* file, u64 line);
+i32 bh__debug_posix_memalign(void** ret, size_t alignment, size_t size, const char* file, u64 line);
void bh__debug_free(void* ptr, const char* file, u64 line);
void* bh__debug_realloc(void* ptr, size_t size, const char* file, u64 line);
return p;
}
-void* bh__debug_memalign(size_t alignment, size_t size, const char* file, u64 line) {
- void* p = memalign(alignment, size);
- bh_printf("[DEBUG] %p = memalign(%d, %d) at %s:%d\n", p, alignment, size, file, line);
- return p;
+i32 bh__debug_posix_memalign(void** ret, size_t alignment, size_t size, const char* file, u64 line) {
+ i32 success = posix_memalign(ret, alignment, size);
+ bh_printf("[DEBUG] %p = posix_memalign(%d, %d) at %s:%d\n", *ret, alignment, size, file, line);
+ return success;
}
void bh__debug_free(void* ptr, const char* file, u64 line) {
#endif
-#define malloc(size) (bh__debug_malloc(size, __FILE__, __LINE__))
-#define memalign(alignment, size) (bh__debug_memalign(alignment, size, __FILE__, __LINE__))
-#define free(ptr) (bh__debug_free(ptr, __FILE__, __LINE__))
-#define realloc(ptr, size) (bh__debug_realloc(ptr, size, __FILE__, __LINE__))
+#define malloc(size) (bh__debug_malloc(size, __FILE__, __LINE__))
+#define posix_memalign(ret, alignment, size) (bh__debug_posix_memalign(ret, alignment, size, __FILE__, __LINE__))
+#define free(ptr) (bh__debug_free(ptr, __FILE__, __LINE__))
+#define realloc(ptr, size) (bh__debug_realloc(ptr, size, __FILE__, __LINE__))
#endif
switch (action) {
case bh_allocator_action_alloc: {
- retval = memalign(alignment, size);
+ i32 success = posix_memalign(&retval, alignment, size);
if (flags & bh_allocator_flag_clear && retval != NULL) {
memset(retval, 0, size);
switch (action) {
case bh_allocator_action_alloc: {
- retval = memalign(alignment, size);
+ i32 success = posix_memalign(&retval, alignment, size);
if (flags & bh_allocator_flag_clear && retval != NULL) {
memset(retval, 0, size);
scratch->backing = backing;
scratch->memory = memory;
scratch->curr = memory;
- scratch->end = memory + scratch_size;
+ scratch->end = bh_pointer_add(memory, scratch_size);
}
void bh_scratch_free(bh_scratch* scratch) {
switch (action) {
case bh_allocator_action_alloc: {
- if (size > scratch->end - scratch->memory) {
+ if (size > ((u8 *) scratch->end) - ((u8 *) scratch->memory)) {
return NULL;
}
retval = scratch->curr;
- scratch->curr += size;
+ scratch->curr = bh_pointer_add(scratch->curr, size);
if (scratch->curr >= scratch->end) {
scratch->curr = scratch->memory;
case bh_allocator_action_free: break;
case bh_allocator_action_resize: {
- if (size > scratch->end - scratch->memory) {
+ if (size > ((u8 *) scratch->end) - ((u8 *) scratch->memory)) {
return NULL;
}
retval = scratch->curr;
- scratch->curr += size;
+ scratch->curr = bh_pointer_add(scratch->curr, size);
if (scratch->curr >= scratch->end) {
scratch->curr = scratch->memory;
#ifndef CORE_INSTALLATION
#ifdef __unix__
#define CORE_INSTALLATION "/usr/share/onyx"
+ #elif _WIN32
+ #define CORE_INSTALLATION "C:\\Program Files\\Onyx"
#endif
#endif
bh_snprintf(fn, 128, "%s", filename);
}
+#ifdef __unix__
+ #define DIR_SEPARATOR '/'
+#elif _WIN32
+ #define DIR_SEPARATOR '\\'
+#endif
+
bh_arr_each(const char *, folder, cs->options->included_folders) {
- if ((*folder)[strlen(*folder) - 1] != '/')
- bh_snprintf(path, 256, "%s/%s", *folder, fn);
+ if ((*folder)[strlen(*folder) - 1] != DIR_SEPARATOR)
+ bh_snprintf(path, 256, "%s%c%s", *folder, DIR_SEPARATOR, fn);
else
bh_snprintf(path, 256, "%s%s", *folder, fn);
}
return fn;
+
+#undef DIR_SEPARATOR
}
static ParseResults parse_source_file(CompilerState* compiler_state, bh_file_contents* file_contents) {