| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| [DartPackage="mojo_services"] |
| module mojo.files; |
| |
| // Error codes used by the file manager. |
| // TODO(vtl): Add more (to, e.g., cover all of errno). |
| enum Error { |
| OK = 0, |
| UNKNOWN, |
| INVALID_ARGUMENT, |
| PERMISSION_DENIED, |
| OUT_OF_RANGE, |
| UNIMPLEMENTED, |
| CLOSED, |
| UNAVAILABLE, |
| INTERNAL, |
| }; |
| |
| // Used to explain the meaning of an offset within a file. |
| enum Whence { |
| // Offset is from current position in the file. |
| FROM_CURRENT = 0, |
| // Offset is relative to the beginning of the file. |
| FROM_START, |
| // Offset is relative to the end of the file. |
| FROM_END, |
| }; |
| |
| // Describes (idealized) wall-clock time, since Unix epoch (i.e., since |
| // "1970-01-01 00:00 UTC", ignoring leap seconds and that UTC as we know it |
| // started in 1972). |
| // TODO(vtl): Should probably be moved out of mojo.files (maybe to mojo.time?). |
| struct Timespec { |
| int64 seconds; |
| int32 nanoseconds; // Always in the interval [0, 10^9). |
| }; |
| |
| // Used for |Touch()| calls. If |now| is set, |timespec| must be null (the time |
| // "now" will be used). Otherwise, |timespec| must not be null. |
| // TODO(vtl): Use a union instead, when that becomes possible. |
| struct TimespecOrNow { |
| bool now; |
| Timespec? timespec; |
| }; |
| |
| // Describes various information about a file or directory (for |Stat()|). Note |
| // that access/modification times may be set arbitrarily (by those with |
| // appropriate capabilities) and may not reflect reality. |
| struct FileInformation { |
| // Type of the file. |
| FileType type; |
| // Size of the file, in bytes. Zero for directories. |
| int64 size; |
| // Last access time, if available/supported. |
| Timespec? atime; |
| // Last modification time, if available/supported. |
| Timespec? mtime; |
| }; |
| |
| // File and directory open flags (at least one of |kOpenFlagRead| and |
| // |kOpenFlagWrite| is required): |
| // Opens the file/directory for reading. |
| const uint32 kOpenFlagRead = 0x1; |
| // Opens the file/directory for writing. |
| const uint32 kOpenFlagWrite = 0x2; |
| // Only meaningful together with |kOpenFlagWrite|: creates the file if |
| // necessary. |
| const uint32 kOpenFlagCreate = 0x4; |
| // Only meaningful together with |kOpenFlagCreate|: requires file/directory to |
| // be created, failing if it already exists. |
| const uint32 kOpenFlagExclusive = 0x8; |
| // Only meaningful for files, together with |kOpenFlagWrite|: writes will always |
| // append to the file. |
| const uint32 kOpenFlagAppend = 0x10; |
| // Only meaningful for files, together with |kOpenFlagWrite|: truncates the |
| // file. |
| const uint32 kOpenFlagTruncate = 0x20; |
| |
| // File types. |
| enum FileType { |
| UNKNOWN = 0, |
| REGULAR_FILE, |
| DIRECTORY, |
| }; |
| |
| // Describes a directory entry (i.e., a single member of a directory). |
| struct DirectoryEntry { |
| FileType type; |
| string name; |
| }; |
| |
| // Deletion flags: |
| // Only delete if the path refers to a file/non-directory (by default, will |
| // delete files and directories). |
| const uint32 kDeleteFlagFileOnly = 0x1; |
| // Only delete if the path refers to a directory. |
| const uint32 kDeleteFlagDirectoryOnly = 0x2; |
| // Recursively delete (neither of the two flags above may be specified). |
| const uint32 kDeleteFlagRecursive = 0x4; |