Changes in uspace/srv/vfs/vfs_lookup.c [ffa2c8ef:4198f9c3] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/vfs/vfs_lookup.c
rffa2c8ef r4198f9c3 37 37 38 38 #include "vfs.h" 39 #include < macros.h>39 #include <ipc/ipc.h> 40 40 #include <async.h> 41 41 #include <errno.h> 42 #include <str .h>42 #include <string.h> 43 43 #include <stdarg.h> 44 44 #include <bool.h> 45 #include <fibril_sync h.h>45 #include <fibril_sync.h> 46 46 #include <adt/list.h> 47 47 #include <vfs/canonify.h> … … 99 99 entry.len = len; 100 100 101 size_t first; /* the first free index */102 size_t last; /* the last free index */101 off_t first; /* the first free index */ 102 off_t last; /* the last free index */ 103 103 104 104 if (list_empty(&plb_head)) { … … 160 160 ipc_call_t answer; 161 161 int phone = vfs_grab_phone(root->fs_handle); 162 aid_t req = async_send_5(phone, VFS_OUT_LOOKUP, ( sysarg_t) first,163 ( sysarg_t) (first + len - 1) % PLB_SIZE,164 ( sysarg_t) root->devmap_handle, (sysarg_t) lflag, (sysarg_t) index,162 aid_t req = async_send_5(phone, VFS_OUT_LOOKUP, (ipcarg_t) first, 163 (ipcarg_t) (first + len - 1) % PLB_SIZE, 164 (ipcarg_t) root->dev_handle, (ipcarg_t) lflag, (ipcarg_t) index, 165 165 &answer); 166 166 167 sysarg_t rc;167 ipcarg_t rc; 168 168 async_wait_for(req, &rc); 169 vfs_release_phone( root->fs_handle,phone);169 vfs_release_phone(phone); 170 170 171 171 fibril_mutex_lock(&plb_mutex); … … 177 177 memset(plb, 0, cnt2); 178 178 fibril_mutex_unlock(&plb_mutex); 179 180 if ((int) rc < EOK) 181 return (int) rc; 182 183 if (!result) 184 return EOK; 185 186 result->triplet.fs_handle = (fs_handle_t) rc; 187 result->triplet.devmap_handle = (devmap_handle_t) IPC_GET_ARG1(answer); 188 result->triplet.index = (fs_index_t) IPC_GET_ARG2(answer); 189 result->size = 190 (aoff64_t) MERGE_LOUP32(IPC_GET_ARG3(answer), IPC_GET_ARG4(answer)); 191 result->lnkcnt = (unsigned int) IPC_GET_ARG5(answer); 192 193 if (lflag & L_FILE) 194 result->type = VFS_NODE_FILE; 195 else if (lflag & L_DIRECTORY) 196 result->type = VFS_NODE_DIRECTORY; 197 else 198 result->type = VFS_NODE_UNKNOWN; 199 200 return EOK; 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) 187 result->type = VFS_NODE_FILE; 188 else if (lflag & L_DIRECTORY) 189 result->type = VFS_NODE_DIRECTORY; 190 else 191 result->type = VFS_NODE_UNKNOWN; 192 } 193 194 return rc; 201 195 } 202 196 … … 212 206 ipc_call_t answer; 213 207 aid_t req = async_send_2(phone, VFS_OUT_OPEN_NODE, 214 (sysarg_t) result->triplet.devmap_handle, 215 (sysarg_t) result->triplet.index, &answer); 216 217 sysarg_t rc; 208 (ipcarg_t) result->triplet.dev_handle, 209 (ipcarg_t) result->triplet.index, &answer); 210 211 212 ipcarg_t rc; 218 213 async_wait_for(req, &rc); 219 vfs_release_phone( result->triplet.fs_handle,phone);214 vfs_release_phone(phone); 220 215 221 216 if (rc == EOK) { 222 result->size = 223 MERGE_LOUP32(IPC_GET_ARG1(answer), IPC_GET_ARG2(answer)); 224 result->lnkcnt = (unsigned int) IPC_GET_ARG3(answer); 225 if (IPC_GET_ARG4(answer) & L_FILE) 217 result->size = (size_t) IPC_GET_ARG1(answer); 218 result->lnkcnt = (unsigned) IPC_GET_ARG2(answer); 219 if (IPC_GET_ARG3(answer) & L_FILE) 226 220 result->type = VFS_NODE_FILE; 227 else if (IPC_GET_ARG 4(answer) & L_DIRECTORY)221 else if (IPC_GET_ARG3(answer) & L_DIRECTORY) 228 222 result->type = VFS_NODE_DIRECTORY; 229 223 else
Note:
See TracChangeset
for help on using the changeset viewer.