Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1131)

Unified Diff: runtime/bin/file_impl.dart

Issue 10411053: Finish file 'fuzzer' and fix issues. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix typo Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/bin/file.cc ('k') | tests/standalone/io/file_fuzz_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/bin/file_impl.dart
diff --git a/runtime/bin/file_impl.dart b/runtime/bin/file_impl.dart
index 4e0f2a3e63fd2e520f0aa5930a6ba35978951a6a..4df9e7a4748e5c254fbb04ce8e35e6984af59426 100644
--- a/runtime/bin/file_impl.dart
+++ b/runtime/bin/file_impl.dart
@@ -422,19 +422,15 @@ class _File extends _FileBase implements File {
Future<bool> exists() {
_ensureFileService();
- Completer<bool> completer = new Completer<bool>();
List request = new List(2);
request[0] = _FileUtils.kExistsRequest;
request[1] = _name;
- _fileService.call(request).then((response) {
+ return _fileService.call(request).transform((response) {
if (_isErrorResponse(response)) {
- var e = _exceptionFromResponse(response, "Cannot open file '$_name'");
- completer.completeException(e);
- } else {
- completer.complete(response);
+ throw _exceptionFromResponse(response, "Cannot open file '$_name'");
}
+ return response;
});
- return completer.future;
}
bool existsSync() {
@@ -443,19 +439,15 @@ class _File extends _FileBase implements File {
Future<File> create() {
_ensureFileService();
- Completer<File> completer = new Completer<File>();
List request = new List(2);
request[0] = _FileUtils.kCreateRequest;
request[1] = _name;
- _fileService.call(request).then((response) {
+ return _fileService.call(request).transform((response) {
if (_isErrorResponse(response)) {
- var e = _exceptionFromResponse(response, "Cannot create file '$_name'");
- completer.completeException(e);
- } else {
- completer.complete(this);
+ throw _exceptionFromResponse(response, "Cannot create file '$_name'");
}
+ return this;
});
- return completer.future;
}
void createSync() {
@@ -467,19 +459,15 @@ class _File extends _FileBase implements File {
Future<File> delete() {
_ensureFileService();
- Completer<File> completer = new Completer<File>();
List request = new List(2);
request[0] = _FileUtils.kDeleteRequest;
request[1] = _name;
- _fileService.call(request).then((response) {
+ return _fileService.call(request).transform((response) {
if (_isErrorResponse(response)) {
- var e = _exceptionFromResponse(response, "Cannot delete file '$_name'");
- completer.completeException(e);
- } else {
- completer.complete(this);
+ throw _exceptionFromResponse(response, "Cannot delete file '$_name'");
}
+ return this;
});
- return completer.future;
}
void deleteSync() {
@@ -488,21 +476,17 @@ class _File extends _FileBase implements File {
Future<Directory> directory() {
_ensureFileService();
- Completer<Directory> completer = new Completer<Directory>();
List request = new List(2);
request[0] = _FileUtils.kDirectoryRequest;
request[1] = _name;
- _fileService.call(request).then((response) {
+ return _fileService.call(request).transform((response) {
if (_isErrorResponse(response)) {
- var e = _exceptionFromResponse(response,
- "Cannot retrieve directory for "
- "file '$_name'");
- completer.completeException(e);
- } else {
- completer.complete(new Directory(response));
+ throw _exceptionFromResponse(response,
+ "Cannot retrieve directory for "
+ "file '$_name'");
}
+ return new Directory(response);
});
- return completer.future;
}
Directory directorySync() {
@@ -525,34 +509,27 @@ class _File extends _FileBase implements File {
request[0] = _FileUtils.kOpenRequest;
request[1] = _name;
request[2] = mode._mode; // Direct int value for serialization.
- _fileService.call(request).then((response) {
+ return _fileService.call(request).transform((response) {
if (_isErrorResponse(response)) {
- var e = _exceptionFromResponse(response, "Cannot open file '$_name'");
- completer.completeException(e);
- } else {
- completer.complete(new _RandomAccessFile(response, _name));
+ throw _exceptionFromResponse(response, "Cannot open file '$_name'");
}
+ return new _RandomAccessFile(response, _name);
});
- return completer.future;
}
Future<int> length() {
_ensureFileService();
- Completer<int> completer = new Completer<int>();
List request = new List(2);
request[0] = _FileUtils.kLengthFromNameRequest;
request[1] = _name;
- _fileService.call(request).then((response) {
+ return _fileService.call(request).transform((response) {
if (_isErrorResponse(response)) {
- var e = _exceptionFromResponse(response,
- "Cannot retrieve length of "
- "file '$_name'");
- completer.completeException(e);
- } else {
- completer.complete(response);
+ throw _exceptionFromResponse(response,
+ "Cannot retrieve length of "
+ "file '$_name'");
}
+ return response;
});
- return completer.future;
}
int lengthSync() {
@@ -586,21 +563,17 @@ class _File extends _FileBase implements File {
Future<String> fullPath() {
_ensureFileService();
- Completer<String> completer = new Completer<String>();
List request = new List(2);
request[0] = _FileUtils.kFullPathRequest;
request[1] = _name;
- _fileService.call(request).then((response) {
+ return _fileService.call(request).transform((response) {
if (_isErrorResponse(response)) {
- var e = _exceptionFromResponse(response,
- "Cannot retrieve full path"
- " for '$_name'");
- completer.completeException(e);
- } else {
- completer.complete(response);
+ throw _exceptionFromResponse(response,
+ "Cannot retrieve full path"
+ " for '$_name'");
}
+ return response;
});
- return completer.future;
}
String fullPathSync() {
@@ -724,16 +697,14 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
// Set the id_ to 0 (NULL) to ensure the no more async requests
// can be issues for this file.
_id = 0;
- _fileService.call(request).then((result) {
+ return _fileService.call(request).transform((result) {
if (result != -1) {
_id = result;
- completer.complete(this);
+ return this;
} else {
- completer.completeException(
- new FileIOException("Cannot close file '$_name'"));
+ throw new FileIOException("Cannot close file '$_name'");
}
});
- return completer.future;
}
void closeSync() {
@@ -751,16 +722,13 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
List request = new List(2);
request[0] = _FileUtils.kReadByteRequest;
request[1] = _id;
- _fileService.call(request).then((response) {
+ return _fileService.call(request).transform((response) {
if (_isErrorResponse(response)) {
- var e = _exceptionFromResponse(response,
- "readByte failed for file '$_name'");
- completer.completeException(e);
- } else {
- completer.complete(response);
+ throw _exceptionFromResponse(response,
+ "readByte failed for file '$_name'");
}
+ return response;
});
- return completer.future;
}
int readByteSync() {
@@ -790,19 +758,16 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
request[0] = _FileUtils.kReadListRequest;
request[1] = _id;
request[2] = bytes;
- _fileService.call(request).then((response) {
+ return _fileService.call(request).transform((response) {
if (_isErrorResponse(response)) {
- var e = _exceptionFromResponse(response,
- "readList failed for file '$_name'");
- completer.completeException(e);
- } else {
- var read = response[1];
- var data = response[2];
- buffer.setRange(offset, read, data);
- completer.complete(read);
+ throw _exceptionFromResponse(response,
+ "readList failed for file '$_name'");
}
+ var read = response[1];
+ var data = response[2];
+ buffer.setRange(offset, read, data);
+ return read;
});
- return completer.future;
}
int readListSync(List<int> buffer, int offset, int bytes) {
@@ -843,16 +808,13 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
request[0] = _FileUtils.kWriteByteRequest;
request[1] = _id;
request[2] = value;
- _fileService.call(request).then((response) {
+ return _fileService.call(request).transform((response) {
if (_isErrorResponse(response)) {
- var e = _exceptionFromResponse(response,
- "writeByte failed for file '$_name'");
- completer.completeException(e);
- } else {
- completer.complete(this);
+ throw _exceptionFromResponse(response,
+ "writeByte failed for file '$_name'");
}
+ return this;
});
- return completer.future;
}
int writeByteSync(int value) {
@@ -884,8 +846,17 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
}
if (_isClosed) return _completeWithClosedException(completer);
- List result =
- _FileUtils.ensureFastAndSerializableBuffer(buffer, offset, bytes);
+ List result;
+ try {
+ result =
+ _FileUtils.ensureFastAndSerializableBuffer(buffer, offset, bytes);
+ } catch (var e) {
+ // Complete asynchronously so the user has a chance to setup
+ // handlers without getting exceptions when registering the
+ // then handler.
+ new Timer(0, (t) => completer.completeException(e));
+ return completer.future;
+ }
List outBuffer = result[0];
int outOffset = result[1];
@@ -895,16 +866,13 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
request[2] = outBuffer;
request[3] = outOffset;
request[4] = bytes;
- _fileService.call(request).then((response) {
+ return _fileService.call(request).transform((response) {
if (_isErrorResponse(response)) {
- var e = _exceptionFromResponse(response,
- "writeList failed for file '$_name'");
- completer.completeException(e);
- } else {
- completer.complete(this);
+ throw _exceptionFromResponse(response,
+ "writeList failed for file '$_name'");
}
+ return this;
});
- return completer.future;
}
int writeListSync(List<int> buffer, int offset, int bytes) {
@@ -935,16 +903,13 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
request[0] = _FileUtils.kWriteStringRequest;
request[1] = _id;
request[2] = string;
- _fileService.call(request).then((response) {
+ return _fileService.call(request).transform((response) {
if (_isErrorResponse(response)) {
- var e = _exceptionFromResponse(response,
- "writeString failed for file '$_name'");
- completer.completeException(e);
- } else {
- completer.complete(this);
+ throw _exceptionFromResponse(response,
+ "writeString failed for file '$_name'");
}
+ return this;
});
- return completer.future;
}
int writeStringSync(String string, [Encoding encoding = Encoding.UTF_8]) {
@@ -963,16 +928,13 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
List request = new List(2);
request[0] = _FileUtils.kPositionRequest;
request[1] = _id;
- _fileService.call(request).then((response) {
+ return _fileService.call(request).transform((response) {
if (_isErrorResponse(response)) {
- var e = _exceptionFromResponse(response,
- "position failed for file '$_name'");
- completer.completeException(e);
- } else {
- completer.complete(response);
+ throw _exceptionFromResponse(response,
+ "position failed for file '$_name'");
}
+ return response;
});
- return completer.future;
}
int positionSync() {
@@ -992,16 +954,13 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
request[0] = _FileUtils.kSetPositionRequest;
request[1] = _id;
request[2] = position;
- _fileService.call(request).then((response) {
+ return _fileService.call(request).transform((response) {
if (_isErrorResponse(response)) {
- var e = _exceptionFromResponse(response,
- "setPosition failed for file '$_name'");
- completer.completeException(e);
- } else {
- completer.complete(this);
+ throw _exceptionFromResponse(response,
+ "setPosition failed for file '$_name'");
}
+ return this;
});
- return completer.future;
}
void setPositionSync(int position) {
@@ -1020,16 +979,13 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
request[0] = _FileUtils.kTruncateRequest;
request[1] = _id;
request[2] = length;
- _fileService.call(request).then((response) {
+ return _fileService.call(request).transform((response) {
if (_isErrorResponse(response)) {
- var e = _exceptionFromResponse(response,
- "truncate failed for file '$_name'");
- completer.completeException(e);
- } else {
- completer.complete(this);
+ throw _exceptionFromResponse(response,
+ "truncate failed for file '$_name'");
}
+ return this;
});
- return completer.future;
}
void truncateSync(int length) {
@@ -1047,16 +1003,13 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
List request = new List(2);
request[0] = _FileUtils.kLengthRequest;
request[1] = _id;
- _fileService.call(request).then((response) {
+ return _fileService.call(request).transform((response) {
if (_isErrorResponse(response)) {
- var e = _exceptionFromResponse(response,
- "length failed for file '$_name'");
- completer.completeException(e);
- } else {
- completer.complete(response);
+ throw _exceptionFromResponse(response,
+ "length failed for file '$_name'");
}
+ return response;
});
- return completer.future;
}
int lengthSync() {
@@ -1075,16 +1028,13 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
List request = new List(2);
request[0] = _FileUtils.kFlushRequest;
request[1] = _id;
- _fileService.call(request).then((response) {
+ return _fileService.call(request).transform((response) {
if (_isErrorResponse(response)) {
- var e = _exceptionFromResponse(response,
- "flush failed for file '$_name'");
- completer.completeException(e);
- } else {
- completer.complete(this);
+ throw _exceptionFromResponse(response,
+ "flush failed for file '$_name'");
}
+ return this;
});
- return completer.future;
}
void flushSync() {
« no previous file with comments | « runtime/bin/file.cc ('k') | tests/standalone/io/file_fuzz_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698