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 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
386 static writeString(int id, String string) native "File_WriteString"; | 386 static writeString(int id, String string) native "File_WriteString"; |
387 static position(int id) native "File_Position"; | 387 static position(int id) native "File_Position"; |
388 static setPosition(int id, int position) native "File_SetPosition"; | 388 static setPosition(int id, int position) native "File_SetPosition"; |
389 static truncate(int id, int length) native "File_Truncate"; | 389 static truncate(int id, int length) native "File_Truncate"; |
390 static length(int id) native "File_Length"; | 390 static length(int id) native "File_Length"; |
391 static flush(int id) native "File_Flush"; | 391 static flush(int id) native "File_Flush"; |
392 static int openStdio(int fd) native "File_OpenStdio"; | 392 static int openStdio(int fd) native "File_OpenStdio"; |
393 static SendPort newServicePort() native "File_NewServicePort"; | 393 static SendPort newServicePort() native "File_NewServicePort"; |
394 | 394 |
395 static bool checkedExists(String name) { | 395 static bool checkedExists(String name) { |
396 if (name is !String) throw new IllegalArgumentException(); | 396 if (name is !String) throw new ArgumentError(); |
397 var result = exists(name); | 397 var result = exists(name); |
398 throwIfError(result, "Cannot check existence of file '$name'"); | 398 throwIfError(result, "Cannot check existence of file '$name'"); |
399 return result; | 399 return result; |
400 } | 400 } |
401 | 401 |
402 static int checkedOpen(String name, int mode) { | 402 static int checkedOpen(String name, int mode) { |
403 if (name is !String || mode is !int) throw new IllegalArgumentException(); | 403 if (name is !String || mode is !int) throw new ArgumentError(); |
404 var result = open(name, mode); | 404 var result = open(name, mode); |
405 throwIfError(result, "Cannot open file '$name'"); | 405 throwIfError(result, "Cannot open file '$name'"); |
406 return result; | 406 return result; |
407 } | 407 } |
408 | 408 |
409 static bool checkedCreate(String name) { | 409 static bool checkedCreate(String name) { |
410 if (name is !String) throw new IllegalArgumentException(); | 410 if (name is !String) throw new ArgumentError(); |
411 var result = create(name); | 411 var result = create(name); |
412 throwIfError(result, "Cannot create file '$name'"); | 412 throwIfError(result, "Cannot create file '$name'"); |
413 return true; | 413 return true; |
414 } | 414 } |
415 | 415 |
416 static bool checkedDelete(String name) { | 416 static bool checkedDelete(String name) { |
417 if (name is !String) throw new IllegalArgumentException(); | 417 if (name is !String) throw new ArgumentError(); |
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 return true; | 420 return true; |
421 } | 421 } |
422 | 422 |
423 static String checkedFullPath(String name) { | 423 static String checkedFullPath(String name) { |
424 if (name is !String) throw new IllegalArgumentException(); | 424 if (name is !String) throw new ArgumentError(); |
425 var result = fullPath(name); | 425 var result = fullPath(name); |
426 throwIfError(result, "Cannot retrieve full path for file '$name'"); | 426 throwIfError(result, "Cannot retrieve full path for file '$name'"); |
427 return result; | 427 return result; |
428 } | 428 } |
429 | 429 |
430 static String checkedDirectory(String name) { | 430 static String checkedDirectory(String name) { |
431 if (name is !String) throw new IllegalArgumentException(); | 431 if (name is !String) throw new ArgumentError(); |
432 var result = directory(name); | 432 var result = directory(name); |
433 throwIfError(result, "Cannot retrieve directory for file '$name'"); | 433 throwIfError(result, "Cannot retrieve directory for file '$name'"); |
434 return result; | 434 return result; |
435 } | 435 } |
436 | 436 |
437 static int checkedLengthFromName(String name) { | 437 static int checkedLengthFromName(String name) { |
438 if (name is !String) throw new IllegalArgumentException(); | 438 if (name is !String) throw new ArgumentError(); |
439 var result = lengthFromName(name); | 439 var result = lengthFromName(name); |
440 throwIfError(result, "Cannot retrieve length of file '$name'"); | 440 throwIfError(result, "Cannot retrieve length of file '$name'"); |
441 return result; | 441 return result; |
442 } | 442 } |
443 | 443 |
444 static int checkedLastModified(String name) { | 444 static int checkedLastModified(String name) { |
445 if (name is !String) throw new IllegalArgumentException(); | 445 if (name is !String) throw new ArgumentError(); |
446 var result = lastModified(name); | 446 var result = lastModified(name); |
447 throwIfError(result, "Cannot retrieve modification time for file '$name'"); | 447 throwIfError(result, "Cannot retrieve modification time for file '$name'"); |
448 return result; | 448 return result; |
449 } | 449 } |
450 | 450 |
451 static int checkReadWriteListArguments(int length, int offset, int bytes) { | 451 static int checkReadWriteListArguments(int length, int offset, int bytes) { |
452 if (offset < 0) return offset; | 452 if (offset < 0) return offset; |
453 if (bytes < 0) return bytes; | 453 if (bytes < 0) return bytes; |
454 if ((offset + bytes) > length) return offset + bytes; | 454 if ((offset + bytes) > length) return offset + bytes; |
455 return 0; | 455 return 0; |
456 } | 456 } |
457 | 457 |
458 static int checkedWriteString(int id, String string) { | 458 static int checkedWriteString(int id, String string) { |
459 if (string is !String) throw new IllegalArgumentException(); | 459 if (string is !String) throw new ArgumentError(); |
460 return writeString(id, string); | 460 return writeString(id, string); |
461 } | 461 } |
462 | 462 |
463 static throwIfError(Object result, String msg) { | 463 static throwIfError(Object result, String msg) { |
464 if (result is OSError) { | 464 if (result is OSError) { |
465 throw new FileIOException(msg, result); | 465 throw new FileIOException(msg, result); |
466 } | 466 } |
467 } | 467 } |
468 } | 468 } |
469 | 469 |
470 // Base class for _File and _RandomAccessFile with shared functions. | 470 // Base class for _File and _RandomAccessFile with shared functions. |
471 class _FileBase { | 471 class _FileBase { |
472 bool _isErrorResponse(response) { | 472 bool _isErrorResponse(response) { |
473 return response is List && response[0] != _FileUtils.SUCCESS_RESPONSE; | 473 return response is List && response[0] != _FileUtils.SUCCESS_RESPONSE; |
474 } | 474 } |
475 | 475 |
476 Exception _exceptionFromResponse(response, String message) { | 476 Exception _exceptionFromResponse(response, String message) { |
477 assert(_isErrorResponse(response)); | 477 assert(_isErrorResponse(response)); |
478 switch (response[_FileUtils.ERROR_RESPONSE_ERROR_TYPE]) { | 478 switch (response[_FileUtils.ERROR_RESPONSE_ERROR_TYPE]) { |
479 case _FileUtils.ILLEGAL_ARGUMENT_RESPONSE: | 479 case _FileUtils.ILLEGAL_ARGUMENT_RESPONSE: |
480 return new IllegalArgumentException(); | 480 return new ArgumentError(); |
481 case _FileUtils.OSERROR_RESPONSE: | 481 case _FileUtils.OSERROR_RESPONSE: |
482 var err = new OSError(response[_FileUtils.OSERROR_RESPONSE_MESSAGE], | 482 var err = new OSError(response[_FileUtils.OSERROR_RESPONSE_MESSAGE], |
483 response[_FileUtils.OSERROR_RESPONSE_ERROR_CODE]); | 483 response[_FileUtils.OSERROR_RESPONSE_ERROR_CODE]); |
484 return new FileIOException(message, err); | 484 return new FileIOException(message, err); |
485 case _FileUtils.FILE_CLOSED_RESPONSE: | 485 case _FileUtils.FILE_CLOSED_RESPONSE: |
486 return new FileIOException("File closed"); | 486 return new FileIOException("File closed"); |
487 default: | 487 default: |
488 return new Exception("Unknown error"); | 488 return new Exception("Unknown error"); |
489 } | 489 } |
490 } | 490 } |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
572 return new Directory(_FileUtils.directory(_name)); | 572 return new Directory(_FileUtils.directory(_name)); |
573 } | 573 } |
574 | 574 |
575 Future<RandomAccessFile> open([FileMode mode = FileMode.READ]) { | 575 Future<RandomAccessFile> open([FileMode mode = FileMode.READ]) { |
576 _ensureFileService(); | 576 _ensureFileService(); |
577 Completer<RandomAccessFile> completer = new Completer<RandomAccessFile>(); | 577 Completer<RandomAccessFile> completer = new Completer<RandomAccessFile>(); |
578 if (mode != FileMode.READ && | 578 if (mode != FileMode.READ && |
579 mode != FileMode.WRITE && | 579 mode != FileMode.WRITE && |
580 mode != FileMode.APPEND) { | 580 mode != FileMode.APPEND) { |
581 new Timer(0, (t) { | 581 new Timer(0, (t) { |
582 completer.completeException(new IllegalArgumentException()); | 582 completer.completeException(new ArgumentError()); |
583 }); | 583 }); |
584 return completer.future; | 584 return completer.future; |
585 } | 585 } |
586 List request = new List(3); | 586 List request = new List(3); |
587 request[0] = _FileUtils.OPEN_REQUEST; | 587 request[0] = _FileUtils.OPEN_REQUEST; |
588 request[1] = _name; | 588 request[1] = _name; |
589 request[2] = mode._mode; // Direct int value for serialization. | 589 request[2] = mode._mode; // Direct int value for serialization. |
590 return _fileService.call(request).transform((response) { | 590 return _fileService.call(request).transform((response) { |
591 if (_isErrorResponse(response)) { | 591 if (_isErrorResponse(response)) { |
592 throw _exceptionFromResponse(response, "Cannot open file '$_name'"); | 592 throw _exceptionFromResponse(response, "Cannot open file '$_name'"); |
(...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1165 new FileIOException("File closed '$_name'")); | 1165 new FileIOException("File closed '$_name'")); |
1166 }); | 1166 }); |
1167 return completer.future; | 1167 return completer.future; |
1168 } | 1168 } |
1169 | 1169 |
1170 final String _name; | 1170 final String _name; |
1171 int _id; | 1171 int _id; |
1172 | 1172 |
1173 SendPort _fileService; | 1173 SendPort _fileService; |
1174 } | 1174 } |
OLD | NEW |