Changes in uspace/srv/vfs/vfs_lookup.c [1e4cada:991f645] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/vfs/vfs_lookup.c
r1e4cada r991f645 38 38 #include "vfs.h" 39 39 #include <ipc/ipc.h> 40 #include <macros.h> 40 41 #include <async.h> 41 42 #include <errno.h> 42 #include <str ing.h>43 #include <str.h> 43 44 #include <stdarg.h> 44 45 #include <bool.h> … … 99 100 entry.len = len; 100 101 101 off_t first; /* the first free index */102 off_t last; /* the last free index */102 size_t first; /* the first free index */ 103 size_t last; /* the last free index */ 103 104 104 105 if (list_empty(&plb_head)) { … … 162 163 aid_t req = async_send_5(phone, VFS_OUT_LOOKUP, (ipcarg_t) first, 163 164 (ipcarg_t) (first + len - 1) % PLB_SIZE, 164 (ipcarg_t) root->dev _handle, (ipcarg_t) lflag, (ipcarg_t) index,165 (ipcarg_t) root->devmap_handle, (ipcarg_t) lflag, (ipcarg_t) index, 165 166 &answer); 166 167 167 168 ipcarg_t rc; 168 169 async_wait_for(req, &rc); 169 vfs_release_phone( phone);170 vfs_release_phone(root->fs_handle, phone); 170 171 171 172 fibril_mutex_lock(&plb_mutex); … … 177 178 memset(plb, 0, cnt2); 178 179 fibril_mutex_unlock(&plb_mutex); 179 180 if ((rc == EOK) && (result)) { 181 result->triplet.fs_handle = (fs_handle_t) IPC_GET_ARG1(answer); 182 result->triplet.dev_handle = (dev_handle_t) IPC_GET_ARG2(answer); 183 result->triplet.index = (fs_index_t) IPC_GET_ARG3(answer); 184 result->size = (size_t) IPC_GET_ARG4(answer); 185 result->lnkcnt = (unsigned) IPC_GET_ARG5(answer); 186 if (lflag & L_FILE) 180 181 if (((int) rc < EOK) || (!result)) 182 return (int) rc; 183 184 result->triplet.fs_handle = (fs_handle_t) rc; 185 result->triplet.devmap_handle = (devmap_handle_t) IPC_GET_ARG1(answer); 186 result->triplet.index = (fs_index_t) IPC_GET_ARG2(answer); 187 result->size = 188 (aoff64_t) MERGE_LOUP32(IPC_GET_ARG3(answer), IPC_GET_ARG4(answer)); 189 result->lnkcnt = (unsigned int) IPC_GET_ARG5(answer); 190 191 if (lflag & L_FILE) 192 result->type = VFS_NODE_FILE; 193 else if (lflag & L_DIRECTORY) 194 result->type = VFS_NODE_DIRECTORY; 195 else 196 result->type = VFS_NODE_UNKNOWN; 197 198 return EOK; 199 } 200 201 /** Perform a node open operation. 202 * 203 * @return EOK on success or an error code from errno.h. 204 * 205 */ 206 int vfs_open_node_internal(vfs_lookup_res_t *result) 207 { 208 int phone = vfs_grab_phone(result->triplet.fs_handle); 209 210 ipc_call_t answer; 211 aid_t req = async_send_2(phone, VFS_OUT_OPEN_NODE, 212 (ipcarg_t) result->triplet.devmap_handle, 213 (ipcarg_t) result->triplet.index, &answer); 214 215 ipcarg_t rc; 216 async_wait_for(req, &rc); 217 vfs_release_phone(result->triplet.fs_handle, phone); 218 219 if (rc == EOK) { 220 result->size = 221 MERGE_LOUP32(IPC_GET_ARG1(answer), IPC_GET_ARG2(answer)); 222 result->lnkcnt = (unsigned int) IPC_GET_ARG3(answer); 223 if (IPC_GET_ARG4(answer) & L_FILE) 187 224 result->type = VFS_NODE_FILE; 188 else if ( lflag& L_DIRECTORY)225 else if (IPC_GET_ARG4(answer) & L_DIRECTORY) 189 226 result->type = VFS_NODE_DIRECTORY; 190 227 else 191 228 result->type = VFS_NODE_UNKNOWN; 192 229 } 193 230 194 231 return rc; 195 232 } 196 233 197 /** Perform a node open operation.198 *199 * @return EOK on success or an error code from errno.h.200 *201 */202 int vfs_open_node_internal(vfs_lookup_res_t *result)203 {204 int phone = vfs_grab_phone(result->triplet.fs_handle);205 206 ipc_call_t answer;207 aid_t req = async_send_2(phone, VFS_OUT_OPEN_NODE,208 (ipcarg_t) result->triplet.dev_handle,209 (ipcarg_t) result->triplet.index, &answer);210 211 ipcarg_t rc;212 async_wait_for(req, &rc);213 vfs_release_phone(phone);214 215 if (rc == EOK) {216 result->size = (size_t) IPC_GET_ARG1(answer);217 result->lnkcnt = (unsigned) IPC_GET_ARG2(answer);218 if (IPC_GET_ARG3(answer) & L_FILE)219 result->type = VFS_NODE_FILE;220 else if (IPC_GET_ARG3(answer) & L_DIRECTORY)221 result->type = VFS_NODE_DIRECTORY;222 else223 result->type = VFS_NODE_UNKNOWN;224 }225 226 return rc;227 }228 229 234 /** 230 235 * @}
Note:
See TracChangeset
for help on using the changeset viewer.