Changeset ec01adf in mainline
- Timestamp:
- 2007-11-03T17:16:47Z (17 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 3e56ab9
- Parents:
- 828d215
- Location:
- uspace/srv/vfs
- Files:
-
- 1 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/vfs/Makefile
r828d215 rec01adf 43 43 SOURCES = \ 44 44 vfs.c \ 45 vfs_node.c \ 45 46 vfs_register.c \ 46 47 vfs_lookup.c \ -
uspace/srv/vfs/vfs.h
r828d215 rec01adf 173 173 174 174 extern int vfs_lookup_internal(char *, size_t, vfs_triplet_t *, vfs_pair_t *); 175 extern vfs_node_t *vfs_node_get(vfs_triplet_t *); 175 176 176 177 #define MAX_OPEN_FILES 128 -
uspace/srv/vfs/vfs_lookup.c
r828d215 rec01adf 32 32 33 33 /** 34 * @file vfs .c34 * @file vfs_lookup.c 35 35 * @brief VFS_LOOKUP method and Path Lookup Buffer code. 36 36 */ -
uspace/srv/vfs/vfs_mount.c
r828d215 rec01adf 32 32 33 33 /** 34 * @file vfs .c34 * @file vfs_mount.c 35 35 * @brief VFS_MOUNT method. 36 36 */ -
uspace/srv/vfs/vfs_open.c
r828d215 rec01adf 32 32 33 33 /** 34 * @file vfs .c34 * @file vfs_open.c 35 35 * @brief VFS_OPEN method. 36 36 */ … … 67 67 static bool vfs_conn_open_files_init(void) 68 68 { 69 /* 70 * Optimized fast path that will never go to sleep unnecessarily. 71 * The assumption is that once files is non-zero, it will never be zero 72 * again. 73 */ 74 if (files) 75 return true; 76 69 77 futex_down(&files_futex); 70 78 if (!files) { … … 86 94 return; 87 95 } 96 97 /* 98 * The POSIX interface is open(path, flags, mode). 99 * We can receive flags and mode along with the VFS_OPEN call; the path 100 * will need to arrive in another call. 101 */ 102 int flags = IPC_GET_ARG1(*request); 103 int mode = IPC_GET_ARG2(*request); 104 size_t size; 105 106 ipc_callid_t callid; 107 ipc_call_t call; 108 109 if (!ipc_data_receive(&callid, &call, NULL, &size)) { 110 ipc_answer_fast_0(callid, EINVAL); 111 ipc_answer_fast_0(rid, EINVAL); 112 return; 113 } 114 115 /* 116 * Now we are on the verge of accepting the path. 117 * 118 * There is one optimization we could do in the future: copy the path 119 * directly into the PLB using some kind of a callback. 120 */ 121 char *path = malloc(size); 122 123 if (!path) { 124 ipc_answer_fast_0(callid, ENOMEM); 125 ipc_answer_fast_0(rid, ENOMEM); 126 return; 127 } 128 129 int rc; 130 if (rc = ipc_data_deliver(callid, &call, path, size)) { 131 ipc_answer_fast_0(rid, rc); 132 free(path); 133 return; 134 } 135 136 /* 137 * The path is now populated and we can call vfs_lookup_internal(). 138 */ 139 vfs_triplet_t triplet; 140 rc = vfs_lookup_internal(path, size, &triplet, NULL); 141 if (rc) { 142 ipc_answer_fast_0(rid, rc); 143 free(path); 144 return; 145 } 146 147 /* 148 * Path is no longer needed. 149 */ 150 free(path); 151 152 vfs_node_t *node = vfs_node_get(&triplet); 153 // TODO: not finished 88 154 } 89 155 -
uspace/srv/vfs/vfs_register.c
r828d215 rec01adf 32 32 33 33 /** 34 * @file vfs .c34 * @file vfs_register.c 35 35 * @brief VFS_REGISTER method. 36 36 */
Note:
See TracChangeset
for help on using the changeset viewer.