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

Unified Diff: sdk/lib/io/link.dart

Issue 13654002: Change how File/Directory/Link .delete works. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix windows error codes. Created 7 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 side-by-side diff with in-line comments
Download patch
Index: sdk/lib/io/link.dart
diff --git a/sdk/lib/io/link.dart b/sdk/lib/io/link.dart
index fee4f97fc6271aef7a1e7862dc1eab7ce2af1d10..b91ae5a64e5b10fdc2df0337b8fa9fa9649c3194 100644
--- a/sdk/lib/io/link.dart
+++ b/sdk/lib/io/link.dart
@@ -108,6 +108,8 @@ abstract class Link extends FileSystemEntity {
class _Link extends FileSystemEntity implements Link {
final String path;
+ SendPort _fileService;
+
_Link(String this.path);
_Link.fromPath(Path inputPath) : path = inputPath.toNativePath();
@@ -134,9 +136,7 @@ class _Link extends FileSystemEntity implements Link {
target = _makeWindowsLinkTarget(target);
}
var result = _File._createLink(path, target);
- if (result is OSError) {
- throw new LinkIOException("Error in Link.createSync", result);
- }
+ throwIfError(result, "Cannot create link '$path'");
}
// Put target into the form "\??\C:\my\target\dir".
@@ -164,11 +164,21 @@ class _Link extends FileSystemEntity implements Link {
}
Future<Link> delete() {
- return new File(path).delete().then((_) => this);
+ _ensureFileService();
+ List request = new List(2);
+ request[0] = _DELETE_LINK_REQUEST;
+ request[1] = path;
+ return _fileService.call(request).then((response) {
+ if (_isErrorResponse(response)) {
+ throw _exceptionFromResponse(response, "Cannot delete link '$path'");
+ }
+ return this;
+ });
}
void deleteSync() {
- new File(path).deleteSync();
+ var result = _File._deleteLink(path);
+ throwIfError(result, "Cannot delete link '$path'");
}
Future<String> target() {
@@ -178,10 +188,24 @@ class _Link extends FileSystemEntity implements Link {
String targetSync() {
var result = _File._linkTarget(path);
+ throwIfError(result, "Cannot read link '$path'");
+ return result;
+ }
+
+ static throwIfError(Object result, String msg) {
if (result is OSError) {
- throw new LinkIOException("Error in Link.targetSync", result);
+ throw new FileIOException(msg, result);
+ }
+ }
+
+ bool _isErrorResponse(response) {
+ return response is List && response[0] != _SUCCESS_RESPONSE;
+ }
+
+ void _ensureFileService() {
+ if (_fileService == null) {
+ _fileService = _FileUtils._newServicePort();
}
- return result;
}
}

Powered by Google App Engine
This is Rietveld 408576698