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

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

Issue 2761673002: [dart:io][windows] Use WriteFile instead of _write (Closed)
Patch Set: Format stdio.dart Created 3 years, 8 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
« no previous file with comments | « runtime/bin/process_patch.dart ('k') | sdk/lib/io/stdio.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 class _FileStream extends Stream<List<int>> { 10 class _FileStream extends Stream<List<int>> {
(...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 read(int bytes); 610 read(int bytes);
611 readInto(List<int> buffer, int start, int end); 611 readInto(List<int> buffer, int start, int end);
612 writeByte(int value); 612 writeByte(int value);
613 writeFrom(List<int> buffer, int start, int end); 613 writeFrom(List<int> buffer, int start, int end);
614 position(); 614 position();
615 setPosition(int position); 615 setPosition(int position);
616 truncate(int length); 616 truncate(int length);
617 length(); 617 length();
618 flush(); 618 flush();
619 lock(int lock, int start, int end); 619 lock(int lock, int start, int end);
620 setTranslation(int translation);
621 }
622
623 /**
624 * The translation mode of a File.
625 *
626 * Whether the data written to a file should be interpreted as text
627 * or binary data. This distinction is only meaningful on platforms that
628 * recognize a difference, in particular on Windows.
629 */
630 enum _FileTranslation {
631 /// Data should be interpreted as text.
632 text,
633
634 /// Data should be interpreted as binary data.
635 binary,
636 } 620 }
637 621
638 class _RandomAccessFile implements RandomAccessFile { 622 class _RandomAccessFile implements RandomAccessFile {
639 static bool _connectedResourceHandler = false; 623 static bool _connectedResourceHandler = false;
640 624
641 final String path; 625 final String path;
642 626
643 bool _asyncDispatched = false; 627 bool _asyncDispatched = false;
644 SendPort _fileService; 628 SendPort _fileService;
645 629
646 _FileResourceInfo _resourceInfo; 630 _FileResourceInfo _resourceInfo;
647 _RandomAccessFileOps _ops; 631 _RandomAccessFileOps _ops;
648 632
649 _FileTranslation _translation;
650
651 _RandomAccessFile(int pointer, this.path) { 633 _RandomAccessFile(int pointer, this.path) {
652 _ops = new _RandomAccessFileOps(pointer); 634 _ops = new _RandomAccessFileOps(pointer);
653 _resourceInfo = new _FileResourceInfo(this); 635 _resourceInfo = new _FileResourceInfo(this);
654 _translation = _FileTranslation.binary;
655 _maybeConnectHandler(); 636 _maybeConnectHandler();
656 } 637 }
657 638
658 void _maybePerformCleanup() { 639 void _maybePerformCleanup() {
659 if (closed) { 640 if (closed) {
660 _FileResourceInfo.FileClosed(_resourceInfo); 641 _FileResourceInfo.FileClosed(_resourceInfo);
661 } 642 }
662 } 643 }
663 644
664 _maybeConnectHandler() { 645 _maybeConnectHandler() {
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after
1045 } 1026 }
1046 if (start == end) { 1027 if (start == end) {
1047 throw new ArgumentError(); 1028 throw new ArgumentError();
1048 } 1029 }
1049 var result = _ops.lock(LOCK_UNLOCK, start, end); 1030 var result = _ops.lock(LOCK_UNLOCK, start, end);
1050 if (result is OSError) { 1031 if (result is OSError) {
1051 throw new FileSystemException('unlock failed', path, result); 1032 throw new FileSystemException('unlock failed', path, result);
1052 } 1033 }
1053 } 1034 }
1054 1035
1055 _FileTranslation get translation => _translation;
1056
1057 void set translation(_FileTranslation translation) {
1058 if (_translation != translation) {
1059 _ops.setTranslation(translation.index);
1060 _translation = translation;
1061 }
1062 }
1063
1064 bool closed = false; 1036 bool closed = false;
1065 1037
1066 // Calling this function will increase the reference count on the native 1038 // Calling this function will increase the reference count on the native
1067 // object that implements the file operations. It should only be called to 1039 // object that implements the file operations. It should only be called to
1068 // pass the pointer to the IO Service, which will decrement the reference 1040 // pass the pointer to the IO Service, which will decrement the reference
1069 // count when it is finished with it. 1041 // count when it is finished with it.
1070 int _pointer() => _ops.getPointer(); 1042 int _pointer() => _ops.getPointer();
1071 1043
1072 Future _dispatch(int request, List data, {bool markClosed: false}) { 1044 Future _dispatch(int request, List data, {bool markClosed: false}) {
1073 if (closed) { 1045 if (closed) {
(...skipping 18 matching lines...) Expand all
1092 void _checkAvailable() { 1064 void _checkAvailable() {
1093 if (_asyncDispatched) { 1065 if (_asyncDispatched) {
1094 throw new FileSystemException( 1066 throw new FileSystemException(
1095 "An async operation is currently pending", path); 1067 "An async operation is currently pending", path);
1096 } 1068 }
1097 if (closed) { 1069 if (closed) {
1098 throw new FileSystemException("File closed", path); 1070 throw new FileSystemException("File closed", path);
1099 } 1071 }
1100 } 1072 }
1101 } 1073 }
OLDNEW
« no previous file with comments | « runtime/bin/process_patch.dart ('k') | sdk/lib/io/stdio.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698