rsys

Basic data structures and low-level features
git clone git://git.meso-star.fr/rsys.git
Log | Files | Refs | README | LICENSE

commit 746330d2e7f49b0efcd096d92676f3d1577b9d04
parent 4fd32f84799ea4ebf68ed805a23cefde076a2e1a
Author: vaplv <vaplv@free.fr>
Date:   Wed,  6 Sep 2017 09:59:07 +0200

Fix CL warnings and errors

Diffstat:
Msrc/big_buffer.c | 11++++++++++-
Msrc/mem_lifo_allocator.c | 25++++++++++++++-----------
2 files changed, 24 insertions(+), 12 deletions(-)

diff --git a/src/big_buffer.c b/src/big_buffer.c @@ -15,13 +15,22 @@ #define _POSIX_C_SOURCE 200112L /* ftruncate support */ -#include <unistd.h> #include "big_buffer.h" +#ifdef COMPILER_CL + #include <io.h> /* _chsize support */ +#else + #include <unistd.h> /* ftruncate support */ +#endif + res_T truncate__(FILE* file, const size_t sz) { ASSERT(file); +#ifdef OS_WINDOWS + return _chsize(_fileno(file), (long)sz) == 0 ? RES_OK : RES_IO_ERR; +#else return ftruncate(fileno(file), (off_t)sz) == 0 ? RES_OK : RES_IO_ERR; +#endif } diff --git a/src/mem_lifo_allocator.c b/src/mem_lifo_allocator.c @@ -19,6 +19,9 @@ #include "mem_allocator.h" #include "mem_lifo_allocator.h" #include "mutex.h" +#ifdef OS_WINDOWS + #include "io_c99.h" +#endif #include <string.h> struct lifo_data { @@ -80,10 +83,10 @@ lifo_alloc_aligned data_size = ALIGN_SIZE(size, sizeof(int64_t)); entry_size = header_size + data_size + footer_size; - ASSERT(data_size < ((1lu<<48)-1)); + ASSERT(data_size < (((int64_t)1<<48)-1)); ASSERT(header_size < (1<<16)-1); - header = (int64_t)(data_size | (header_size << 48)); - footer = (int64_t)(data_size | (1lu << 48)); + header = (int64_t)(data_size | ((int64_t)header_size<<48)); + footer = (int64_t)(data_size | ((int64_t)1<<48)); mutex_lock(lifo->mutex); { /* Critical section */ @@ -143,12 +146,12 @@ lifo_free(void* data, void* mem) ptr = mem; header = *(int64_t*)(ptr-sizeof(int64_t)); - data_size = header & ((1l<<48)-1); + data_size = header & (((int64_t)1<<48)-1); pfooter = (int64_t*)(ptr + data_size); end = ptr + data_size + sizeof(int64_t); mutex_lock(lifo->mutex); - *pfooter &= ~(1l<<48); /* No more in use */ + *pfooter &= ~((int64_t)1<<48); /* No more in use */ if(end == lifo->top) { /* Pop */ size_t header_size = (size_t)(header >> 48); char* top = ptr - header_size; @@ -158,14 +161,14 @@ lifo_free(void* data, void* mem) while(top != lifo->stack) { /* Pop all free entries */ ptr = top - sizeof(int64_t); footer = *(int64_t*)ptr; - if(footer & (1l<<48)) break; /* In use */ + if(footer & ((int64_t)1<<48)) break; /* In use */ - data_size = footer & ((1l<<48)-1); + data_size = footer & (((int64_t)1<<48)-1); ptr -= data_size; header = *(int64_t*)(ptr-sizeof(int64_t)); - ASSERT(data_size == (size_t)(header & ((1l<<48)-1))); - header_size = (size_t)(header >> 48); + ASSERT(data_size == (size_t)(header & (((int64_t)1<<48)-1))); + header_size = (size_t)(header>>48); top = ptr - header_size; lifo->remain += data_size + header_size + sizeof(int64_t)/*footer_size*/; @@ -193,7 +196,7 @@ lifo_realloc char* new_mem = lifo_alloc(data, size, filename, fileline); if(!new_mem || !mem) return new_mem; mem_header = *(int64_t*)((char*)mem - sizeof(int64_t)); - mem_size = (size_t)(mem_header & ((1l<<48)-1)); + mem_size = (size_t)(mem_header & (((int64_t)1<<48)-1)); memcpy(new_mem, mem, mem_size); lifo_free(data, mem); return new_mem; @@ -206,7 +209,7 @@ lifo_mem_size(void* data, void* mem) int64_t header; (void)data; header = *(int64_t*)((char*)mem-sizeof(int64_t)); - return (size_t)(header & ((1l<<48)-1)); + return (size_t)(header & (((int64_t)1<<48)-1)); } static size_t