Changeset 155f792 in mainline for uspace/srv/fs/minixfs/mfs_inode.c


Ignore:
Timestamp:
2011-03-20T11:30:25Z (13 years ago)
Author:
Maurizio Lombardi <m.lombardi85@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
6adba0a8
Parents:
930baca
Message:

Use a generic minixfs inode in core to avoid code duplication

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/fs/minixfs/mfs_inode.c

    r930baca r155f792  
    11#include <stdlib.h>
    22#include <assert.h>
     3#include <errno.h>
    34#include <mem.h>
    45#include "mfs.h"
    56#include "mfs_utils.h"
    67
    7 struct mfs_inode *mfs_read_inode_raw(const struct mfs_instance *instance,
     8struct mfs_ino_info *mfs_read_inode_raw(const struct mfs_instance *instance,
    89                                        uint16_t inum)
    910{
    10         struct mfs_inode *ino;
     11        struct mfs_inode *ino = NULL;
     12        struct mfs_ino_info *ino_i = NULL;
    1113        struct mfs_sb_info *sbi;
    1214        block_t *b;
     
    1618        const size_t ino_size = sizeof(struct mfs_inode);
    1719
     20        ino_i = (struct mfs_ino_info *) malloc(sizeof(struct mfs_ino_info));
    1821        ino = (struct mfs_inode *) malloc(ino_size);
    1922
    20         if (!ino)
    21                 return NULL;
     23        if (!ino || !ino_i)
     24                goto out_err;
    2225
    2326        sbi = instance->sbi;
     
    2629        const int itable_off = 2 + sbi->ibmap_blocks + sbi->zbmap_blocks;
    2730
    28         block_get(&b, instance->handle, itable_off + inum / V1_INODES_PER_BLOCK,
    29                         BLOCK_FLAGS_NONE);
     31        if (block_get(&b, instance->handle, itable_off + inum / V1_INODES_PER_BLOCK,
     32                        BLOCK_FLAGS_NONE) != EOK)
     33                goto out_err;
    3034
    3135        memcpy(ino, ((uint8_t *) b->data) + ino_off * ino_size, ino_size);
    3236
    33         ino->i_mode = conv16(sbi->native, ino->i_mode);
    34         ino->i_uid = conv16(sbi->native, ino->i_uid);
    35         ino->i_size = conv32(sbi->native, ino->i_size);
    36         ino->i_mtime = conv32(sbi->native, ino->i_mtime);
     37        ino_i->i_mode = conv16(sbi->native, ino->i_mode);
     38        ino_i->i_uid = conv16(sbi->native, ino->i_uid);
     39        ino_i->i_size = conv32(sbi->native, ino->i_size);
     40        ino_i->i_mtime = conv32(sbi->native, ino->i_mtime);
    3741
    3842        for (i = 0; i < V1_NR_DIRECT_ZONES; ++i)
    39                 ino->i_dzone[i] = conv16(sbi->native, ino->i_dzone[i]);
     43                ino_i->i_dzone[i] = conv16(sbi->native, ino->i_dzone[i]);
    4044
    4145        for (i = 0; i < V1_NR_INDIRECT_ZONES; ++i)
    42                 ino->i_izone[i] = conv16(sbi->native, ino->i_izone[i]);
     46                ino_i->i_izone[i] = conv16(sbi->native, ino->i_izone[i]);
    4347
    4448        block_put(b);
    4549
    46         return ino;
     50        free(ino);
     51        return ino_i;
     52
     53out_err:
     54        if (ino)
     55                free(ino);
     56        if (ino_i)
     57                free(ino_i);
     58        return NULL;
    4759}
    4860
    49 struct mfs2_inode *mfs2_read_inode_raw(const struct mfs_instance *instance,
     61struct mfs_ino_info *mfs2_read_inode_raw(const struct mfs_instance *instance,
    5062                                        uint32_t inum)
    5163{
    52         struct mfs2_inode *ino;
     64        struct mfs2_inode *ino = NULL;
     65        struct mfs_ino_info *ino_i = NULL;
    5366        struct mfs_sb_info *sbi;
    5467        block_t *b;
     
    5871
    5972        ino = (struct mfs2_inode *) malloc(ino_size);
     73        ino_i = (struct mfs_ino_info *) malloc(sizeof(struct mfs_ino_info));
    6074
    61         if (!ino)
    62                 return NULL;
     75        if (!ino || !ino_i)
     76                goto out_err;
    6377
    6478        sbi = instance->sbi;
     
    6882        const int ino_off = inum % V3_INODES_PER_BLOCK(sbi->block_size);
    6983
    70         block_get(&b, instance->handle,
     84        if (block_get(&b, instance->handle,
    7185                itable_off + inum / V3_INODES_PER_BLOCK(sbi->block_size),
    72                 BLOCK_FLAGS_NONE);
     86                        BLOCK_FLAGS_NONE) != EOK)
     87                goto out_err;
    7388
    7489        memcpy(ino, ((uint8_t *)b->data) + ino_off * ino_size, ino_size);
    7590
    76         ino->i_mode = conv16(sbi->native, ino->i_mode);
    77         ino->i_nlinks = conv16(sbi->native, ino->i_nlinks);
    78         ino->i_uid = conv16(sbi->native, ino->i_uid);
    79         ino->i_gid = conv16(sbi->native, ino->i_gid);
    80         ino->i_size = conv32(sbi->native, ino->i_size);
    81         ino->i_atime = conv32(sbi->native, ino->i_atime);
    82         ino->i_mtime = conv32(sbi->native, ino->i_mtime);
    83         ino->i_ctime = conv32(sbi->native, ino->i_ctime);
     91        ino_i->i_mode = conv16(sbi->native, ino->i_mode);
     92        ino_i->i_nlinks = conv16(sbi->native, ino->i_nlinks);
     93        ino_i->i_uid = conv16(sbi->native, ino->i_uid);
     94        ino_i->i_gid = conv16(sbi->native, ino->i_gid);
     95        ino_i->i_size = conv32(sbi->native, ino->i_size);
     96        ino_i->i_atime = conv32(sbi->native, ino->i_atime);
     97        ino_i->i_mtime = conv32(sbi->native, ino->i_mtime);
     98        ino_i->i_ctime = conv32(sbi->native, ino->i_ctime);
    8499
    85100        for (i = 0; i < V2_NR_DIRECT_ZONES; ++i)
    86                 ino->i_dzone[i] = conv32(sbi->native, ino->i_dzone[i]);
     101                ino_i->i_dzone[i] = conv32(sbi->native, ino->i_dzone[i]);
    87102
    88103        for (i = 0; i < V2_NR_INDIRECT_ZONES; ++i)
    89                 ino->i_izone[i] = conv32(sbi->native, ino->i_izone[i]);
     104                ino_i->i_izone[i] = conv32(sbi->native, ino->i_izone[i]);
    90105
    91106        block_put(b);
    92107
    93         return ino;
     108        free(ino);
     109        return ino_i;
     110
     111out_err:
     112        if (ino)
     113                free(ino);
     114        if (ino_i)
     115                free(ino_i);
     116        return NULL;
    94117}
    95118
Note: See TracChangeset for help on using the changeset viewer.