shithub: ham

ref: 9c0a6bb7ee2543794594f3a678f58aa4c702c011
dir: ham/sam/util.c

View raw version
#include "sam.h"

void
cvttorunes(char *p, int n, Rune *r, int *nb, int *nr, int *nulls)
{
	uchar *q;
	Rune *s;
	int j, w;

	/*
	 * Always guaranteed that n bytes may be interpreted
	 * without worrying about partial runes.  This may mean
	 * reading up to UTFmax-1 more bytes than n; the caller
	 * knows this.  If n is a firm limit, the caller should
	 * set p[n] = 0.
	 */
	q = (uchar*)p;
	s = r;
	for(j=0; j<n; j+=w){
		if(*q < Runeself){
			w = 1;
			*s = *q++;
		}else{
			w = chartorune(s, (char*)q);
			q += w;
		}
		if(*s)
			s++;
		else if(nulls)
			*nulls = TRUE;
	}
	*nb = (char*)q-p;
	*nr = s-r;
}

void*
fbufalloc(void)
{
	return emalloc(BUFSIZE);
}

void
fbuffree(void *f)
{
	free(f);
}

uint
min(uint a, uint b)
{
	if(a < b)
		return a;
	return b;
}