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

Side by Side Diff: sdk/lib/io/file_impl.dart

Issue 16123036: Clean up dart:io exceptions. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « sdk/lib/io/file.dart ('k') | sdk/lib/io/file_system_entity.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 part of dart.io; 5 part of dart.io;
6 6
7 // Read the file in blocks of size 64k. 7 // Read the file in blocks of size 64k.
8 const int _BLOCK_SIZE = 64 * 1024; 8 const int _BLOCK_SIZE = 64 * 1024;
9 9
10 10
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 throwIfError(ms, "Cannot retrieve modification time for file '$_path'"); 386 throwIfError(ms, "Cannot retrieve modification time for file '$_path'");
387 return new DateTime.fromMillisecondsSinceEpoch(ms); 387 return new DateTime.fromMillisecondsSinceEpoch(ms);
388 } 388 }
389 389
390 external static _open(String path, int mode); 390 external static _open(String path, int mode);
391 391
392 RandomAccessFile openSync({FileMode mode: FileMode.READ}) { 392 RandomAccessFile openSync({FileMode mode: FileMode.READ}) {
393 if (mode != FileMode.READ && 393 if (mode != FileMode.READ &&
394 mode != FileMode.WRITE && 394 mode != FileMode.WRITE &&
395 mode != FileMode.APPEND) { 395 mode != FileMode.APPEND) {
396 throw new FileIOException("Unknown file mode. Use FileMode.READ, " 396 throw new FileException("Unknown file mode. Use FileMode.READ, "
397 "FileMode.WRITE or FileMode.APPEND."); 397 "FileMode.WRITE or FileMode.APPEND.");
398 } 398 }
399 var id = _open(_path, mode._mode); 399 var id = _open(_path, mode._mode);
400 throwIfError(id, "Cannot open file '$_path'"); 400 throwIfError(id, "Cannot open file '$_path'");
401 return new _RandomAccessFile(id, _path); 401 return new _RandomAccessFile(id, _path);
402 } 402 }
403 403
404 external static int _openStdio(int fd); 404 external static int _openStdio(int fd);
405 405
406 static RandomAccessFile _openStdioSync(int fd) { 406 static RandomAccessFile _openStdioSync(int fd) {
407 var id = _openStdio(fd); 407 var id = _openStdio(fd);
408 if (id == 0) { 408 if (id == 0) {
409 throw new FileIOException("Cannot open stdio file for: $fd"); 409 throw new FileException("Cannot open stdio file for: $fd");
410 } 410 }
411 return new _RandomAccessFile(id, ""); 411 return new _RandomAccessFile(id, "");
412 } 412 }
413 413
414 Future<String> fullPath() { 414 Future<String> fullPath() {
415 _ensureFileService(); 415 _ensureFileService();
416 List request = new List(2); 416 List request = new List(2);
417 request[0] = _FULL_PATH_REQUEST; 417 request[0] = _FULL_PATH_REQUEST;
418 request[1] = _path; 418 request[1] = _path;
419 return _fileService.call(request).then((response) { 419 return _fileService.call(request).then((response) {
(...skipping 15 matching lines...) Expand all
435 } 435 }
436 436
437 Stream<List<int>> openRead([int start, int end]) { 437 Stream<List<int>> openRead([int start, int end]) {
438 return new _FileStream(_path, start, end); 438 return new _FileStream(_path, start, end);
439 } 439 }
440 440
441 IOSink openWrite({FileMode mode: FileMode.WRITE, 441 IOSink openWrite({FileMode mode: FileMode.WRITE,
442 Encoding encoding: Encoding.UTF_8}) { 442 Encoding encoding: Encoding.UTF_8}) {
443 if (mode != FileMode.WRITE && 443 if (mode != FileMode.WRITE &&
444 mode != FileMode.APPEND) { 444 mode != FileMode.APPEND) {
445 throw new FileIOException( 445 throw new FileException(
446 "Wrong FileMode. Use FileMode.WRITE or FileMode.APPEND"); 446 "Wrong FileMode. Use FileMode.WRITE or FileMode.APPEND");
447 } 447 }
448 var consumer = new _FileStreamConsumer(this, mode); 448 var consumer = new _FileStreamConsumer(this, mode);
449 return new IOSink(consumer, encoding: encoding); 449 return new IOSink(consumer, encoding: encoding);
450 } 450 }
451 451
452 Future<List<int>> readAsBytes() { 452 Future<List<int>> readAsBytes() {
453 _ensureFileService(); 453 _ensureFileService();
454 Completer<List<int>> completer = new Completer<List<int>>(); 454 Completer<List<int>> completer = new Completer<List<int>>();
455 var chunks = new _BufferList(); 455 var chunks = new _BufferList();
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
552 String toString() => "File: '$path'"; 552 String toString() => "File: '$path'";
553 553
554 void _ensureFileService() { 554 void _ensureFileService() {
555 if (_fileService == null) { 555 if (_fileService == null) {
556 _fileService = _FileUtils._newServicePort(); 556 _fileService = _FileUtils._newServicePort();
557 } 557 }
558 } 558 }
559 559
560 static throwIfError(Object result, String msg) { 560 static throwIfError(Object result, String msg) {
561 if (result is OSError) { 561 if (result is OSError) {
562 throw new FileIOException(msg, result); 562 throw new FileException(msg, result);
563 } 563 }
564 } 564 }
565 565
566 final String _path; 566 final String _path;
567 567
568 SendPort _fileService; 568 SendPort _fileService;
569 } 569 }
570 570
571 571
572 class _RandomAccessFile implements RandomAccessFile { 572 class _RandomAccessFile implements RandomAccessFile {
573 _RandomAccessFile(int this._id, String this._path); 573 _RandomAccessFile(int this._id, String this._path);
574 574
575 Future<RandomAccessFile> close() { 575 Future<RandomAccessFile> close() {
576 if (closed) return _closedException(); 576 if (closed) return _closedException();
577 _ensureFileService(); 577 _ensureFileService();
578 List request = new List(2); 578 List request = new List(2);
579 request[0] = _CLOSE_REQUEST; 579 request[0] = _CLOSE_REQUEST;
580 request[1] = _id; 580 request[1] = _id;
581 // Set the id_ to 0 (NULL) to ensure the no more async requests 581 // Set the id_ to 0 (NULL) to ensure the no more async requests
582 // can be issued for this file. 582 // can be issued for this file.
583 _id = 0; 583 _id = 0;
584 return _fileService.call(request).then((result) { 584 return _fileService.call(request).then((result) {
585 if (result != -1) { 585 if (result != -1) {
586 _id = result; 586 _id = result;
587 return this; 587 return this;
588 } else { 588 } else {
589 throw new FileIOException("Cannot close file '$_path'"); 589 throw new FileException("Cannot close file '$_path'");
590 } 590 }
591 }); 591 });
592 } 592 }
593 593
594 external static int _close(int id); 594 external static int _close(int id);
595 595
596 void closeSync() { 596 void closeSync() {
597 _checkNotClosed(); 597 _checkNotClosed();
598 var id = _close(_id); 598 var id = _close(_id);
599 if (id == -1) { 599 if (id == -1) {
600 throw new FileIOException("Cannot close file '$_path'"); 600 throw new FileException("Cannot close file '$_path'");
601 } 601 }
602 _id = id; 602 _id = id;
603 } 603 }
604 604
605 Future<int> readByte() { 605 Future<int> readByte() {
606 _ensureFileService(); 606 _ensureFileService();
607 if (closed) return _closedException(); 607 if (closed) return _closedException();
608 List request = new List(2); 608 List request = new List(2);
609 request[0] = _READ_BYTE_REQUEST; 609 request[0] = _READ_BYTE_REQUEST;
610 request[1] = _id; 610 request[1] = _id;
611 return _fileService.call(request).then((response) { 611 return _fileService.call(request).then((response) {
612 if (_isErrorResponse(response)) { 612 if (_isErrorResponse(response)) {
613 throw _exceptionFromResponse(response, 613 throw _exceptionFromResponse(response,
614 "readByte failed for file '$_path'"); 614 "readByte failed for file '$_path'");
615 } 615 }
616 return response; 616 return response;
617 }); 617 });
618 } 618 }
619 619
620 external static _readByte(int id); 620 external static _readByte(int id);
621 621
622 int readByteSync() { 622 int readByteSync() {
623 _checkNotClosed(); 623 _checkNotClosed();
624 var result = _readByte(_id); 624 var result = _readByte(_id);
625 if (result is OSError) { 625 if (result is OSError) {
626 throw new FileIOException("readByte failed for file '$_path'", result); 626 throw new FileException("readByte failed for file '$_path'", result);
627 } 627 }
628 return result; 628 return result;
629 } 629 }
630 630
631 Future<List<int>> read(int bytes) { 631 Future<List<int>> read(int bytes) {
632 _ensureFileService(); 632 _ensureFileService();
633 if (bytes is !int) { 633 if (bytes is !int) {
634 return new Future.error(new FileIOException( 634 return new Future.error(new FileException(
635 "Invalid arguments to read for file '$_path'")); 635 "Invalid arguments to read for file '$_path'"));
636 } 636 }
637 if (closed) return _closedException(); 637 if (closed) return _closedException();
638 List request = new List(3); 638 List request = new List(3);
639 request[0] = _READ_REQUEST; 639 request[0] = _READ_REQUEST;
640 request[1] = _id; 640 request[1] = _id;
641 request[2] = bytes; 641 request[2] = bytes;
642 return _fileService.call(request).then((response) { 642 return _fileService.call(request).then((response) {
643 if (_isErrorResponse(response)) { 643 if (_isErrorResponse(response)) {
644 throw _exceptionFromResponse(response, 644 throw _exceptionFromResponse(response,
645 "read failed for file '$_path'"); 645 "read failed for file '$_path'");
646 } 646 }
647 return response[1]; 647 return response[1];
648 }); 648 });
649 } 649 }
650 650
651 external static _read(int id, int bytes); 651 external static _read(int id, int bytes);
652 652
653 List<int> readSync(int bytes) { 653 List<int> readSync(int bytes) {
654 _checkNotClosed(); 654 _checkNotClosed();
655 if (bytes is !int) { 655 if (bytes is !int) {
656 throw new FileIOException( 656 throw new FileException(
657 "Invalid arguments to readSync for file '$_path'"); 657 "Invalid arguments to readSync for file '$_path'");
658 } 658 }
659 var result = _read(_id, bytes); 659 var result = _read(_id, bytes);
660 if (result is OSError) { 660 if (result is OSError) {
661 throw new FileIOException("readSync failed for file '$_path'", 661 throw new FileException("readSync failed for file '$_path'",
662 result); 662 result);
663 } 663 }
664 return result; 664 return result;
665 } 665 }
666 666
667 Future<int> readInto(List<int> buffer, [int start, int end]) { 667 Future<int> readInto(List<int> buffer, [int start, int end]) {
668 _ensureFileService(); 668 _ensureFileService();
669 if (buffer is !List || 669 if (buffer is !List ||
670 (start != null && start is !int) || 670 (start != null && start is !int) ||
671 (end != null && end is !int)) { 671 (end != null && end is !int)) {
672 return new Future.error(new FileIOException( 672 return new Future.error(new FileException(
673 "Invalid arguments to readInto for file '$_path'")); 673 "Invalid arguments to readInto for file '$_path'"));
674 }; 674 };
675 if (closed) return _closedException(); 675 if (closed) return _closedException();
676 List request = new List(3); 676 List request = new List(3);
677 if (start == null) start = 0; 677 if (start == null) start = 0;
678 if (end == null) end = buffer.length; 678 if (end == null) end = buffer.length;
679 request[0] = _READ_LIST_REQUEST; 679 request[0] = _READ_LIST_REQUEST;
680 request[1] = _id; 680 request[1] = _id;
681 request[2] = end - start; 681 request[2] = end - start;
682 return _fileService.call(request).then((response) { 682 return _fileService.call(request).then((response) {
(...skipping 16 matching lines...) Expand all
699 } 699 }
700 } 700 }
701 701
702 external static _readInto(int id, List<int> buffer, int start, int end); 702 external static _readInto(int id, List<int> buffer, int start, int end);
703 703
704 int readIntoSync(List<int> buffer, [int start, int end]) { 704 int readIntoSync(List<int> buffer, [int start, int end]) {
705 _checkNotClosed(); 705 _checkNotClosed();
706 if (buffer is !List || 706 if (buffer is !List ||
707 (start != null && start is !int) || 707 (start != null && start is !int) ||
708 (end != null && end is !int)) { 708 (end != null && end is !int)) {
709 throw new FileIOException( 709 throw new FileException(
710 "Invalid arguments to readInto for file '$_path'"); 710 "Invalid arguments to readInto for file '$_path'");
711 } 711 }
712 if (start == null) start = 0; 712 if (start == null) start = 0;
713 if (end == null) end = buffer.length; 713 if (end == null) end = buffer.length;
714 if (end == start) return 0; 714 if (end == start) return 0;
715 _checkReadWriteListArguments(buffer.length, start, end); 715 _checkReadWriteListArguments(buffer.length, start, end);
716 var result = _readInto(_id, buffer, start, end); 716 var result = _readInto(_id, buffer, start, end);
717 if (result is OSError) { 717 if (result is OSError) {
718 throw new FileIOException("readInto failed for file '$_path'", 718 throw new FileException("readInto failed for file '$_path'",
719 result); 719 result);
720 } 720 }
721 return result; 721 return result;
722 } 722 }
723 723
724 Future<RandomAccessFile> writeByte(int value) { 724 Future<RandomAccessFile> writeByte(int value) {
725 _ensureFileService(); 725 _ensureFileService();
726 if (value is !int) { 726 if (value is !int) {
727 return new Future.error(new FileIOException( 727 return new Future.error(new FileException(
728 "Invalid argument to writeByte for file '$_path'")); 728 "Invalid argument to writeByte for file '$_path'"));
729 } 729 }
730 if (closed) return _closedException(); 730 if (closed) return _closedException();
731 List request = new List(3); 731 List request = new List(3);
732 request[0] = _WRITE_BYTE_REQUEST; 732 request[0] = _WRITE_BYTE_REQUEST;
733 request[1] = _id; 733 request[1] = _id;
734 request[2] = value; 734 request[2] = value;
735 return _fileService.call(request).then((response) { 735 return _fileService.call(request).then((response) {
736 if (_isErrorResponse(response)) { 736 if (_isErrorResponse(response)) {
737 throw _exceptionFromResponse(response, 737 throw _exceptionFromResponse(response,
738 "writeByte failed for file '$_path'"); 738 "writeByte failed for file '$_path'");
739 } 739 }
740 return this; 740 return this;
741 }); 741 });
742 } 742 }
743 743
744 external static _writeByte(int id, int value); 744 external static _writeByte(int id, int value);
745 745
746 int writeByteSync(int value) { 746 int writeByteSync(int value) {
747 _checkNotClosed(); 747 _checkNotClosed();
748 if (value is !int) { 748 if (value is !int) {
749 throw new FileIOException( 749 throw new FileException(
750 "Invalid argument to writeByte for file '$_path'"); 750 "Invalid argument to writeByte for file '$_path'");
751 } 751 }
752 var result = _writeByte(_id, value); 752 var result = _writeByte(_id, value);
753 if (result is OSError) { 753 if (result is OSError) {
754 throw new FileIOException("writeByte failed for file '$_path'", 754 throw new FileException("writeByte failed for file '$_path'",
755 result); 755 result);
756 } 756 }
757 return result; 757 return result;
758 } 758 }
759 759
760 Future<RandomAccessFile> writeFrom(List<int> buffer, [int start, int end]) { 760 Future<RandomAccessFile> writeFrom(List<int> buffer, [int start, int end]) {
761 _ensureFileService(); 761 _ensureFileService();
762 if ((buffer is !List && buffer is !ByteData) || 762 if ((buffer is !List && buffer is !ByteData) ||
763 (start != null && start is !int) || 763 (start != null && start is !int) ||
764 (end != null && end is !int)) { 764 (end != null && end is !int)) {
765 return new Future.error(new FileIOException( 765 return new Future.error(new FileException(
766 "Invalid arguments to writeFrom for file '$_path'")); 766 "Invalid arguments to writeFrom for file '$_path'"));
767 } 767 }
768 768
769 if (closed) return _closedException(); 769 if (closed) return _closedException();
770 770
771 _BufferAndStart result; 771 _BufferAndStart result;
772 try { 772 try {
773 result = _ensureFastAndSerializableBuffer(buffer, start, end); 773 result = _ensureFastAndSerializableBuffer(buffer, start, end);
774 } catch (e) { 774 } catch (e) {
775 return new Future.error(e); 775 return new Future.error(e);
(...skipping 14 matching lines...) Expand all
790 }); 790 });
791 } 791 }
792 792
793 external static _writeFrom(int id, List<int> buffer, int start, int end); 793 external static _writeFrom(int id, List<int> buffer, int start, int end);
794 794
795 void writeFromSync(List<int> buffer, [int start, int end]) { 795 void writeFromSync(List<int> buffer, [int start, int end]) {
796 _checkNotClosed(); 796 _checkNotClosed();
797 if (buffer is !List || 797 if (buffer is !List ||
798 (start != null && start is !int) || 798 (start != null && start is !int) ||
799 (end != null && end is !int)) { 799 (end != null && end is !int)) {
800 throw new FileIOException( 800 throw new FileException(
801 "Invalid arguments to writeFrom for file '$_path'"); 801 "Invalid arguments to writeFrom for file '$_path'");
802 } 802 }
803 if (start == null) start = 0; 803 if (start == null) start = 0;
804 if (end == null) end = buffer.length; 804 if (end == null) end = buffer.length;
805 if (end == start) return; 805 if (end == start) return;
806 _checkReadWriteListArguments(buffer.length, start, end); 806 _checkReadWriteListArguments(buffer.length, start, end);
807 _BufferAndStart bufferAndStart = 807 _BufferAndStart bufferAndStart =
808 _ensureFastAndSerializableBuffer(buffer, start, end); 808 _ensureFastAndSerializableBuffer(buffer, start, end);
809 var result = _writeFrom(_id, 809 var result = _writeFrom(_id,
810 bufferAndStart.buffer, 810 bufferAndStart.buffer,
811 bufferAndStart.start, 811 bufferAndStart.start,
812 end - (start - bufferAndStart.start)); 812 end - (start - bufferAndStart.start));
813 if (result is OSError) { 813 if (result is OSError) {
814 throw new FileIOException("writeFrom failed for file '$_path'", result); 814 throw new FileException("writeFrom failed for file '$_path'", result);
815 } 815 }
816 } 816 }
817 817
818 Future<RandomAccessFile> writeString(String string, 818 Future<RandomAccessFile> writeString(String string,
819 {Encoding encoding: Encoding.UTF_8}) { 819 {Encoding encoding: Encoding.UTF_8}) {
820 if (encoding is! Encoding) { 820 if (encoding is! Encoding) {
821 return new Future.error(new FileIOException( 821 return new Future.error(new FileException(
822 "Invalid encoding in writeString: $encoding")); 822 "Invalid encoding in writeString: $encoding"));
823 } 823 }
824 var data = _encodeString(string, encoding); 824 var data = _encodeString(string, encoding);
825 return writeFrom(data, 0, data.length); 825 return writeFrom(data, 0, data.length);
826 } 826 }
827 827
828 void writeStringSync(String string, {Encoding encoding: Encoding.UTF_8}) { 828 void writeStringSync(String string, {Encoding encoding: Encoding.UTF_8}) {
829 if (encoding is! Encoding) { 829 if (encoding is! Encoding) {
830 throw new FileIOException( 830 throw new FileException(
831 "Invalid encoding in writeStringSync: $encoding"); 831 "Invalid encoding in writeStringSync: $encoding");
832 } 832 }
833 var data = _encodeString(string, encoding); 833 var data = _encodeString(string, encoding);
834 writeFromSync(data, 0, data.length); 834 writeFromSync(data, 0, data.length);
835 } 835 }
836 836
837 Future<int> position() { 837 Future<int> position() {
838 _ensureFileService(); 838 _ensureFileService();
839 if (closed) return _closedException(); 839 if (closed) return _closedException();
840 List request = new List(2); 840 List request = new List(2);
841 request[0] = _POSITION_REQUEST; 841 request[0] = _POSITION_REQUEST;
842 request[1] = _id; 842 request[1] = _id;
843 return _fileService.call(request).then((response) { 843 return _fileService.call(request).then((response) {
844 if (_isErrorResponse(response)) { 844 if (_isErrorResponse(response)) {
845 throw _exceptionFromResponse(response, 845 throw _exceptionFromResponse(response,
846 "position failed for file '$_path'"); 846 "position failed for file '$_path'");
847 } 847 }
848 return response; 848 return response;
849 }); 849 });
850 } 850 }
851 851
852 external static _position(int id); 852 external static _position(int id);
853 853
854 int positionSync() { 854 int positionSync() {
855 _checkNotClosed(); 855 _checkNotClosed();
856 var result = _position(_id); 856 var result = _position(_id);
857 if (result is OSError) { 857 if (result is OSError) {
858 throw new FileIOException("position failed for file '$_path'", result); 858 throw new FileException("position failed for file '$_path'", result);
859 } 859 }
860 return result; 860 return result;
861 } 861 }
862 862
863 Future<RandomAccessFile> setPosition(int position) { 863 Future<RandomAccessFile> setPosition(int position) {
864 _ensureFileService(); 864 _ensureFileService();
865 if (closed) return _closedException(); 865 if (closed) return _closedException();
866 List request = new List(3); 866 List request = new List(3);
867 request[0] = _SET_POSITION_REQUEST; 867 request[0] = _SET_POSITION_REQUEST;
868 request[1] = _id; 868 request[1] = _id;
869 request[2] = position; 869 request[2] = position;
870 return _fileService.call(request).then((response) { 870 return _fileService.call(request).then((response) {
871 if (_isErrorResponse(response)) { 871 if (_isErrorResponse(response)) {
872 throw _exceptionFromResponse(response, 872 throw _exceptionFromResponse(response,
873 "setPosition failed for file '$_path'"); 873 "setPosition failed for file '$_path'");
874 } 874 }
875 return this; 875 return this;
876 }); 876 });
877 } 877 }
878 878
879 external static _setPosition(int id, int position); 879 external static _setPosition(int id, int position);
880 880
881 void setPositionSync(int position) { 881 void setPositionSync(int position) {
882 _checkNotClosed(); 882 _checkNotClosed();
883 var result = _setPosition(_id, position); 883 var result = _setPosition(_id, position);
884 if (result is OSError) { 884 if (result is OSError) {
885 throw new FileIOException("setPosition failed for file '$_path'", result); 885 throw new FileException("setPosition failed for file '$_path'", result);
886 } 886 }
887 } 887 }
888 888
889 Future<RandomAccessFile> truncate(int length) { 889 Future<RandomAccessFile> truncate(int length) {
890 _ensureFileService(); 890 _ensureFileService();
891 if (closed) return _closedException(); 891 if (closed) return _closedException();
892 List request = new List(3); 892 List request = new List(3);
893 request[0] = _TRUNCATE_REQUEST; 893 request[0] = _TRUNCATE_REQUEST;
894 request[1] = _id; 894 request[1] = _id;
895 request[2] = length; 895 request[2] = length;
896 return _fileService.call(request).then((response) { 896 return _fileService.call(request).then((response) {
897 if (_isErrorResponse(response)) { 897 if (_isErrorResponse(response)) {
898 throw _exceptionFromResponse(response, 898 throw _exceptionFromResponse(response,
899 "truncate failed for file '$_path'"); 899 "truncate failed for file '$_path'");
900 } 900 }
901 return this; 901 return this;
902 }); 902 });
903 } 903 }
904 904
905 external static _truncate(int id, int length); 905 external static _truncate(int id, int length);
906 906
907 void truncateSync(int length) { 907 void truncateSync(int length) {
908 _checkNotClosed(); 908 _checkNotClosed();
909 var result = _truncate(_id, length); 909 var result = _truncate(_id, length);
910 if (result is OSError) { 910 if (result is OSError) {
911 throw new FileIOException("truncate failed for file '$_path'", result); 911 throw new FileException("truncate failed for file '$_path'", result);
912 } 912 }
913 } 913 }
914 914
915 Future<int> length() { 915 Future<int> length() {
916 _ensureFileService(); 916 _ensureFileService();
917 if (closed) return _closedException(); 917 if (closed) return _closedException();
918 List request = new List(2); 918 List request = new List(2);
919 request[0] = _LENGTH_REQUEST; 919 request[0] = _LENGTH_REQUEST;
920 request[1] = _id; 920 request[1] = _id;
921 return _fileService.call(request).then((response) { 921 return _fileService.call(request).then((response) {
922 if (_isErrorResponse(response)) { 922 if (_isErrorResponse(response)) {
923 throw _exceptionFromResponse(response, 923 throw _exceptionFromResponse(response,
924 "length failed for file '$_path'"); 924 "length failed for file '$_path'");
925 } 925 }
926 return response; 926 return response;
927 }); 927 });
928 } 928 }
929 929
930 external static _length(int id); 930 external static _length(int id);
931 931
932 int lengthSync() { 932 int lengthSync() {
933 _checkNotClosed(); 933 _checkNotClosed();
934 var result = _length(_id); 934 var result = _length(_id);
935 if (result is OSError) { 935 if (result is OSError) {
936 throw new FileIOException("length failed for file '$_path'", result); 936 throw new FileException("length failed for file '$_path'", result);
937 } 937 }
938 return result; 938 return result;
939 } 939 }
940 940
941 Future<RandomAccessFile> flush() { 941 Future<RandomAccessFile> flush() {
942 _ensureFileService(); 942 _ensureFileService();
943 if (closed) return _closedException(); 943 if (closed) return _closedException();
944 List request = new List(2); 944 List request = new List(2);
945 request[0] = _FLUSH_REQUEST; 945 request[0] = _FLUSH_REQUEST;
946 request[1] = _id; 946 request[1] = _id;
947 return _fileService.call(request).then((response) { 947 return _fileService.call(request).then((response) {
948 if (_isErrorResponse(response)) { 948 if (_isErrorResponse(response)) {
949 throw _exceptionFromResponse(response, 949 throw _exceptionFromResponse(response,
950 "flush failed for file '$_path'"); 950 "flush failed for file '$_path'");
951 } 951 }
952 return this; 952 return this;
953 }); 953 });
954 } 954 }
955 955
956 external static _flush(int id); 956 external static _flush(int id);
957 957
958 void flushSync() { 958 void flushSync() {
959 _checkNotClosed(); 959 _checkNotClosed();
960 var result = _flush(_id); 960 var result = _flush(_id);
961 if (result is OSError) { 961 if (result is OSError) {
962 throw new FileIOException("flush failed for file '$_path'", result); 962 throw new FileException("flush failed for file '$_path'", result);
963 } 963 }
964 } 964 }
965 965
966 String get path => _path; 966 String get path => _path;
967 967
968 void _ensureFileService() { 968 void _ensureFileService() {
969 if (_fileService == null) { 969 if (_fileService == null) {
970 _fileService = _FileUtils._newServicePort(); 970 _fileService = _FileUtils._newServicePort();
971 } 971 }
972 } 972 }
973 973
974 bool get closed => _id == 0; 974 bool get closed => _id == 0;
975 975
976 void _checkNotClosed() { 976 void _checkNotClosed() {
977 if (closed) { 977 if (closed) {
978 throw new FileIOException("File closed '$_path'"); 978 throw new FileException("File closed '$_path'");
979 } 979 }
980 } 980 }
981 981
982 Future _closedException() { 982 Future _closedException() {
983 return new Future.error(new FileIOException("File closed '$_path'")); 983 return new Future.error(new FileException("File closed '$_path'"));
984 } 984 }
985 985
986 final String _path; 986 final String _path;
987 int _id; 987 int _id;
988 988
989 SendPort _fileService; 989 SendPort _fileService;
990 } 990 }
OLDNEW
« no previous file with comments | « sdk/lib/io/file.dart ('k') | sdk/lib/io/file_system_entity.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698