示例#1
0
文件: MSGC.c 项目: myoan/minikonoha
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;
}
示例#2
0
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;
}
示例#3
0
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;
}