Subversion Repositories HelenOS

Rev

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
 */