#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; | |
} |