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