1*7dd7cddfSDavid du Colombier #include "sam.h"
2*7dd7cddfSDavid du Colombier
3*7dd7cddfSDavid du Colombier void
cvttorunes(char * p,int n,Rune * r,int * nb,int * nr,int * nulls)4*7dd7cddfSDavid du Colombier cvttorunes(char *p, int n, Rune *r, int *nb, int *nr, int *nulls)
5*7dd7cddfSDavid du Colombier {
6*7dd7cddfSDavid du Colombier uchar *q;
7*7dd7cddfSDavid du Colombier Rune *s;
8*7dd7cddfSDavid du Colombier int j, w;
9*7dd7cddfSDavid du Colombier
10*7dd7cddfSDavid du Colombier /*
11*7dd7cddfSDavid du Colombier * Always guaranteed that n bytes may be interpreted
12*7dd7cddfSDavid du Colombier * without worrying about partial runes. This may mean
13*7dd7cddfSDavid du Colombier * reading up to UTFmax-1 more bytes than n; the caller
14*7dd7cddfSDavid du Colombier * knows this. If n is a firm limit, the caller should
15*7dd7cddfSDavid du Colombier * set p[n] = 0.
16*7dd7cddfSDavid du Colombier */
17*7dd7cddfSDavid du Colombier q = (uchar*)p;
18*7dd7cddfSDavid du Colombier s = r;
19*7dd7cddfSDavid du Colombier for(j=0; j<n; j+=w){
20*7dd7cddfSDavid du Colombier if(*q < Runeself){
21*7dd7cddfSDavid du Colombier w = 1;
22*7dd7cddfSDavid du Colombier *s = *q++;
23*7dd7cddfSDavid du Colombier }else{
24*7dd7cddfSDavid du Colombier w = chartorune(s, (char*)q);
25*7dd7cddfSDavid du Colombier q += w;
26*7dd7cddfSDavid du Colombier }
27*7dd7cddfSDavid du Colombier if(*s)
28*7dd7cddfSDavid du Colombier s++;
29*7dd7cddfSDavid du Colombier else if(nulls)
30*7dd7cddfSDavid du Colombier *nulls = TRUE;
31*7dd7cddfSDavid du Colombier }
32*7dd7cddfSDavid du Colombier *nb = (char*)q-p;
33*7dd7cddfSDavid du Colombier *nr = s-r;
34*7dd7cddfSDavid du Colombier }
35*7dd7cddfSDavid du Colombier
36*7dd7cddfSDavid du Colombier void*
fbufalloc(void)37*7dd7cddfSDavid du Colombier fbufalloc(void)
38*7dd7cddfSDavid du Colombier {
39*7dd7cddfSDavid du Colombier return emalloc(BUFSIZE);
40*7dd7cddfSDavid du Colombier }
41*7dd7cddfSDavid du Colombier
42*7dd7cddfSDavid du Colombier void
fbuffree(void * f)43*7dd7cddfSDavid du Colombier fbuffree(void *f)
44*7dd7cddfSDavid du Colombier {
45*7dd7cddfSDavid du Colombier free(f);
46*7dd7cddfSDavid du Colombier }
47*7dd7cddfSDavid du Colombier
48*7dd7cddfSDavid du Colombier uint
min(uint a,uint b)49*7dd7cddfSDavid du Colombier min(uint a, uint b)
50*7dd7cddfSDavid du Colombier {
51*7dd7cddfSDavid du Colombier if(a < b)
52*7dd7cddfSDavid du Colombier return a;
53*7dd7cddfSDavid du Colombier return b;
54*7dd7cddfSDavid du Colombier }
55