1.1 --- a/templates/native/unicode.c Sat Feb 11 15:34:30 2017 +0100
1.2 +++ b/templates/native/unicode.c Sat Feb 11 16:04:40 2017 +0100
1.3 @@ -76,7 +76,7 @@
1.4 char *s = _data->strvalue;
1.5 unsigned int i, c = 0;
1.6
1.7 - for (i = 0; i < _data->size; i++)
1.8 + for (i = 0; s[i] != 0; i++)
1.9 if (boundary(s[i]))
1.10 c++;
1.11
1.12 @@ -91,7 +91,7 @@
1.13 char *s = _data->strvalue;
1.14 unsigned int i, c = 0, v;
1.15
1.16 - for (i = 0; i < _data->size; i++)
1.17 + for (i = 0; s[i] != 0; i++)
1.18 {
1.19 /* Evaluate the current character as a boundary. */
1.20
1.21 @@ -137,14 +137,14 @@
1.22 unsigned int indexes[nchar];
1.23
1.24 unsigned int c, d, i, to, from, lastbyte = 0;
1.25 - size_t resultsize = 0;
1.26 + size_t resultsize = 0, ss = strlen(_data->strvalue);
1.27
1.28 /* Find the indexes of the characters. */
1.29 if (istep > 0)
1.30 {
1.31 /* Get the first byte position. */
1.32 for (c = 0; c < istart; c++)
1.33 - lastbyte = nextpos(s, _data->size, lastbyte);
1.34 + lastbyte = nextpos(s, ss, lastbyte);
1.35
1.36 /* Get each subsequent byte position. */
1.37 for (c = istart, i = 0; i < nchar; c += istep, i++)
1.38 @@ -152,17 +152,17 @@
1.39 indexes[i] = lastbyte;
1.40
1.41 /* Add the character size to the result size. */
1.42 - resultsize += nextpos(s, _data->size, lastbyte) - lastbyte;
1.43 + resultsize += nextpos(s, ss, lastbyte) - lastbyte;
1.44
1.45 for (d = c; d < c + istep; d++)
1.46 - lastbyte = nextpos(s, _data->size, lastbyte);
1.47 + lastbyte = nextpos(s, ss, lastbyte);
1.48 }
1.49 }
1.50 else
1.51 {
1.52 /* Get the first byte position. */
1.53 for (c = 0; c < istart; c++)
1.54 - lastbyte = nextpos(s, _data->size, lastbyte);
1.55 + lastbyte = nextpos(s, ss, lastbyte);
1.56
1.57 /* Get each subsequent byte position. */
1.58 for (c = istart, i = 0; i < nchar; c += istep, i++)
1.59 @@ -170,7 +170,7 @@
1.60 indexes[i] = lastbyte;
1.61
1.62 /* Add the character size to the result size. */
1.63 - resultsize += nextpos(s, _data->size, lastbyte) - lastbyte;
1.64 + resultsize += nextpos(s, ss, lastbyte) - lastbyte;
1.65
1.66 for (d = c; d > c + istep; d--)
1.67 lastbyte = prevpos(s, lastbyte);
1.68 @@ -190,7 +190,7 @@
1.69 } while (!boundary(s[from]));
1.70 }
1.71
1.72 - return __new_str(sub, resultsize);
1.73 + return __new_str(sub);
1.74 }
1.75
1.76 /* Module initialisation. */