| OLD | NEW | 
|---|
| 1 // Copyright (c) 2015, the Dartino project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dartino project authors. Please see the AUTHORS file | 
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a | 
| 3 // BSD-style license that can be found in the LICENSE.md file. | 3 // BSD-style license that can be found in the LICENSE.md file. | 
| 4 | 4 | 
| 5 /// Higher level access to the FFI library. | 5 /// Higher level access to the FFI library. | 
| 6 /// | 6 /// | 
| 7 /// This package is a set of functions and classes that builds on the lower | 7 /// This package is a set of functions and classes that builds on the lower | 
| 8 /// level FFI library (dart:fletch.ffi). | 8 /// level FFI library (dart:dartino.ffi). | 
| 9 library ffi; | 9 library ffi; | 
| 10 | 10 | 
| 11 import 'dart:fletch.ffi'; | 11 import 'dart:dartino.ffi'; | 
| 12 import 'dart:typed_data'; | 12 import 'dart:typed_data'; | 
| 13 | 13 | 
| 14 part 'utf.dart'; | 14 part 'utf.dart'; | 
| 15 | 15 | 
| 16 final ForeignFunction _strlen = ForeignLibrary.main.lookup('strlen'); | 16 final ForeignFunction _strlen = ForeignLibrary.main.lookup('strlen'); | 
| 17 | 17 | 
| 18 /// Converts a C string to a String in the Fletch heap. | 18 /// Converts a C string to a String in the Dartino heap. | 
| 19 /// This call expects a null terminated string. The string will be decoded | 19 /// This call expects a null terminated string. The string will be decoded | 
| 20 /// using a UTF8 decoder. | 20 /// using a UTF8 decoder. | 
| 21 String cStringToString(ForeignPointer ptr) { | 21 String cStringToString(ForeignPointer ptr) { | 
| 22   int length = _strlen.icall$1(ptr); | 22   int length = _strlen.icall$1(ptr); | 
| 23   return memoryToString(ptr, length); | 23   return memoryToString(ptr, length); | 
| 24 } | 24 } | 
| 25 | 25 | 
| 26 /// Converts a C memory region to a String in the Fletch heap. The string | 26 /// Converts a C memory region to a String in the Dartino heap. The string | 
| 27 /// will be decoded using a UTF8 decoder. | 27 /// will be decoded using a UTF8 decoder. | 
| 28 String memoryToString(ForeignPointer ptr, int length) { | 28 String memoryToString(ForeignPointer ptr, int length) { | 
| 29   var memory = new ForeignMemory.fromAddress(ptr.address, length); | 29   var memory = new ForeignMemory.fromAddress(ptr.address, length); | 
| 30   var encodedString = new List(length); | 30   var encodedString = new List(length); | 
| 31   for (int i = 0; i < length; ++i) { | 31   for (int i = 0; i < length; ++i) { | 
| 32     encodedString[i] = memory.getUint8(i); | 32     encodedString[i] = memory.getUint8(i); | 
| 33   } | 33   } | 
| 34   return _decodeUtf8(encodedString); | 34   return _decodeUtf8(encodedString); | 
| 35 } | 35 } | 
| 36 | 36 | 
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 126     int head = _head; | 126     int head = _head; | 
| 127     // TODO(ricow): Consider if we should do a memcpy here (two if wrapping) | 127     // TODO(ricow): Consider if we should do a memcpy here (two if wrapping) | 
| 128     for (int i = 0; i < bytes; i++) { | 128     for (int i = 0; i < bytes; i++) { | 
| 129       _buffer.setUint8(DATA_START + head, bytelist[i]); | 129       _buffer.setUint8(DATA_START + head, bytelist[i]); | 
| 130       head = (head + 1) % _size; | 130       head = (head + 1) % _size; | 
| 131     } | 131     } | 
| 132     _head = head; | 132     _head = head; | 
| 133     return bytes; | 133     return bytes; | 
| 134   } | 134   } | 
| 135 } | 135 } | 
| OLD | NEW | 
|---|