Rev 2698 | Rev 2707 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2698 | Rev 2700 | ||
|---|---|---|---|
| Line 53... | Line 53... | ||
| 53 | 53 | ||
| 54 | /** Perform a path lookup. |
54 | /** Perform a path lookup. |
| 55 | * |
55 | * |
| 56 | * @param path Path to be resolved; it needn't be an ASCIIZ string. |
56 | * @param path Path to be resolved; it needn't be an ASCIIZ string. |
| 57 | * @param len Number of path characters pointed by path. |
57 | * @param len Number of path characters pointed by path. |
| - | 58 | * @param lflag Flags to be used during lookup. |
|
| 58 | * @param result Empty structure where the lookup result will be stored. |
59 | * @param result Empty structure where the lookup result will be stored. |
| 59 | * @param altroot If non-empty, will be used instead of rootfs as the root |
60 | * @param altroot If non-empty, will be used instead of rootfs as the root |
| 60 | * of the whole VFS tree. |
61 | * of the whole VFS tree. |
| 61 | * |
62 | * |
| 62 | * @return EOK on success or an error code from errno.h. |
63 | * @return EOK on success or an error code from errno.h. |
| 63 | */ |
64 | */ |
| 64 | int vfs_lookup_internal(char *path, size_t len, vfs_lookup_res_t *result, |
65 | int vfs_lookup_internal(char *path, size_t len, int lflag, |
| 65 | vfs_pair_t *altroot) |
66 | vfs_lookup_res_t *result, vfs_pair_t *altroot) |
| 66 | { |
67 | { |
| 67 | vfs_pair_t *root; |
68 | vfs_pair_t *root; |
| 68 | 69 | ||
| 69 | if (!len) |
70 | if (!len) |
| 70 | return EINVAL; |
71 | return EINVAL; |
| Line 142... | Line 143... | ||
| 142 | memcpy(&plb[first], path, cnt1); |
143 | memcpy(&plb[first], path, cnt1); |
| 143 | memcpy(plb, &path[cnt1], cnt2); |
144 | memcpy(plb, &path[cnt1], cnt2); |
| 144 | 145 | ||
| 145 | ipc_call_t answer; |
146 | ipc_call_t answer; |
| 146 | int phone = vfs_grab_phone(root->fs_handle); |
147 | int phone = vfs_grab_phone(root->fs_handle); |
| 147 | aid_t req = async_send_3(phone, VFS_LOOKUP, (ipcarg_t) first, |
148 | aid_t req = async_send_4(phone, VFS_LOOKUP, (ipcarg_t) first, |
| 148 | (ipcarg_t) (first + len - 1) % PLB_SIZE, |
149 | (ipcarg_t) (first + len - 1) % PLB_SIZE, |
| 149 | (ipcarg_t) root->dev_handle, &answer); |
150 | (ipcarg_t) root->dev_handle, (ipcarg_t) lflag, &answer); |
| 150 | vfs_release_phone(phone); |
151 | vfs_release_phone(phone); |
| 151 | 152 | ||
| 152 | ipcarg_t rc; |
153 | ipcarg_t rc; |
| 153 | async_wait_for(req, &rc); |
154 | async_wait_for(req, &rc); |
| 154 | 155 | ||