Exemple #1
0
void kiwi_str_redup(char **ptr, const char *from, const char *s)
{
	int sl = strlen(s)+1;
	if (sl == 0 || sl > 1024) panic("strdup size");
	if (*ptr) kiwi_free(from, (void*) *ptr);
	*ptr = strdup(s);
#ifdef MALLOC_DEBUG
	mt_enter(from, (void*) *ptr, sl);
#endif
}
Exemple #2
0
// encoded snprintf()
int esnprintf(char *str, size_t slen, const char *fmt, ...)
{
	va_list ap;
	va_start(ap, fmt);
	int rv = vsnprintf(str, slen, fmt, ap);
	va_end(ap);

	size_t slen2 = strlen(str) * ENCODE_EXPANSION_FACTOR;	// c -> %xx
	char *str2 = (char *) kiwi_malloc("eprintf", slen2);
	mg_url_encode(str, str2, slen2-1);
	slen2 = strlen(str2);
	check(slen2 <= slen);
	strcpy(str, str2);
	kiwi_free("eprintf", str2);
	return slen2;
}
Exemple #3
0
static void switch_dx_list(dx_t *_dx_list, int _dx_list_len)
{
	qsort(_dx_list, _dx_list_len, sizeof(dx_t), qsort_floatcomp);
	
	// switch to new list
	dx_t *prev_dx_list = dx.list;
	int prev_dx_list_len = dx.len;
	dx.list = _dx_list;
	dx.len = _dx_list_len;
	dx.hidden_used = false;
	
	// release previous
	if (prev_dx_list) {
		int i;
		dx_t *dxp;
		for (i=0, dxp = prev_dx_list; i < prev_dx_list_len; i++, dxp++) {
			// previous allocators better have used malloc(), strdup() et al for these and not kiwi_malloc()
			if (dxp->ident) free((void *) dxp->ident);
			if (dxp->notes) free((void *) dxp->notes);
		}
	}
	
	kiwi_free("dx_list", prev_dx_list);
}