void *knh_dlsym(CTX ctx, int pe, void* handler, const char* symbol) { #if defined(K_USING_WINDOWS) void *p = GetProcAddress((HMODULE)handler, (LPCSTR)symbol); if(p == NULL) { KNH_SYSLOG(ctx, NULL, pe, "GetProcAddress", "func='%s', ERR='NotFound'", symbol); } return p; #elif defined(K_USING_POSIX_) void *p = dlsym(handler, symbol); //DBG_P("handler=%p,%p, symbol='%s' ERR='%s'", handler, p, symbol, dlerror()); if(p == NULL) { KNH_SYSLOG(ctx, NULL, pe, "dlsym", "symbol='%s', ERR='%s'", symbol, dlerror()); } return p; #else #endif return NULL; }
knh_fieldn_t knh_addname(Ctx *ctx, knh_String_t *s, knh_Fdictset f) { knh_SystemEX_t *b = DP(ctx->sys); size_t n = knh_DictSet_size(b->nameDictCaseSet); if(n == b->hnameinfo[-1].capacity) { b->hnameinfo = knh_hrealloc(ctx, b->hnameinfo, n * 2); } DBG_ASSERT(n < b->hnameinfo[-1].capacity); KNH_INITv(b->nameinfo[n].name, s); if(unlikely(!(n+1 < K_FLAG_MN_SETTER))) { /* Integer overflowed */ KNH_SYSLOG(ctx, LOG_CRIT, "TooManyNames", "last nameid(fn)=%d < %d", (int)(n+1), (int)K_FLAG_MN_SETTER); } f(ctx, b->nameDictCaseSet, s, n + 1); return (knh_fieldn_t)(n); }
static void knh_Bytes_checkstack(Ctx *ctx, knh_uchar_t*oldstart, knh_uchar_t *oldend, knh_uchar_t* newstart) { knh_uchar_t **cstack_top = (knh_uchar_t**)(&ctx); knh_uchar_t **p = (knh_uchar_t**)ctx->cstack_bottom; DBG_P("cstack_bottom=%p, cstack_top=%p basedata=%p", p[0], cstack_top, &oldstart); if(!(p < cstack_top)) { knh_uchar_t **tmp = cstack_top; cstack_top = p; p = tmp; } while(p <= cstack_top) { if((oldstart <= p[0] && p[0] < oldend)) { knh_uchar_t *newc = p[0] + (newstart - oldstart); KNH_SYSLOG(ctx, LOG_DEBUG, "RewrittenCharPointer", "*oldptr=%p, newptr=%p", p[0], newc); p[0] = newc; } p++; } }
static void knh_Bytes_expands(Ctx *ctx, knh_Bytes_t *ba, size_t newsize) { if(ba->capacity == 0) { newsize = knh_good_size(newsize); ba->bu.ubuf = (knh_uchar_t*)KNH_MALLOC(ctx, newsize); ba->capacity = newsize; } else { knh_uchar_t *buf = ba->bu.ubuf; size_t capacity = ba->capacity; knh_uchar_t *newa = (knh_uchar_t*)KNH_MALLOC(ctx, newsize); knh_memcpy(newa, buf, capacity); knh_bzero(&newa[capacity], newsize - capacity); ba->bu.ubuf = newa; ba->capacity = newsize; KNH_FREE(ctx, buf, capacity); if(unlikely(ctx->bufa == ba)) { KNH_SYSLOG(ctx, LOG_INFO, "ExtendedContextBuffer", "*newsize=%ld, pointer=(%p => %p)", newsize, buf, newa); knh_Bytes_checkstack(ctx, buf, buf + ba->bu.len, newa); } } }
static void SYSLOG_FreeLargeMemory(Ctx *ctx, void *ptr, size_t size) { KNH_SYSLOG(ctx, LOG_DEBUG, "FREE_LargeMemory", "*ptr=%p, size=%ldkb", ptr, (size/1024)); }
static void SYSLOG_OutOfMemory(Ctx *ctx, size_t size) { KNH_SYSLOG(ctx, LOG_CRIT, "OutOfMemory", "*requested=%dbytes, used=%dbytes", size, ctx->stat->usedMemorySize); }
void SYSLOG_ParamTypeError(Ctx *ctx, knh_sfp_t *sfp, size_t n, knh_methodn_t mn, knh_class_t reqt, knh_class_t cid) { KNH_SYSLOG(ctx, LOG_CRIT, "Type!!", "%d of %M NOT %T", n, mn, cid); }
void SYSLOG_NoSuchMethod(Ctx *ctx, knh_sfp_t *sfp, knh_class_t cid, knh_methodn_t mn) { KNH_SYSLOG(ctx, LOG_CRIT, "NoSuchMethod!!", "%C.%M", cid, mn); }
void SYSLOG_OutOfIndex(Ctx *ctx, knh_sfp_t *sfp, knh_int_t n, size_t max) { KNH_SYSLOG(ctx, LOG_CRIT, "OutOfIndex!!", "%i not < %i", n, (knh_int_t)max); }
void SYSLOG_Arithmetic(Ctx *ctx, knh_sfp_t *sfp, const char *msg) { KNH_SYSLOG(ctx, LOG_CRIT, "Arithmetic!!", "%s", msg); }
void SYSLOG_Halt(Ctx *ctx, knh_sfp_t *sfp, const char *msg) { KNH_SYSLOG(ctx, LOG_CRIT, "InternalError!!", "%s", msg); }