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