- if(msBlk->swap) {
- squashfs_base_inode_header_1 sinodeb;
-
- if(!squashfs_get_cached_block(s, (char *) &sinodeb, block, offset,
- sizeof(sinodeb), &next_block, &next_offset))
- goto failed_read;
- SQUASHFS_SWAP_BASE_INODE_HEADER_1(&inodeb, &sinodeb, sizeof(sinodeb));
- } else
- if(!squashfs_get_cached_block(s, (char *) &inodeb, block, offset,
- sizeof(inodeb), &next_block, &next_offset))
- goto failed_read;
-
- i->i_nlink = 1;
-
- i->i_mtime.tv_sec = sBlk->mkfs_time;
- i->i_atime.tv_sec = sBlk->mkfs_time;
- i->i_ctime.tv_sec = sBlk->mkfs_time;
-
- if(inodeb.inode_type != SQUASHFS_IPC_TYPE)
- i->i_uid = msBlk->uid[((inodeb.inode_type - 1) / SQUASHFS_TYPES) * 16 + inodeb.uid];
- i->i_ino = SQUASHFS_MK_VFS_INODE(block - sBlk->inode_table_start, offset);
-
- i->i_mode = inodeb.mode;
-
- switch(inodeb.inode_type == SQUASHFS_IPC_TYPE ? SQUASHFS_IPC_TYPE : (inodeb.inode_type - 1) % SQUASHFS_TYPES + 1) {
- case SQUASHFS_FILE_TYPE: {
- squashfs_reg_inode_header_1 inodep;
-
- if(msBlk->swap) {
- squashfs_reg_inode_header_1 sinodep;
-
- if(!squashfs_get_cached_block(s, (char *) &sinodep, block, offset, sizeof(sinodep),
- &next_block, &next_offset))
- goto failed_read;
- SQUASHFS_SWAP_REG_INODE_HEADER_1(&inodep, &sinodep);
- } else
- if(!squashfs_get_cached_block(s, (char *) &inodep, block, offset, sizeof(inodep),
- &next_block, &next_offset))
- goto failed_read;
-
- i->i_size = inodep.file_size;
- i->i_fop = &generic_ro_fops;
- if(sBlk->block_size > 4096)
- i->i_data.a_ops = &squashfs_aops;
- else if(sBlk->block_size == 4096)
- i->i_data.a_ops = &squashfs_aops_4K;
- else
- i->i_data.a_ops = &squashfs_aops_lessthan4K;
- i->i_mode |= S_IFREG;
- i->i_mtime.tv_sec = inodep.mtime;
- i->i_atime.tv_sec = inodep.mtime;
- i->i_ctime.tv_sec = inodep.mtime;
- i->i_blocks = ((i->i_size - 1) >> 9) + 1;
- i->i_blksize = PAGE_CACHE_SIZE;
- SQUASHFS_I(i)->u.s1.fragment_start_block = SQUASHFS_INVALID_BLK;
- SQUASHFS_I(i)->u.s1.fragment_offset = 0;
- SQUASHFS_I(i)->start_block = inodep.start_block;
- SQUASHFS_I(i)->block_list_start = next_block;
- SQUASHFS_I(i)->offset = next_offset;
- TRACE("File inode %x:%x, start_block %x, block_list_start %x, offset %x\n",
- SQUASHFS_INODE_BLK(inode), offset, inodep.start_block, next_block, next_offset);
- break;
- }
- case SQUASHFS_DIR_TYPE: {
- squashfs_dir_inode_header_1 inodep;
-
- if(msBlk->swap) {
- squashfs_dir_inode_header_1 sinodep;
-
- if(!squashfs_get_cached_block(s, (char *) &sinodep, block, offset, sizeof(sinodep),
- &next_block, &next_offset))
- goto failed_read;
- SQUASHFS_SWAP_DIR_INODE_HEADER_1(&inodep, &sinodep);
- } else
- if(!squashfs_get_cached_block(s, (char *) &inodep, block, offset, sizeof(inodep),
- &next_block, &next_offset))
- goto failed_read;