Remove assumption that machine word size implies Smi size. (#74)
This assumption will soon become false with compressed pointers.
diff --git a/lib/src/utf8.dart b/lib/src/utf8.dart
index 3360922..02a5eaa 100644
--- a/lib/src/utf8.dart
+++ b/lib/src/utf8.dart
@@ -8,10 +8,6 @@
import 'package:ffi/ffi.dart';
-const int _kMaxSmi64 = (1 << 62) - 1;
-const int _kMaxSmi32 = (1 << 30) - 1;
-final int _maxSize = sizeOf<IntPtr>() == 8 ? _kMaxSmi64 : _kMaxSmi32;
-
/// [Utf8] implements conversion between Dart strings and zero-terminated
/// UTF-8 encoded "char*" strings in C.
///
@@ -25,8 +21,11 @@
/// bytes before the first zero byte.
static int strlen(Pointer<Utf8> string) {
final Pointer<Uint8> array = string.cast<Uint8>();
- final Uint8List nativeString = array.asTypedList(_maxSize);
- return nativeString.indexOf(0);
+ int length = 0;
+ while (array[length] != 0) {
+ length++;
+ }
+ return length;
}
/// Creates a [String] containing the characters UTF-8 encoded in [string].