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