static void *Kmalloc(KonohaContext *kctx, size_t s, KTraceInfo *trace) { size_t *p = (size_t *)do_malloc(s #ifdef MEMORY_DEBUG + sizeof(size_t) #endif ); if(unlikely(p == NULL)) { KTraceApi(trace, SystemFault|UserFault, "malloc", LogUint("size", s), LogUint("UsedMemorySize", klib_malloced)); THROW_OutOfMemory(kctx, s); } #if GCDEBUG OLDTRACE_SWITCH_TO_KTrace(LOGPOL_DEBUG, LogText("@", "malloc"), KeyValue_p("from", p), KeyValue_p("to", ((char *)p)+s), LogUint("size", s)); #endif klib_malloced += s; #ifdef MEMORY_DEBUG p[0] = s; p += 1; #endif return (void *)p; }
static uintptr_t I18N_iconv_open(KonohaContext *kctx, const char *targetCharset, const char *sourceCharset, KTraceInfo *trace) { uintptr_t ic = (uintptr_t)iconv_open(targetCharset, sourceCharset); if(ic == ICONV_NULL) { KTraceApi(trace, UserFault|SoftwareFault, "iconv_open", LogText("tocode", targetCharset), LogText("fromcode", sourceCharset), LogErrno ); } return (uintptr_t)ic; }
static size_t I18N_iconv(KonohaContext *kctx, uintptr_t ic, ICONV_INBUF_CONST char **inbuf, size_t *inBytesLeft, char **outbuf, size_t *outBytesLeft, int *isTooBigSourceRef, KTraceInfo *trace) { DBG_ASSERT(ic != ICONV_NULL); size_t iconv_ret = iconv((iconv_t)ic, inbuf, inBytesLeft, outbuf, outBytesLeft); if(iconv_ret == ((size_t)-1)) { if(errno == E2BIG) { // input is too big. isTooBigSourceRef[0] = true; return iconv_ret; } KTraceApi(trace, UserFault, "iconv", LogErrno); } isTooBigSourceRef[0] = false; return iconv_ret; }