Advertisement
zephyrtronium

fun

Feb 26th, 2012
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.26 KB | None | 0 0
  1. static int32_t *get_token(int32_t **buf, int *toklen) {
  2.     int i = 0, datalen = 16;
  3.     int32_t *b = *buf;
  4.     int32_t *data;
  5.     if ((data = (int32_t *) malloc(datalen * sizeof(int32_t))) == NULL)
  6.         return NULL;
  7.     for (;;) {
  8.         int32_t uc = *b++;
  9.         utf8proc_propval_t cat = utf8proc_get_property(uc).category;
  10.         if (!uc) {
  11.             *toklen = i;
  12.             *buf = b;
  13.             return data = realloc(data, i);
  14.         }
  15.         if (cat != UTF8PROC_CATEGORY_ZS) {
  16.             data[i++] = uc;
  17.             if (i >= datalen) {
  18.                 int32_t *t;
  19.                 if ((t = (int32_t *) realloc(data, datalen <<= 1)) == NULL) {
  20.                     free(data);
  21.                     return NULL;
  22.                 }
  23.                 data = t;
  24.             }
  25.         } else { // end of token; find start of next
  26.             *toklen = i;
  27.             data = realloc(data, i);
  28.             for (;;) {
  29.                 uc = *b;
  30.                 if (!uc)
  31.                     return data;
  32.                 if (utf8proc_get_property(uc).category != UTF8PROC_CATEGORY_ZS) {
  33.                     *buf = b;
  34.                     return data;
  35.                 }
  36.                 b++;
  37.             }
  38.         }
  39.     }
  40.     return NULL; // unreachable
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement