OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart 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 file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 class _FileInputStream extends _BaseDataInputStream implements InputStream { | 5 class _FileInputStream extends _BaseDataInputStream implements InputStream { |
6 _FileInputStream(String name) | 6 _FileInputStream(String name) |
7 : _data = const [], | 7 : _data = const [], |
8 _position = 0, | 8 _position = 0, |
9 _filePosition = 0 { | 9 _filePosition = 0 { |
10 var file = new File(name); | 10 var file = new File(name); |
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
353 throw new ArgumentError('${Error.safeToString(_name)} ' | 353 throw new ArgumentError('${Error.safeToString(_name)} ' |
354 'is not a String'); | 354 'is not a String'); |
355 } | 355 } |
356 } | 356 } |
357 | 357 |
358 // Constructor from Path for file. | 358 // Constructor from Path for file. |
359 _File.fromPath(Path path) : this(path.toNativePath()); | 359 _File.fromPath(Path path) : this(path.toNativePath()); |
360 | 360 |
361 Future<bool> exists() { | 361 Future<bool> exists() { |
362 _ensureFileService(); | 362 _ensureFileService(); |
363 List request = new List(2); | 363 List request = new List.fixedLength(2); |
364 request[0] = _EXISTS_REQUEST; | 364 request[0] = _EXISTS_REQUEST; |
365 request[1] = _name; | 365 request[1] = _name; |
366 return _fileService.call(request).then((response) { | 366 return _fileService.call(request).then((response) { |
367 if (_isErrorResponse(response)) { | 367 if (_isErrorResponse(response)) { |
368 throw _exceptionFromResponse(response, "Cannot open file '$_name'"); | 368 throw _exceptionFromResponse(response, "Cannot open file '$_name'"); |
369 } | 369 } |
370 return response; | 370 return response; |
371 }); | 371 }); |
372 } | 372 } |
373 | 373 |
374 external static _exists(String name); | 374 external static _exists(String name); |
375 | 375 |
376 bool existsSync() { | 376 bool existsSync() { |
377 var result = _exists(_name); | 377 var result = _exists(_name); |
378 throwIfError(result, "Cannot check existence of file '$_name'"); | 378 throwIfError(result, "Cannot check existence of file '$_name'"); |
379 return result; | 379 return result; |
380 } | 380 } |
381 | 381 |
382 Future<File> create() { | 382 Future<File> create() { |
383 _ensureFileService(); | 383 _ensureFileService(); |
384 List request = new List(2); | 384 List request = new List.fixedLength(2); |
385 request[0] = _CREATE_REQUEST; | 385 request[0] = _CREATE_REQUEST; |
386 request[1] = _name; | 386 request[1] = _name; |
387 return _fileService.call(request).then((response) { | 387 return _fileService.call(request).then((response) { |
388 if (_isErrorResponse(response)) { | 388 if (_isErrorResponse(response)) { |
389 throw _exceptionFromResponse(response, "Cannot create file '$_name'"); | 389 throw _exceptionFromResponse(response, "Cannot create file '$_name'"); |
390 } | 390 } |
391 return this; | 391 return this; |
392 }); | 392 }); |
393 } | 393 } |
394 | 394 |
395 external static _create(String name); | 395 external static _create(String name); |
396 | 396 |
397 void createSync() { | 397 void createSync() { |
398 var result = _create(_name); | 398 var result = _create(_name); |
399 throwIfError(result, "Cannot create file '$_name'"); | 399 throwIfError(result, "Cannot create file '$_name'"); |
400 } | 400 } |
401 | 401 |
402 Future<File> delete() { | 402 Future<File> delete() { |
403 _ensureFileService(); | 403 _ensureFileService(); |
404 List request = new List(2); | 404 List request = new List.fixedLength(2); |
405 request[0] = _DELETE_REQUEST; | 405 request[0] = _DELETE_REQUEST; |
406 request[1] = _name; | 406 request[1] = _name; |
407 return _fileService.call(request).then((response) { | 407 return _fileService.call(request).then((response) { |
408 if (_isErrorResponse(response)) { | 408 if (_isErrorResponse(response)) { |
409 throw _exceptionFromResponse(response, "Cannot delete file '$_name'"); | 409 throw _exceptionFromResponse(response, "Cannot delete file '$_name'"); |
410 } | 410 } |
411 return this; | 411 return this; |
412 }); | 412 }); |
413 } | 413 } |
414 | 414 |
415 external static _delete(String name); | 415 external static _delete(String name); |
416 | 416 |
417 void deleteSync() { | 417 void deleteSync() { |
418 var result = _delete(_name); | 418 var result = _delete(_name); |
419 throwIfError(result, "Cannot delete file '$_name'"); | 419 throwIfError(result, "Cannot delete file '$_name'"); |
420 } | 420 } |
421 | 421 |
422 Future<Directory> directory() { | 422 Future<Directory> directory() { |
423 _ensureFileService(); | 423 _ensureFileService(); |
424 List request = new List(2); | 424 List request = new List.fixedLength(2); |
425 request[0] = _DIRECTORY_REQUEST; | 425 request[0] = _DIRECTORY_REQUEST; |
426 request[1] = _name; | 426 request[1] = _name; |
427 return _fileService.call(request).then((response) { | 427 return _fileService.call(request).then((response) { |
428 if (_isErrorResponse(response)) { | 428 if (_isErrorResponse(response)) { |
429 throw _exceptionFromResponse(response, | 429 throw _exceptionFromResponse(response, |
430 "Cannot retrieve directory for " | 430 "Cannot retrieve directory for " |
431 "file '$_name'"); | 431 "file '$_name'"); |
432 } | 432 } |
433 return new Directory(response); | 433 return new Directory(response); |
434 }); | 434 }); |
(...skipping 11 matching lines...) Expand all Loading... |
446 _ensureFileService(); | 446 _ensureFileService(); |
447 Completer<RandomAccessFile> completer = new Completer<RandomAccessFile>(); | 447 Completer<RandomAccessFile> completer = new Completer<RandomAccessFile>(); |
448 if (mode != FileMode.READ && | 448 if (mode != FileMode.READ && |
449 mode != FileMode.WRITE && | 449 mode != FileMode.WRITE && |
450 mode != FileMode.APPEND) { | 450 mode != FileMode.APPEND) { |
451 new Timer(0, (t) { | 451 new Timer(0, (t) { |
452 completer.completeError(new ArgumentError()); | 452 completer.completeError(new ArgumentError()); |
453 }); | 453 }); |
454 return completer.future; | 454 return completer.future; |
455 } | 455 } |
456 List request = new List(3); | 456 List request = new List.fixedLength(3); |
457 request[0] = _OPEN_REQUEST; | 457 request[0] = _OPEN_REQUEST; |
458 request[1] = _name; | 458 request[1] = _name; |
459 request[2] = mode._mode; // Direct int value for serialization. | 459 request[2] = mode._mode; // Direct int value for serialization. |
460 return _fileService.call(request).then((response) { | 460 return _fileService.call(request).then((response) { |
461 if (_isErrorResponse(response)) { | 461 if (_isErrorResponse(response)) { |
462 throw _exceptionFromResponse(response, "Cannot open file '$_name'"); | 462 throw _exceptionFromResponse(response, "Cannot open file '$_name'"); |
463 } | 463 } |
464 return new _RandomAccessFile(response, _name); | 464 return new _RandomAccessFile(response, _name); |
465 }); | 465 }); |
466 } | 466 } |
467 | 467 |
468 Future<int> length() { | 468 Future<int> length() { |
469 _ensureFileService(); | 469 _ensureFileService(); |
470 List request = new List(2); | 470 List request = new List.fixedLength(2); |
471 request[0] = _LENGTH_FROM_NAME_REQUEST; | 471 request[0] = _LENGTH_FROM_NAME_REQUEST; |
472 request[1] = _name; | 472 request[1] = _name; |
473 return _fileService.call(request).then((response) { | 473 return _fileService.call(request).then((response) { |
474 if (_isErrorResponse(response)) { | 474 if (_isErrorResponse(response)) { |
475 throw _exceptionFromResponse(response, | 475 throw _exceptionFromResponse(response, |
476 "Cannot retrieve length of " | 476 "Cannot retrieve length of " |
477 "file '$_name'"); | 477 "file '$_name'"); |
478 } | 478 } |
479 return response; | 479 return response; |
480 }); | 480 }); |
481 } | 481 } |
482 | 482 |
483 | 483 |
484 external static _lengthFromName(String name); | 484 external static _lengthFromName(String name); |
485 | 485 |
486 int lengthSync() { | 486 int lengthSync() { |
487 var result = _lengthFromName(_name); | 487 var result = _lengthFromName(_name); |
488 throwIfError(result, "Cannot retrieve length of file '$_name'"); | 488 throwIfError(result, "Cannot retrieve length of file '$_name'"); |
489 return result; | 489 return result; |
490 } | 490 } |
491 | 491 |
492 Future<Date> lastModified() { | 492 Future<Date> lastModified() { |
493 _ensureFileService(); | 493 _ensureFileService(); |
494 List request = new List(2); | 494 List request = new List.fixedLength(2); |
495 request[0] = _LAST_MODIFIED_REQUEST; | 495 request[0] = _LAST_MODIFIED_REQUEST; |
496 request[1] = _name; | 496 request[1] = _name; |
497 return _fileService.call(request).then((response) { | 497 return _fileService.call(request).then((response) { |
498 if (_isErrorResponse(response)) { | 498 if (_isErrorResponse(response)) { |
499 throw _exceptionFromResponse(response, | 499 throw _exceptionFromResponse(response, |
500 "Cannot retrieve modification time " | 500 "Cannot retrieve modification time " |
501 "for file '$_name'"); | 501 "for file '$_name'"); |
502 } | 502 } |
503 return new Date.fromMillisecondsSinceEpoch(response); | 503 return new Date.fromMillisecondsSinceEpoch(response); |
504 }); | 504 }); |
(...skipping 26 matching lines...) Expand all Loading... |
531 static RandomAccessFile _openStdioSync(int fd) { | 531 static RandomAccessFile _openStdioSync(int fd) { |
532 var id = _openStdio(fd); | 532 var id = _openStdio(fd); |
533 if (id == 0) { | 533 if (id == 0) { |
534 throw new FileIOException("Cannot open stdio file for: $fd"); | 534 throw new FileIOException("Cannot open stdio file for: $fd"); |
535 } | 535 } |
536 return new _RandomAccessFile(id, ""); | 536 return new _RandomAccessFile(id, ""); |
537 } | 537 } |
538 | 538 |
539 Future<String> fullPath() { | 539 Future<String> fullPath() { |
540 _ensureFileService(); | 540 _ensureFileService(); |
541 List request = new List(2); | 541 List request = new List.fixedLength(2); |
542 request[0] = _FULL_PATH_REQUEST; | 542 request[0] = _FULL_PATH_REQUEST; |
543 request[1] = _name; | 543 request[1] = _name; |
544 return _fileService.call(request).then((response) { | 544 return _fileService.call(request).then((response) { |
545 if (_isErrorResponse(response)) { | 545 if (_isErrorResponse(response)) { |
546 throw _exceptionFromResponse(response, | 546 throw _exceptionFromResponse(response, |
547 "Cannot retrieve full path" | 547 "Cannot retrieve full path" |
548 " for '$_name'"); | 548 " for '$_name'"); |
549 } | 549 } |
550 return response; | 550 return response; |
551 }); | 551 }); |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
740 } | 740 } |
741 | 741 |
742 | 742 |
743 class _RandomAccessFile extends _FileBase implements RandomAccessFile { | 743 class _RandomAccessFile extends _FileBase implements RandomAccessFile { |
744 _RandomAccessFile(int this._id, String this._name); | 744 _RandomAccessFile(int this._id, String this._name); |
745 | 745 |
746 Future<RandomAccessFile> close() { | 746 Future<RandomAccessFile> close() { |
747 Completer<RandomAccessFile> completer = new Completer<RandomAccessFile>(); | 747 Completer<RandomAccessFile> completer = new Completer<RandomAccessFile>(); |
748 if (closed) return _completeWithClosedException(completer); | 748 if (closed) return _completeWithClosedException(completer); |
749 _ensureFileService(); | 749 _ensureFileService(); |
750 List request = new List(2); | 750 List request = new List.fixedLength(2); |
751 request[0] = _CLOSE_REQUEST; | 751 request[0] = _CLOSE_REQUEST; |
752 request[1] = _id; | 752 request[1] = _id; |
753 // Set the id_ to 0 (NULL) to ensure the no more async requests | 753 // Set the id_ to 0 (NULL) to ensure the no more async requests |
754 // can be issued for this file. | 754 // can be issued for this file. |
755 _id = 0; | 755 _id = 0; |
756 return _fileService.call(request).then((result) { | 756 return _fileService.call(request).then((result) { |
757 if (result != -1) { | 757 if (result != -1) { |
758 _id = result; | 758 _id = result; |
759 return this; | 759 return this; |
760 } else { | 760 } else { |
(...skipping 10 matching lines...) Expand all Loading... |
771 if (id == -1) { | 771 if (id == -1) { |
772 throw new FileIOException("Cannot close file '$_name'"); | 772 throw new FileIOException("Cannot close file '$_name'"); |
773 } | 773 } |
774 _id = id; | 774 _id = id; |
775 } | 775 } |
776 | 776 |
777 Future<int> readByte() { | 777 Future<int> readByte() { |
778 _ensureFileService(); | 778 _ensureFileService(); |
779 Completer<int> completer = new Completer<int>(); | 779 Completer<int> completer = new Completer<int>(); |
780 if (closed) return _completeWithClosedException(completer); | 780 if (closed) return _completeWithClosedException(completer); |
781 List request = new List(2); | 781 List request = new List.fixedLength(2); |
782 request[0] = _READ_BYTE_REQUEST; | 782 request[0] = _READ_BYTE_REQUEST; |
783 request[1] = _id; | 783 request[1] = _id; |
784 return _fileService.call(request).then((response) { | 784 return _fileService.call(request).then((response) { |
785 if (_isErrorResponse(response)) { | 785 if (_isErrorResponse(response)) { |
786 throw _exceptionFromResponse(response, | 786 throw _exceptionFromResponse(response, |
787 "readByte failed for file '$_name'"); | 787 "readByte failed for file '$_name'"); |
788 } | 788 } |
789 return response; | 789 return response; |
790 }); | 790 }); |
791 } | 791 } |
(...skipping 16 matching lines...) Expand all Loading... |
808 // Complete asynchronously so the user has a chance to setup | 808 // Complete asynchronously so the user has a chance to setup |
809 // handlers without getting exceptions when registering the | 809 // handlers without getting exceptions when registering the |
810 // then handler. | 810 // then handler. |
811 new Timer(0, (t) { | 811 new Timer(0, (t) { |
812 completer.completeError(new FileIOException( | 812 completer.completeError(new FileIOException( |
813 "Invalid arguments to readList for file '$_name'")); | 813 "Invalid arguments to readList for file '$_name'")); |
814 }); | 814 }); |
815 return completer.future; | 815 return completer.future; |
816 }; | 816 }; |
817 if (closed) return _completeWithClosedException(completer); | 817 if (closed) return _completeWithClosedException(completer); |
818 List request = new List(3); | 818 List request = new List.fixedLength(3); |
819 request[0] = _READ_LIST_REQUEST; | 819 request[0] = _READ_LIST_REQUEST; |
820 request[1] = _id; | 820 request[1] = _id; |
821 request[2] = bytes; | 821 request[2] = bytes; |
822 return _fileService.call(request).then((response) { | 822 return _fileService.call(request).then((response) { |
823 if (_isErrorResponse(response)) { | 823 if (_isErrorResponse(response)) { |
824 throw _exceptionFromResponse(response, | 824 throw _exceptionFromResponse(response, |
825 "readList failed for file '$_name'"); | 825 "readList failed for file '$_name'"); |
826 } | 826 } |
827 var read = response[1]; | 827 var read = response[1]; |
828 var data = response[2]; | 828 var data = response[2]; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
864 // Complete asynchronously so the user has a chance to setup | 864 // Complete asynchronously so the user has a chance to setup |
865 // handlers without getting exceptions when registering the | 865 // handlers without getting exceptions when registering the |
866 // then handler. | 866 // then handler. |
867 new Timer(0, (t) { | 867 new Timer(0, (t) { |
868 completer.completeError(new FileIOException( | 868 completer.completeError(new FileIOException( |
869 "Invalid argument to writeByte for file '$_name'")); | 869 "Invalid argument to writeByte for file '$_name'")); |
870 }); | 870 }); |
871 return completer.future; | 871 return completer.future; |
872 } | 872 } |
873 if (closed) return _completeWithClosedException(completer); | 873 if (closed) return _completeWithClosedException(completer); |
874 List request = new List(3); | 874 List request = new List.fixedLength(3); |
875 request[0] = _WRITE_BYTE_REQUEST; | 875 request[0] = _WRITE_BYTE_REQUEST; |
876 request[1] = _id; | 876 request[1] = _id; |
877 request[2] = value; | 877 request[2] = value; |
878 return _fileService.call(request).then((response) { | 878 return _fileService.call(request).then((response) { |
879 if (_isErrorResponse(response)) { | 879 if (_isErrorResponse(response)) { |
880 throw _exceptionFromResponse(response, | 880 throw _exceptionFromResponse(response, |
881 "writeByte failed for file '$_name'"); | 881 "writeByte failed for file '$_name'"); |
882 } | 882 } |
883 return this; | 883 return this; |
884 }); | 884 }); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
919 try { | 919 try { |
920 result = _ensureFastAndSerializableBuffer(buffer, offset, bytes); | 920 result = _ensureFastAndSerializableBuffer(buffer, offset, bytes); |
921 } catch (e) { | 921 } catch (e) { |
922 // Complete asynchronously so the user has a chance to setup | 922 // Complete asynchronously so the user has a chance to setup |
923 // handlers without getting exceptions when registering the | 923 // handlers without getting exceptions when registering the |
924 // then handler. | 924 // then handler. |
925 new Timer(0, (t) => completer.completeError(e)); | 925 new Timer(0, (t) => completer.completeError(e)); |
926 return completer.future; | 926 return completer.future; |
927 } | 927 } |
928 | 928 |
929 List request = new List(5); | 929 List request = new List.fixedLength(5); |
930 request[0] = _WRITE_LIST_REQUEST; | 930 request[0] = _WRITE_LIST_REQUEST; |
931 request[1] = _id; | 931 request[1] = _id; |
932 request[2] = result.buffer; | 932 request[2] = result.buffer; |
933 request[3] = result.offset; | 933 request[3] = result.offset; |
934 request[4] = bytes; | 934 request[4] = bytes; |
935 return _fileService.call(request).then((response) { | 935 return _fileService.call(request).then((response) { |
936 if (_isErrorResponse(response)) { | 936 if (_isErrorResponse(response)) { |
937 throw _exceptionFromResponse(response, | 937 throw _exceptionFromResponse(response, |
938 "writeList failed for file '$_name'"); | 938 "writeList failed for file '$_name'"); |
939 } | 939 } |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
981 "Invalid encoding in writeStringSync: $encoding"); | 981 "Invalid encoding in writeStringSync: $encoding"); |
982 } | 982 } |
983 var data = _StringEncoders.encoder(encoding).encodeString(string); | 983 var data = _StringEncoders.encoder(encoding).encodeString(string); |
984 return writeListSync(data, 0, data.length); | 984 return writeListSync(data, 0, data.length); |
985 } | 985 } |
986 | 986 |
987 Future<int> position() { | 987 Future<int> position() { |
988 _ensureFileService(); | 988 _ensureFileService(); |
989 Completer<int> completer = new Completer<int>(); | 989 Completer<int> completer = new Completer<int>(); |
990 if (closed) return _completeWithClosedException(completer); | 990 if (closed) return _completeWithClosedException(completer); |
991 List request = new List(2); | 991 List request = new List.fixedLength(2); |
992 request[0] = _POSITION_REQUEST; | 992 request[0] = _POSITION_REQUEST; |
993 request[1] = _id; | 993 request[1] = _id; |
994 return _fileService.call(request).then((response) { | 994 return _fileService.call(request).then((response) { |
995 if (_isErrorResponse(response)) { | 995 if (_isErrorResponse(response)) { |
996 throw _exceptionFromResponse(response, | 996 throw _exceptionFromResponse(response, |
997 "position failed for file '$_name'"); | 997 "position failed for file '$_name'"); |
998 } | 998 } |
999 return response; | 999 return response; |
1000 }); | 1000 }); |
1001 } | 1001 } |
1002 | 1002 |
1003 external static _position(int id); | 1003 external static _position(int id); |
1004 | 1004 |
1005 int positionSync() { | 1005 int positionSync() { |
1006 _checkNotClosed(); | 1006 _checkNotClosed(); |
1007 var result = _position(_id); | 1007 var result = _position(_id); |
1008 if (result is OSError) { | 1008 if (result is OSError) { |
1009 throw new FileIOException("position failed for file '$_name'", result); | 1009 throw new FileIOException("position failed for file '$_name'", result); |
1010 } | 1010 } |
1011 return result; | 1011 return result; |
1012 } | 1012 } |
1013 | 1013 |
1014 Future<RandomAccessFile> setPosition(int position) { | 1014 Future<RandomAccessFile> setPosition(int position) { |
1015 _ensureFileService(); | 1015 _ensureFileService(); |
1016 Completer<RandomAccessFile> completer = new Completer<RandomAccessFile>(); | 1016 Completer<RandomAccessFile> completer = new Completer<RandomAccessFile>(); |
1017 if (closed) return _completeWithClosedException(completer); | 1017 if (closed) return _completeWithClosedException(completer); |
1018 List request = new List(3); | 1018 List request = new List.fixedLength(3); |
1019 request[0] = _SET_POSITION_REQUEST; | 1019 request[0] = _SET_POSITION_REQUEST; |
1020 request[1] = _id; | 1020 request[1] = _id; |
1021 request[2] = position; | 1021 request[2] = position; |
1022 return _fileService.call(request).then((response) { | 1022 return _fileService.call(request).then((response) { |
1023 if (_isErrorResponse(response)) { | 1023 if (_isErrorResponse(response)) { |
1024 throw _exceptionFromResponse(response, | 1024 throw _exceptionFromResponse(response, |
1025 "setPosition failed for file '$_name'"); | 1025 "setPosition failed for file '$_name'"); |
1026 } | 1026 } |
1027 return this; | 1027 return this; |
1028 }); | 1028 }); |
1029 } | 1029 } |
1030 | 1030 |
1031 external static _setPosition(int id, int position); | 1031 external static _setPosition(int id, int position); |
1032 | 1032 |
1033 void setPositionSync(int position) { | 1033 void setPositionSync(int position) { |
1034 _checkNotClosed(); | 1034 _checkNotClosed(); |
1035 var result = _setPosition(_id, position); | 1035 var result = _setPosition(_id, position); |
1036 if (result is OSError) { | 1036 if (result is OSError) { |
1037 throw new FileIOException("setPosition failed for file '$_name'", result); | 1037 throw new FileIOException("setPosition failed for file '$_name'", result); |
1038 } | 1038 } |
1039 } | 1039 } |
1040 | 1040 |
1041 Future<RandomAccessFile> truncate(int length) { | 1041 Future<RandomAccessFile> truncate(int length) { |
1042 _ensureFileService(); | 1042 _ensureFileService(); |
1043 Completer<RandomAccessFile> completer = new Completer<RandomAccessFile>(); | 1043 Completer<RandomAccessFile> completer = new Completer<RandomAccessFile>(); |
1044 if (closed) return _completeWithClosedException(completer); | 1044 if (closed) return _completeWithClosedException(completer); |
1045 List request = new List(3); | 1045 List request = new List.fixedLength(3); |
1046 request[0] = _TRUNCATE_REQUEST; | 1046 request[0] = _TRUNCATE_REQUEST; |
1047 request[1] = _id; | 1047 request[1] = _id; |
1048 request[2] = length; | 1048 request[2] = length; |
1049 return _fileService.call(request).then((response) { | 1049 return _fileService.call(request).then((response) { |
1050 if (_isErrorResponse(response)) { | 1050 if (_isErrorResponse(response)) { |
1051 throw _exceptionFromResponse(response, | 1051 throw _exceptionFromResponse(response, |
1052 "truncate failed for file '$_name'"); | 1052 "truncate failed for file '$_name'"); |
1053 } | 1053 } |
1054 return this; | 1054 return this; |
1055 }); | 1055 }); |
1056 } | 1056 } |
1057 | 1057 |
1058 external static _truncate(int id, int length); | 1058 external static _truncate(int id, int length); |
1059 | 1059 |
1060 void truncateSync(int length) { | 1060 void truncateSync(int length) { |
1061 _checkNotClosed(); | 1061 _checkNotClosed(); |
1062 var result = _truncate(_id, length); | 1062 var result = _truncate(_id, length); |
1063 if (result is OSError) { | 1063 if (result is OSError) { |
1064 throw new FileIOException("truncate failed for file '$_name'", result); | 1064 throw new FileIOException("truncate failed for file '$_name'", result); |
1065 } | 1065 } |
1066 } | 1066 } |
1067 | 1067 |
1068 Future<int> length() { | 1068 Future<int> length() { |
1069 _ensureFileService(); | 1069 _ensureFileService(); |
1070 Completer<int> completer = new Completer<int>(); | 1070 Completer<int> completer = new Completer<int>(); |
1071 if (closed) return _completeWithClosedException(completer); | 1071 if (closed) return _completeWithClosedException(completer); |
1072 List request = new List(2); | 1072 List request = new List.fixedLength(2); |
1073 request[0] = _LENGTH_REQUEST; | 1073 request[0] = _LENGTH_REQUEST; |
1074 request[1] = _id; | 1074 request[1] = _id; |
1075 return _fileService.call(request).then((response) { | 1075 return _fileService.call(request).then((response) { |
1076 if (_isErrorResponse(response)) { | 1076 if (_isErrorResponse(response)) { |
1077 throw _exceptionFromResponse(response, | 1077 throw _exceptionFromResponse(response, |
1078 "length failed for file '$_name'"); | 1078 "length failed for file '$_name'"); |
1079 } | 1079 } |
1080 return response; | 1080 return response; |
1081 }); | 1081 }); |
1082 } | 1082 } |
1083 | 1083 |
1084 external static _length(int id); | 1084 external static _length(int id); |
1085 | 1085 |
1086 int lengthSync() { | 1086 int lengthSync() { |
1087 _checkNotClosed(); | 1087 _checkNotClosed(); |
1088 var result = _length(_id); | 1088 var result = _length(_id); |
1089 if (result is OSError) { | 1089 if (result is OSError) { |
1090 throw new FileIOException("length failed for file '$_name'", result); | 1090 throw new FileIOException("length failed for file '$_name'", result); |
1091 } | 1091 } |
1092 return result; | 1092 return result; |
1093 } | 1093 } |
1094 | 1094 |
1095 Future<RandomAccessFile> flush() { | 1095 Future<RandomAccessFile> flush() { |
1096 _ensureFileService(); | 1096 _ensureFileService(); |
1097 Completer<RandomAccessFile> completer = new Completer<RandomAccessFile>(); | 1097 Completer<RandomAccessFile> completer = new Completer<RandomAccessFile>(); |
1098 if (closed) return _completeWithClosedException(completer); | 1098 if (closed) return _completeWithClosedException(completer); |
1099 List request = new List(2); | 1099 List request = new List.fixedLength(2); |
1100 request[0] = _FLUSH_REQUEST; | 1100 request[0] = _FLUSH_REQUEST; |
1101 request[1] = _id; | 1101 request[1] = _id; |
1102 return _fileService.call(request).then((response) { | 1102 return _fileService.call(request).then((response) { |
1103 if (_isErrorResponse(response)) { | 1103 if (_isErrorResponse(response)) { |
1104 throw _exceptionFromResponse(response, | 1104 throw _exceptionFromResponse(response, |
1105 "flush failed for file '$_name'"); | 1105 "flush failed for file '$_name'"); |
1106 } | 1106 } |
1107 return this; | 1107 return this; |
1108 }); | 1108 }); |
1109 } | 1109 } |
(...skipping 30 matching lines...) Expand all Loading... |
1140 new FileIOException("File closed '$_name'")); | 1140 new FileIOException("File closed '$_name'")); |
1141 }); | 1141 }); |
1142 return completer.future; | 1142 return completer.future; |
1143 } | 1143 } |
1144 | 1144 |
1145 final String _name; | 1145 final String _name; |
1146 int _id; | 1146 int _id; |
1147 | 1147 |
1148 SendPort _fileService; | 1148 SendPort _fileService; |
1149 } | 1149 } |
OLD | NEW |