source: mainline/uspace/lib/c/include/ipc/vfs.h@ a35b458

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since a35b458 was a35b458, checked in by Jiří Zárevúcky <zarevucky.jiri@…>, 7 years ago

style: Remove trailing whitespace on _all_ lines, including empty ones, for particular file types.

Command used: tools/srepl '\s\+$' '' -- *.c *.h *.py *.sh *.s *.S *.ag

Currently, whitespace on empty lines is very inconsistent.
There are two basic choices: Either remove the whitespace, or keep empty lines
indented to the level of surrounding code. The former is AFAICT more common,
and also much easier to do automatically.

Alternatively, we could write script for automatic indentation, and use that
instead. However, if such a script exists, it's possible to use the indented
style locally, by having the editor apply relevant conversions on load/save,
without affecting remote repository. IMO, it makes more sense to adopt
the simpler rule.

  • Property mode set to 100644
File size: 4.7 KB
Line 
1/*
2 * Copyright (c) 2009 Martin Decky
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup libcipc
30 * @{
31 */
32/** @file
33 */
34
35#ifndef LIBC_IPC_VFS_H_
36#define LIBC_IPC_VFS_H_
37
38#include <ipc/common.h>
39#include <stdint.h>
40#include <stdbool.h>
41
42#define FS_NAME_MAXLEN 20
43#define FS_LABEL_MAXLEN 256
44#define FS_VUID_MAXLEN 128
45#define MAX_PATH_LEN (32 * 1024)
46#define MAX_MNTOPTS_LEN 256
47#define PLB_SIZE (2 * MAX_PATH_LEN)
48
49/* Basic types. */
50typedef int16_t fs_handle_t;
51typedef uint32_t fs_index_t;
52
53/**
54 * A structure like this is passed to VFS by each individual FS upon its
55 * registration. It assosiates a human-readable identifier with each
56 * registered FS.
57 */
58typedef struct {
59 /** Unique identifier of the fs. */
60 char name[FS_NAME_MAXLEN + 1];
61 unsigned int instance;
62 bool concurrent_read_write;
63 bool write_retains_size;
64} vfs_info_t;
65
66/** Data returned by filesystem probe regarding a specific volume. */
67typedef struct {
68 char label[FS_LABEL_MAXLEN + 1];
69 char vuid[FS_VUID_MAXLEN + 1];
70} vfs_fs_probe_info_t;
71
72typedef enum {
73 VFS_IN_CLONE = IPC_FIRST_USER_METHOD,
74 VFS_IN_FSPROBE,
75 VFS_IN_FSTYPES,
76 VFS_IN_MOUNT,
77 VFS_IN_OPEN,
78 VFS_IN_PUT,
79 VFS_IN_READ,
80 VFS_IN_REGISTER,
81 VFS_IN_RENAME,
82 VFS_IN_RESIZE,
83 VFS_IN_STAT,
84 VFS_IN_STATFS,
85 VFS_IN_SYNC,
86 VFS_IN_UNLINK,
87 VFS_IN_UNMOUNT,
88 VFS_IN_WAIT_HANDLE,
89 VFS_IN_WALK,
90 VFS_IN_WRITE,
91} vfs_in_request_t;
92
93typedef enum {
94 VFS_OUT_CLOSE = IPC_FIRST_USER_METHOD,
95 VFS_OUT_DESTROY,
96 VFS_OUT_FSPROBE,
97 VFS_OUT_IS_EMPTY,
98 VFS_OUT_LINK,
99 VFS_OUT_LOOKUP,
100 VFS_OUT_MOUNTED,
101 VFS_OUT_OPEN_NODE,
102 VFS_OUT_READ,
103 VFS_OUT_STAT,
104 VFS_OUT_STATFS,
105 VFS_OUT_SYNC,
106 VFS_OUT_TRUNCATE,
107 VFS_OUT_UNMOUNTED,
108 VFS_OUT_WRITE,
109 VFS_OUT_LAST
110} vfs_out_request_t;
111
112/*
113 * Lookup flags.
114 */
115
116/**
117 * No lookup flags used.
118 */
119#define L_NONE 0
120
121/**
122 * Lookup will succeed only if the object is a regular file. If L_CREATE is
123 * specified, an empty file will be created. This flag is mutually exclusive
124 * with L_DIRECTORY.
125 */
126#define L_FILE 1
127
128/**
129 * Lookup will succeed only if the object is a directory. If L_CREATE is
130 * specified, an empty directory will be created. This flag is mutually
131 * exclusive with L_FILE.
132 */
133#define L_DIRECTORY 2
134
135/**
136 * Lookup will not cross any mount points.
137 * If the lookup would have to cross a mount point, it returns EXDEV instead.
138 */
139#define L_DISABLE_MOUNTS 4
140
141/**
142 * Lookup will succeed only if the object is a mount point. The flag is mutually
143 * exclusive with L_FILE.
144 */
145#define L_MP 8
146
147
148/**
149 * When used with L_CREATE, L_EXCLUSIVE will cause the lookup to fail if the
150 * object already exists. L_EXCLUSIVE is implied when L_DIRECTORY is used.
151 */
152#define L_EXCLUSIVE 16
153
154/**
155 * L_CREATE is used for creating both regular files and directories.
156 */
157#define L_CREATE 32
158
159/**
160 * L_UNLINK is used to remove leaves from the file system namespace. This flag
161 * cannot be passed directly by the client, but will be set by VFS during
162 * VFS_UNLINK.
163 */
164#define L_UNLINK 64
165
166/*
167 * Walk flags.
168 */
169enum {
170 WALK_MAY_CREATE = (1 << 0),
171 WALK_MUST_CREATE = (1 << 1),
172
173 WALK_REGULAR = (1 << 2),
174 WALK_DIRECTORY = (1 << 3),
175 WALK_MOUNT_POINT = (1 << 4),
176
177 WALK_ALL_FLAGS = WALK_MAY_CREATE | WALK_MUST_CREATE | WALK_REGULAR |
178 WALK_DIRECTORY | WALK_MOUNT_POINT,
179};
180
181enum {
182 VFS_MOUNT_BLOCKING = 1,
183 VFS_MOUNT_CONNECT_ONLY = 2,
184 VFS_MOUNT_NO_REF = 4,
185};
186
187enum {
188 MODE_READ = 1,
189 MODE_WRITE = 2,
190 MODE_APPEND = 4,
191};
192
193#endif
194
195/** @}
196 */
Note: See TracBrowser for help on using the repository browser.