Rev 4584 | Rev 4587 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4584 | Rev 4585 | ||
---|---|---|---|
Line 36... | Line 36... | ||
36 | #include <vfs/canonify.h> |
36 | #include <vfs/canonify.h> |
37 | #include <stdlib.h> |
37 | #include <stdlib.h> |
38 | #include <unistd.h> |
38 | #include <unistd.h> |
39 | #include <dirent.h> |
39 | #include <dirent.h> |
40 | #include <fcntl.h> |
40 | #include <fcntl.h> |
41 | #include <sys/stat.h> |
- | |
42 | #include <stdio.h> |
41 | #include <stdio.h> |
- | 42 | #include <sys/stat.h> |
|
43 | #include <sys/types.h> |
43 | #include <sys/types.h> |
44 | #include <ipc/ipc.h> |
44 | #include <ipc/ipc.h> |
45 | #include <ipc/services.h> |
45 | #include <ipc/services.h> |
46 | #include <async.h> |
46 | #include <async.h> |
47 | #include <atomic.h> |
47 | #include <atomic.h> |
Line 312... | Line 312... | ||
312 | return (ssize_t) IPC_GET_ARG1(answer); |
312 | return (ssize_t) IPC_GET_ARG1(answer); |
313 | else |
313 | else |
314 | return -1; |
314 | return -1; |
315 | } |
315 | } |
316 | 316 | ||
317 | int fd_phone(int fildes) |
- | |
318 | { |
- | |
319 | futex_down(&vfs_phone_futex); |
- | |
320 | async_serialize_start(); |
- | |
321 | vfs_connect(); |
- | |
322 | - | ||
323 | ipcarg_t device; |
- | |
324 | ipcarg_t rc = async_req_1_1(vfs_phone, VFS_IN_DEVICE, fildes, &device); |
- | |
325 | - | ||
326 | async_serialize_end(); |
- | |
327 | futex_up(&vfs_phone_futex); |
- | |
328 | - | ||
329 | if (rc != EOK) |
- | |
330 | return -1; |
- | |
331 | - | ||
332 | return devmap_device_connect((dev_handle_t) device, 0); |
- | |
333 | } |
- | |
334 | - | ||
335 | int fd_node(int fildes, fdi_node_t *node) |
- | |
336 | { |
- | |
337 | futex_down(&vfs_phone_futex); |
- | |
338 | async_serialize_start(); |
- | |
339 | vfs_connect(); |
- | |
340 | - | ||
341 | ipcarg_t fs_handle; |
- | |
342 | ipcarg_t dev_handle; |
- | |
343 | ipcarg_t index; |
- | |
344 | ipcarg_t rc = async_req_1_3(vfs_phone, VFS_IN_NODE, fildes, &fs_handle, |
- | |
345 | &dev_handle, &index); |
- | |
346 | - | ||
347 | async_serialize_end(); |
- | |
348 | futex_up(&vfs_phone_futex); |
- | |
349 | - | ||
350 | if (rc == EOK) { |
- | |
351 | node->fs_handle = (fs_handle_t) fs_handle; |
- | |
352 | node->dev_handle = (dev_handle_t) dev_handle; |
- | |
353 | node->index = (fs_index_t) index; |
- | |
354 | } |
- | |
355 | - | ||
356 | return rc; |
- | |
357 | } |
- | |
358 | - | ||
359 | int fsync(int fildes) |
317 | int fsync(int fildes) |
360 | { |
318 | { |
361 | futex_down(&vfs_phone_futex); |
319 | futex_down(&vfs_phone_futex); |
362 | async_serialize_start(); |
320 | async_serialize_start(); |
363 | vfs_connect(); |
321 | vfs_connect(); |
Line 403... | Line 361... | ||
403 | async_serialize_end(); |
361 | async_serialize_end(); |
404 | futex_up(&vfs_phone_futex); |
362 | futex_up(&vfs_phone_futex); |
405 | return (int) rc; |
363 | return (int) rc; |
406 | } |
364 | } |
407 | 365 | ||
- | 366 | int fstat(int fildes, struct stat *stat) |
|
- | 367 | { |
|
- | 368 | ipcarg_t rc; |
|
- | 369 | ipc_call_t answer; |
|
- | 370 | aid_t req; |
|
- | 371 | ||
- | 372 | futex_down(&vfs_phone_futex); |
|
- | 373 | async_serialize_start(); |
|
- | 374 | vfs_connect(); |
|
- | 375 | ||
- | 376 | req = async_send_1(vfs_phone, VFS_IN_FSTAT, fildes, NULL); |
|
- | 377 | rc = ipc_data_read_start(vfs_phone, (void *)stat, sizeof(struct stat)); |
|
- | 378 | if (rc != EOK) { |
|
- | 379 | async_wait_for(req, NULL); |
|
- | 380 | async_serialize_end(); |
|
- | 381 | futex_up(&vfs_phone_futex); |
|
- | 382 | return (ssize_t) rc; |
|
- | 383 | } |
|
- | 384 | async_wait_for(req, &rc); |
|
- | 385 | async_serialize_end(); |
|
- | 386 | futex_up(&vfs_phone_futex); |
|
- | 387 | ||
- | 388 | return rc; |
|
- | 389 | } |
|
- | 390 | ||
408 | DIR *opendir(const char *dirname) |
391 | DIR *opendir(const char *dirname) |
409 | { |
392 | { |
410 | DIR *dirp = malloc(sizeof(DIR)); |
393 | DIR *dirp = malloc(sizeof(DIR)); |
411 | if (!dirp) |
394 | if (!dirp) |
412 | return NULL; |
395 | return NULL; |
Line 596... | Line 579... | ||
596 | str_cpy(buf, size, cwd_path); |
579 | str_cpy(buf, size, cwd_path); |
597 | futex_up(&cwd_futex); |
580 | futex_up(&cwd_futex); |
598 | return buf; |
581 | return buf; |
599 | } |
582 | } |
600 | 583 | ||
- | 584 | int fd_phone(int fildes) |
|
- | 585 | { |
|
- | 586 | struct stat stat; |
|
- | 587 | int rc; |
|
- | 588 | ||
- | 589 | rc = fstat(fildes, &stat); |
|
- | 590 | ||
- | 591 | if (!stat.devfs_stat.device) |
|
- | 592 | return -1; |
|
- | 593 | ||
- | 594 | return devmap_device_connect(stat.devfs_stat.device, 0); |
|
- | 595 | } |
|
- | 596 | ||
- | 597 | int fd_node(int fildes, fdi_node_t *node) |
|
- | 598 | { |
|
- | 599 | struct stat stat; |
|
- | 600 | int rc; |
|
- | 601 | ||
- | 602 | rc = fstat(fildes, &stat); |
|
- | 603 | ||
- | 604 | if (rc == EOK) { |
|
- | 605 | node->fs_handle = stat.fs_handle; |
|
- | 606 | node->dev_handle = stat.dev_handle; |
|
- | 607 | node->index = stat.index; |
|
- | 608 | } |
|
- | 609 | ||
- | 610 | return rc; |
|
- | 611 | } |
|
- | 612 | ||
601 | /** @} |
613 | /** @} |
602 | */ |
614 | */ |