Rev 4268 | Rev 4306 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 4268 | Rev 4305 | ||
|---|---|---|---|
| Line 397... | Line 397... | ||
| 397 | 397 | ||
| 398 | void tmpfs_mounted(ipc_callid_t rid, ipc_call_t *request) |
398 | void tmpfs_mounted(ipc_callid_t rid, ipc_call_t *request) |
| 399 | { |
399 | { |
| 400 | dev_handle_t dev_handle = (dev_handle_t) IPC_GET_ARG1(*request); |
400 | dev_handle_t dev_handle = (dev_handle_t) IPC_GET_ARG1(*request); |
| 401 | 401 | ||
| - | 402 | /* accept the mount options */ |
|
| - | 403 | ipc_callid_t callid; |
|
| - | 404 | size_t size; |
|
| - | 405 | if (!ipc_data_write_receive(&callid, &size)) { |
|
| - | 406 | ipc_answer_0(callid, EINVAL); |
|
| - | 407 | ipc_answer_0(rid, EINVAL); |
|
| - | 408 | return; |
|
| - | 409 | } |
|
| - | 410 | char *opts = malloc(size + 1); |
|
| - | 411 | if (!opts) { |
|
| - | 412 | ipc_answer_0(callid, ENOMEM); |
|
| - | 413 | ipc_answer_0(rid, ENOMEM); |
|
| - | 414 | return; |
|
| - | 415 | } |
|
| - | 416 | ipcarg_t retval = ipc_data_write_finalize(callid, opts, size); |
|
| - | 417 | if (retval != EOK) { |
|
| - | 418 | ipc_answer_0(rid, retval); |
|
| - | 419 | free(opts); |
|
| - | 420 | return; |
|
| - | 421 | } |
|
| - | 422 | opts[size] = '\0'; |
|
| - | 423 | ||
| 402 | /* Initialize TMPFS. */ |
424 | /* Initialize TMPFS. */ |
| 403 | if (!root && !tmpfs_init()) { |
425 | if (!root && !tmpfs_init()) { |
| 404 | ipc_answer_0(rid, ENOMEM); |
426 | ipc_answer_0(rid, ENOMEM); |
| 405 | return; |
427 | return; |
| 406 | } |
428 | } |
| 407 | 429 | ||
| 408 | if (dev_handle >= 0) { |
430 | if (str_cmp(opts, "restore") == 0) { |
| 409 | if (tmpfs_restore(dev_handle)) |
431 | if (tmpfs_restore(dev_handle)) |
| 410 | ipc_answer_3(rid, EOK, root->index, root->size, |
432 | ipc_answer_3(rid, EOK, root->index, root->size, |
| 411 | root->lnkcnt); |
433 | root->lnkcnt); |
| 412 | else |
434 | else |
| 413 | ipc_answer_0(rid, ELIMIT); |
435 | ipc_answer_0(rid, ELIMIT); |