version 1.2, 2015/04/20 18:10:09
|
version 1.3, 2015/04/20 18:19:49
|
|
|
| |
#include <assert.h> | #include <assert.h> |
#include "batch.h" | #include "batch.h" |
#include "strings.h" |
#include <pal/strings.h> |
| |
#define BATCH_PAGE_SIZE ((size_t)(BLOCK_SIZE * 2)) | #define BATCH_PAGE_SIZE ((size_t)(BLOCK_SIZE * 2)) |
#define BLOCK_SIZE ((size_t)512) | #define BLOCK_SIZE ((size_t)512) |
|
|
/* Allocate a new page and carve new block from that page */ | /* Allocate a new page and carve new block from that page */ |
if (size8 <= BLOCK_SIZE && self->numPages < self->maxPages) | if (size8 <= BLOCK_SIZE && self->numPages < self->maxPages) |
{ | { |
Page* page = malloc(BATCH_PAGE_SIZE); |
Page* page = PAL_Malloc(BATCH_PAGE_SIZE); |
char* ptr; | char* ptr; |
| |
if (!page) | if (!page) |
|
|
* blocks list) | * blocks list) |
*/ | */ |
{ | { |
Page* page = malloc(sizeof(Page) + size8); |
Page* page = PAL_Malloc(sizeof(Page) + size8); |
| |
if (!page) | if (!page) |
return NULL; | return NULL; |
|
|
if ((char*)self>=(char*)(p + 1) && (char*)self<(char*)p + p->u.s.size) | if ((char*)self>=(char*)(p + 1) && (char*)self<(char*)p + p->u.s.size) |
selfPtr = p; | selfPtr = p; |
else | else |
free(p); |
PAL_Free(p); |
| |
p = next; | p = next; |
} | } |
| |
if (selfPtr) | if (selfPtr) |
free(selfPtr); |
PAL_Free(selfPtr); |
} | } |
| |
void Batch_InitFromBuffer( | void Batch_InitFromBuffer( |
|
|
else | else |
self->pages = p->u.s.next; | self->pages = p->u.s.next; |
| |
free(p); |
PAL_Free(p); |
return; | return; |
} | } |
#if defined (CONFIG_ENABLE_DEBUG) | #if defined (CONFIG_ENABLE_DEBUG) |
|
|
#endif | #endif |
} | } |
| |
MI_Char* Batch_Zdup( |
_Use_decl_annotations_ |
|
ZChar* Batch_Tcsdup( |
Batch* self, | Batch* self, |
const MI_Char* str) |
const ZChar* str) |
{ | { |
MI_Char* p; |
ZChar* p; |
size_t size; | size_t size; |
| |
size = (Zlen(str) + 1) * sizeof(MI_Char); |
size = (Tcslen(str) + 1) * sizeof(ZChar); |
| |
p = Batch_Get(self, size); | p = Batch_Get(self, size); |
| |
|
|
return memcpy(p, str, size); | return memcpy(p, str, size); |
} | } |
| |
|
_Use_decl_annotations_ |
char* Batch_Strdup( | char* Batch_Strdup( |
Batch* self, | Batch* self, |
const char* str) | const char* str) |
{ | { |
char* p; | char* p; |
size_t size; |
size_t size = 0; |
| |
size = (Strlen(str) + 1); |
if(!self || !str) |
|
return NULL; |
| |
p = Batch_Get(self, size); |
size = Strlen(str) + 1; |
|
|
|
p = (char*) Batch_Get(self, size); |
| |
if (!p) | if (!p) |
return NULL; | return NULL; |
|
|
return memcpy(p, str, size); | return memcpy(p, str, size); |
} | } |
| |
MI_Char* Batch_Strdup2( |
#if defined(CONFIG_ENABLE_WCHAR) |
|
char* Batch_ZStrdup( |
|
Batch* self, |
|
const ZChar* s) |
|
{ |
|
size_t size = 0; |
|
char* p; |
|
size_t i; |
|
|
|
if(!self || !s) |
|
return NULL; |
|
|
|
size = Tcslen(s) + 1; |
|
p = Batch_Get(self, size * sizeof(char)); |
|
|
|
if (!p) |
|
return NULL; |
|
|
|
for (i = 0; i < size; i++) |
|
p[i] = (char)s[i]; |
|
|
|
return p; |
|
} |
|
#endif |
|
|
|
#if defined(CONFIG_ENABLE_WCHAR) |
|
ZChar* Batch_StrTcsdup( |
Batch* self, | Batch* self, |
const char* s) | const char* s) |
{ | { |
size_t size = strlen(s) + 1; |
size_t size = 0; |
MI_Char* p; |
ZChar* p; |
size_t i; | size_t i; |
| |
p = Batch_Get(self, size * sizeof(MI_Char)); |
if(!self || !s) |
|
return NULL; |
|
|
|
size = strlen(s) + 1; |
|
p = Batch_Get(self, size * sizeof(ZChar)); |
| |
if (!p) | if (!p) |
return NULL; | return NULL; |
| |
for (i = 0; i < size; i++) | for (i = 0; i < size; i++) |
p[i] = (MI_Char)s[i]; |
p[i] = (ZChar)s[i]; |
| |
return p; | return p; |
} | } |
|
#endif |
| |
size_t Batch_GetPageCount( | size_t Batch_GetPageCount( |
Batch* self) | Batch* self) |
|
|
/* Round request size to a multiple of eight */ | /* Round request size to a multiple of eight */ |
size8 = (size + 7) & ~7; | size8 = (size + 7) & ~7; |
| |
page = malloc(size8 + sizeof(Batch)); |
page = PAL_Malloc(size8 + sizeof(Batch)); |
| |
if (!page) | if (!page) |
return MI_FALSE; | return MI_FALSE; |
|
|
Batch_Init(*self, BATCH_MAX_PAGES); | Batch_Init(*self, BATCH_MAX_PAGES); |
} | } |
else | else |
page = malloc(sizeof(Page) + buffer[pages].pageSize); |
page = PAL_Malloc(sizeof(Page) + buffer[pages].pageSize); |
| |
if (!page) | if (!page) |
{ | { |