blob: 95eb1e129d9a68b8dcd807e01d937f2bb441d232 [file] [log] [blame]
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'interface.dart';
/// Returns a 'No such file or directory' [FileSystemException].
FileSystemException noSuchFileOrDirectory(String path) {
return _fsException(path, 'No such file or directory', ErrorCodes.ENOENT);
}
/// Returns a 'Not a directory' [FileSystemException].
FileSystemException notADirectory(String path) {
return _fsException(path, 'Not a directory', ErrorCodes.ENOTDIR);
}
/// Returns a 'Is a directory' [FileSystemException].
FileSystemException isADirectory(String path) {
return _fsException(path, 'Is a directory', ErrorCodes.EISDIR);
}
/// Returns a 'Directory not empty' [FileSystemException].
FileSystemException directoryNotEmpty(String path) {
return _fsException(path, 'Directory not empty', ErrorCodes.ENOTEMPTY);
}
/// Returns a 'File exists' [FileSystemException].
FileSystemException fileExists(String path) {
return _fsException(path, 'File exists', ErrorCodes.EEXIST);
}
/// Returns a 'Invalid argument' [FileSystemException].
FileSystemException invalidArgument(String path) {
return _fsException(path, 'Invalid argument', ErrorCodes.EINVAL);
}
/// Returns a 'Too many levels of symbolic links' [FileSystemException].
FileSystemException tooManyLevelsOfSymbolicLinks(String path) {
// TODO(tvolkert): Switch to ErrorCodes.EMLINK
return _fsException(
path, 'Too many levels of symbolic links', ErrorCodes.ELOOP);
}
/// Returns a 'Bad file descriptor' [FileSystemException].
FileSystemException badFileDescriptor(String path) {
return _fsException(path, 'Bad file descriptor', ErrorCodes.EBADF);
}
FileSystemException _fsException(String path, String msg, int errorCode) {
return FileSystemException(msg, path, OSError(msg, errorCode));
}
/// Mixin containing implementations of [Directory] methods that are common
/// to all implementations.
abstract class DirectoryAddOnsMixin implements Directory {
@override
Directory childDirectory(String basename) {
return fileSystem.directory(fileSystem.path.join(path, basename));
}
@override
File childFile(String basename) {
return fileSystem.file(fileSystem.path.join(path, basename));
}
@override
Link childLink(String basename) {
return fileSystem.link(fileSystem.path.join(path, basename));
}
}