Rev 3307 | Rev 3312 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3307 | Rev 3308 | ||
---|---|---|---|
Line 68... | Line 68... | ||
68 | #define FAT_DENTRY_UNUSED 0x00 |
68 | #define FAT_DENTRY_UNUSED 0x00 |
69 | #define FAT_DENTRY_E5_ESC 0x05 |
69 | #define FAT_DENTRY_E5_ESC 0x05 |
70 | #define FAT_DENTRY_DOT 0x2e |
70 | #define FAT_DENTRY_DOT 0x2e |
71 | #define FAT_DENTRY_ERASED 0xe5 |
71 | #define FAT_DENTRY_ERASED 0xe5 |
72 | 72 | ||
- | 73 | #define min(a, b) ((a) < (b) ? (a) : (b)) |
|
- | 74 | ||
73 | static void dentry_name_canonify(fat_dentry_t *d, char *buf) |
75 | static void dentry_name_canonify(fat_dentry_t *d, char *buf) |
74 | { |
76 | { |
75 | int i; |
77 | int i; |
76 | 78 | ||
77 | for (i = 0; i < FAT_NAME_LEN; i++) { |
79 | for (i = 0; i < FAT_NAME_LEN; i++) { |
Line 710... | Line 712... | ||
710 | { |
712 | { |
711 | dev_handle_t dev_handle = (dev_handle_t)IPC_GET_ARG1(*request); |
713 | dev_handle_t dev_handle = (dev_handle_t)IPC_GET_ARG1(*request); |
712 | fs_index_t index = (fs_index_t)IPC_GET_ARG2(*request); |
714 | fs_index_t index = (fs_index_t)IPC_GET_ARG2(*request); |
713 | off_t pos = (off_t)IPC_GET_ARG3(*request); |
715 | off_t pos = (off_t)IPC_GET_ARG3(*request); |
714 | fat_node_t *nodep = (fat_node_t *)fat_node_get(dev_handle, index); |
716 | fat_node_t *nodep = (fat_node_t *)fat_node_get(dev_handle, index); |
- | 717 | uint16_t bps = fat_bps_get(dev_handle); |
|
- | 718 | size_t bytes; |
|
- | 719 | ||
715 | if (!nodep) { |
720 | if (!nodep) { |
716 | ipc_answer_0(rid, ENOENT); |
721 | ipc_answer_0(rid, ENOENT); |
717 | return; |
722 | return; |
718 | } |
723 | } |
719 | 724 | ||
Line 725... | Line 730... | ||
725 | ipc_answer_0(rid, EINVAL); |
730 | ipc_answer_0(rid, EINVAL); |
726 | return; |
731 | return; |
727 | } |
732 | } |
728 | 733 | ||
729 | if (nodep->type == FAT_FILE) { |
734 | if (nodep->type == FAT_FILE) { |
730 | /* TODO */ |
735 | block_t *b; |
- | 736 | ||
731 | fat_node_put(nodep); |
737 | bytes = min(len, bps - pos % bps); |
732 | ipc_answer_0(callid, ENOTSUP); |
738 | b = fat_block_get(nodep, pos / bps); |
733 | ipc_answer_0(rid, ENOTSUP); |
739 | (void) ipc_data_read_finalize(callid, b->data + pos % bps, |
734 | return; |
740 | bytes); |
- | 741 | block_put(b); |
|
735 | } else { |
742 | } else { |
736 | assert(nodep->type == FAT_DIRECTORY); |
743 | assert(nodep->type == FAT_DIRECTORY); |
737 | /* TODO */ |
744 | /* TODO */ |
738 | fat_node_put(nodep); |
745 | fat_node_put(nodep); |
739 | ipc_answer_0(callid, ENOTSUP); |
746 | ipc_answer_0(callid, ENOTSUP); |
740 | ipc_answer_0(rid, ENOTSUP); |
747 | ipc_answer_0(rid, ENOTSUP); |
741 | return; |
748 | return; |
742 | } |
749 | } |
743 | 750 | ||
744 | fat_node_put(nodep); |
751 | fat_node_put(nodep); |
- | 752 | ipc_answer_1(rid, EOK, (ipcarg_t)bytes); |
|
745 | } |
753 | } |
746 | 754 | ||
747 | /** |
755 | /** |
748 | * @} |
756 | * @} |
749 | */ |
757 | */ |