Rev 4337 | Rev 4389 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 4337 | Rev 4348 | ||
|---|---|---|---|
| Line 485... | Line 485... | ||
| 485 | * not use them anyway, so this is rather a sign of our good will. |
485 | * not use them anyway, so this is rather a sign of our good will. |
| 486 | */ |
486 | */ |
| 487 | b = fat_block_get(bs, childp, 0, BLOCK_FLAGS_NONE); |
487 | b = fat_block_get(bs, childp, 0, BLOCK_FLAGS_NONE); |
| 488 | d = (fat_dentry_t *)b->data; |
488 | d = (fat_dentry_t *)b->data; |
| 489 | if (fat_classify_dentry(d) == FAT_DENTRY_LAST || |
489 | if (fat_classify_dentry(d) == FAT_DENTRY_LAST || |
| 490 | strcmp(d->name, FAT_NAME_DOT) == 0) { |
490 | str_cmp(d->name, FAT_NAME_DOT) == 0) { |
| 491 | memset(d, 0, sizeof(fat_dentry_t)); |
491 | memset(d, 0, sizeof(fat_dentry_t)); |
| 492 | strcpy(d->name, FAT_NAME_DOT); |
492 | str_cpy(d->name, 8, FAT_NAME_DOT); |
| 493 | strcpy(d->ext, FAT_EXT_PAD); |
493 | str_cpy(d->ext, 3, FAT_EXT_PAD); |
| 494 | d->attr = FAT_ATTR_SUBDIR; |
494 | d->attr = FAT_ATTR_SUBDIR; |
| 495 | d->firstc = host2uint16_t_le(childp->firstc); |
495 | d->firstc = host2uint16_t_le(childp->firstc); |
| 496 | /* TODO: initialize also the date/time members. */ |
496 | /* TODO: initialize also the date/time members. */ |
| 497 | } |
497 | } |
| 498 | d++; |
498 | d++; |
| 499 | if (fat_classify_dentry(d) == FAT_DENTRY_LAST || |
499 | if (fat_classify_dentry(d) == FAT_DENTRY_LAST || |
| 500 | strcmp(d->name, FAT_NAME_DOT_DOT) == 0) { |
500 | str_cmp(d->name, FAT_NAME_DOT_DOT) == 0) { |
| 501 | memset(d, 0, sizeof(fat_dentry_t)); |
501 | memset(d, 0, sizeof(fat_dentry_t)); |
| 502 | strcpy(d->name, FAT_NAME_DOT_DOT); |
502 | str_cpy(d->name, 8, FAT_NAME_DOT_DOT); |
| 503 | strcpy(d->ext, FAT_EXT_PAD); |
503 | str_cpy(d->ext, 3, FAT_EXT_PAD); |
| 504 | d->attr = FAT_ATTR_SUBDIR; |
504 | d->attr = FAT_ATTR_SUBDIR; |
| 505 | d->firstc = (parentp->firstc == FAT_CLST_ROOT) ? |
505 | d->firstc = (parentp->firstc == FAT_CLST_ROOT) ? |
| 506 | host2uint16_t_le(FAT_CLST_RES0) : |
506 | host2uint16_t_le(FAT_CLST_RES0) : |
| 507 | host2uint16_t_le(parentp->firstc); |
507 | host2uint16_t_le(parentp->firstc); |
| 508 | /* TODO: initialize also the date/time members. */ |
508 | /* TODO: initialize also the date/time members. */ |
| Line 753... | Line 753... | ||
| 753 | fat_bs_t *bs; |
753 | fat_bs_t *bs; |
| 754 | uint16_t bps; |
754 | uint16_t bps; |
| 755 | uint16_t rde; |
755 | uint16_t rde; |
| 756 | int rc; |
756 | int rc; |
| 757 | 757 | ||
| - | 758 | /* accept the mount options */ |
|
| - | 759 | ipc_callid_t callid; |
|
| - | 760 | size_t size; |
|
| - | 761 | if (!ipc_data_write_receive(&callid, &size)) { |
|
| - | 762 | ipc_answer_0(callid, EINVAL); |
|
| - | 763 | ipc_answer_0(rid, EINVAL); |
|
| - | 764 | return; |
|
| - | 765 | } |
|
| - | 766 | char *opts = malloc(size + 1); |
|
| - | 767 | if (!opts) { |
|
| - | 768 | ipc_answer_0(callid, ENOMEM); |
|
| - | 769 | ipc_answer_0(rid, ENOMEM); |
|
| - | 770 | return; |
|
| - | 771 | } |
|
| - | 772 | ipcarg_t retval = ipc_data_write_finalize(callid, opts, size); |
|
| - | 773 | if (retval != EOK) { |
|
| - | 774 | ipc_answer_0(rid, retval); |
|
| - | 775 | free(opts); |
|
| - | 776 | return; |
|
| - | 777 | } |
|
| - | 778 | opts[size] = '\0'; |
|
| - | 779 | ||
| 758 | /* initialize libblock */ |
780 | /* initialize libblock */ |
| 759 | rc = block_init(dev_handle, BS_SIZE); |
781 | rc = block_init(dev_handle, BS_SIZE); |
| 760 | if (rc != EOK) { |
782 | if (rc != EOK) { |
| 761 | ipc_answer_0(rid, rc); |
783 | ipc_answer_0(rid, rc); |
| 762 | return; |
784 | return; |
| Line 935... | Line 957... | ||
| 935 | fat_node_put(nodep); |
957 | fat_node_put(nodep); |
| 936 | ipc_answer_0(callid, ENOENT); |
958 | ipc_answer_0(callid, ENOENT); |
| 937 | ipc_answer_1(rid, ENOENT, 0); |
959 | ipc_answer_1(rid, ENOENT, 0); |
| 938 | return; |
960 | return; |
| 939 | hit: |
961 | hit: |
| 940 | (void) ipc_data_read_finalize(callid, name, strlen(name) + 1); |
962 | (void) ipc_data_read_finalize(callid, name, str_size(name) + 1); |
| 941 | bytes = (pos - spos) + 1; |
963 | bytes = (pos - spos) + 1; |
| 942 | } |
964 | } |
| 943 | 965 | ||
| 944 | fat_node_put(nodep); |
966 | fat_node_put(nodep); |
| 945 | ipc_answer_1(rid, EOK, (ipcarg_t)bytes); |
967 | ipc_answer_1(rid, EOK, (ipcarg_t)bytes); |