diff --git a/tsk/fs/tsk_xfs.h b/tsk/fs/tsk_xfs.h index da88c2dbad7ea20b95255b5da945ed733d2033fb..5e3cd144d1a1c3a7006ef087f00add9d583dee34 100644 --- a/tsk/fs/tsk_xfs.h +++ b/tsk/fs/tsk_xfs.h @@ -103,8 +103,8 @@ typedef struct { */ typedef struct xfs_sb { - __uint32_t sb_magicnum; - __uint32_t sb_blocksize; + uint32_t sb_magicnum; + uint32_t sb_blocksize; xfs_drfsbno_t sb_dblocks; xfs_drfsbno_t sb_rblocks; xfs_drtbno_t sb_rextents; @@ -118,44 +118,44 @@ typedef struct xfs_sb xfs_agnumber_t sb_agcount; xfs_extlen_t sb_rbmblocks; xfs_extlen_t sb_logblocks; - __uint16_t sb_versionnum; - __uint16_t sb_sectsize; - __uint16_t sb_inodesize; - __uint16_t sb_inopblock; + uint16_t sb_versionnum; + uint16_t sb_sectsize; + uint16_t sb_inodesize; + uint16_t sb_inopblock; char sb_fname[12]; - __uint8_t sb_blocklog; - __uint8_t sb_sectlog; - __uint8_t sb_inodelog; - __uint8_t sb_inopblog; - __uint8_t sb_agblklog; - __uint8_t sb_rextslog; - __uint8_t sb_inprogress; - __uint8_t sb_imax_pct; - __uint64_t sb_icount; - __uint64_t sb_ifree; - __uint64_t sb_fdblocks; - __uint64_t sb_frextents; + uint8_t sb_blocklog; + uint8_t sb_sectlog; + uint8_t sb_inodelog; + uint8_t sb_inopblog; + uint8_t sb_agblklog; + uint8_t sb_rextslog; + uint8_t sb_inprogress; + uint8_t sb_imax_pct; + uint64_t sb_icount; + uint64_t sb_ifree; + uint64_t sb_fdblocks; + uint64_t sb_frextents; xfs_ino_t sb_uquotino; xfs_ino_t sb_gquotino; - __uint16_t sb_qflags; - __uint8_t sb_flags; - __uint8_t sb_shared_vn; + uint16_t sb_qflags; + uint8_t sb_flags; + uint8_t sb_shared_vn; xfs_extlen_t sb_inoalignmt; - __uint32_t sb_unit; - __uint32_t sb_width; - __uint8_t sb_dirblklog; - __uint8_t sb_logsectlog; - __uint16_t sb_logsectsize; - __uint32_t sb_logsunit; - __uint32_t sb_features2; - __uint32_t sb_bad_features2; + uint32_t sb_unit; + uint32_t sb_width; + uint8_t sb_dirblklog; + uint8_t sb_logsectlog; + uint16_t sb_logsectsize; + uint32_t sb_logsunit; + uint32_t sb_features2; + uint32_t sb_bad_features2; /* version 5 superblock fields start here */ - __uint32_t sb_features_compat; - __uint32_t sb_features_ro_compat; - __uint32_t sb_features_incompat; - __uint32_t sb_features_log_incompat; - __uint32_t sb_crc; + uint32_t sb_features_compat; + uint32_t sb_features_ro_compat; + uint32_t sb_features_incompat; + uint32_t sb_features_log_incompat; + uint32_t sb_crc; xfs_extlen_t sb_spino_align; xfs_ino_t sb_pquotino; xfs_lsn_t sb_lsn; @@ -164,8 +164,8 @@ typedef struct xfs_sb } xfs_sb_t; -typedef __uint32_t __be32; -typedef __uint16_t __be16; +typedef uint32_t __be32; +typedef uint16_t __be16; #define XFS_BTNUM_AGF 2 @@ -186,15 +186,16 @@ typedef struct xfs_agf { __be32 agf_btreeblks; } xfs_agf_t; + +#define XFS_AGFL_SIZE 36 + typedef struct xfs_agfl { __be32 agfl_magicnum; __be32 agfl_seqno; uuid_t agfl_uuid; uint64_t agfl_lsn; __be32 agfl_crc; -} __attribute__((__packed__)) xfs_agfl_t; - -// todo: assert sizeof(xfs_agfl) == 36 +} xfs_agfl_t; typedef struct xfs_btree_sblock { __be32 bb_magic; @@ -337,20 +338,20 @@ typedef struct xfs_bmbt_key { // From linux/v2.6.28/source/fs/xfs/xfs_bmap_btree.h typedef struct xfs_bmbt_rec_32 { - __uint32_t l0, l1, l2, l3; + uint32_t l0, l1, l2, l3; } xfs_bmbt_rec_32_t; typedef struct xfs_bmbt_rec_64 { uint64_t l0, l1; } xfs_bmbt_rec_64_t; -typedef __uint64_t xfs_bmbt_rec_base_t; /* use this for casts */ +typedef uint64_t xfs_bmbt_rec_base_t; /* use this for casts */ typedef xfs_bmbt_rec_64_t xfs_bmbt_rec_t, xfs_bmdr_rec_t; // from http://www.dubeiko.com/development/FileSystems/XFS/xfs_filesystem_structure.pdf -typedef struct { __uint8_t i[8]; } xfs_dir2_ino8_t; -typedef struct { __uint8_t i[4]; } xfs_dir2_ino4_t; +typedef struct { uint8_t i[8]; } xfs_dir2_ino8_t; +typedef struct { uint8_t i[4]; } xfs_dir2_ino4_t; typedef union { xfs_dir2_ino8_t i8; xfs_dir2_ino4_t i4; @@ -395,15 +396,15 @@ typedef xfs_fsblock_t xfs_bmbt_ptr_t, xfs_bmdr_ptr_t; typedef struct xfs_dir2_sf_entry { - __uint8_t namelen; + uint8_t namelen; xfs_dir2_sf_off_t offset; - __uint8_t name[1]; + uint8_t name[1]; xfs_dir2_inou_t inumber; } xfs_dir2_sf_entry_t; typedef struct xfs_dir2_sf_hdr { - __uint8_t count; - __uint8_t i8count; + uint8_t count; + uint8_t i8count; xfs_dir2_inou_t parent; } xfs_dir2_sf_hdr_t; typedef struct xfs_dir2_sf { @@ -412,7 +413,7 @@ typedef struct xfs_dir2_sf { } xfs_dir2_sf_t; -typedef __int64_t xfs_fsize_t; +typedef int64_t xfs_fsize_t; typedef int16_t xfs_aextnum_t; /* # extents in an attribute fork */ typedef struct xfs_btree_sblock xfs_inobt_block_t; @@ -430,8 +431,8 @@ typedef __be32 xfs_inobt_ptr_t; typedef struct xfs_timestamp { - __int32_t t_sec; - __int32_t t_nsec; + int32_t t_sec; + int32_t t_nsec; } xfs_timestamp_t; typedef enum xfs_dinode_fmt { @@ -444,18 +445,18 @@ typedef enum xfs_dinode_fmt { } xfs_dinode_fmt_t; typedef struct xfs_dinode_core { - __uint16_t di_magic; - __uint16_t di_mode; - __int8_t di_version; - __int8_t di_format; - __uint16_t di_onlink; - __uint32_t di_uid; - __uint32_t di_gid; - __uint32_t di_nlink; - __uint16_t di_projid; - __uint16_t di_projid_hi; - __uint8_t di_pad[6]; - __uint16_t di_flushiter; + uint16_t di_magic; + uint16_t di_mode; + int8_t di_version; + int8_t di_format; + uint16_t di_onlink; + uint32_t di_uid; + uint32_t di_gid; + uint32_t di_nlink; + uint16_t di_projid; + uint16_t di_projid_hi; + uint8_t di_pad[6]; + uint16_t di_flushiter; xfs_timestamp_t di_atime; xfs_timestamp_t di_mtime; xfs_timestamp_t di_ctime; @@ -464,12 +465,12 @@ typedef struct xfs_dinode_core { xfs_extlen_t di_extsize; xfs_extnum_t di_nextents; xfs_aextnum_t di_anextents; - __uint8_t di_forkoff; - __int8_t di_aformat; - __uint32_t di_dmevmask; - __uint16_t di_dmstate; - __uint16_t di_flags; - __uint32_t di_gen; + uint8_t di_forkoff; + int8_t di_aformat; + uint32_t di_dmevmask; + uint16_t di_dmstate; + uint16_t di_flags; + uint32_t di_gen; } xfs_dinode_core_t; typedef struct xfs_attr_shortform { @@ -478,10 +479,10 @@ typedef struct xfs_attr_shortform { uint8_t count; } hdr; struct xfs_attr_sf_entry { - __uint8_t namelen; - __uint8_t valuelen; - __uint8_t flags; - __uint8_t nameval[1]; + uint8_t namelen; + uint8_t valuelen; + uint8_t flags; + uint8_t nameval[1]; } list[1]; } xfs_attr_shortform_t; @@ -489,7 +490,7 @@ typedef struct xfs_dinode { xfs_dinode_core_t di_core; - __uint32_t di_next_unlinked;/* agi unlinked list ptr */ + uint32_t di_next_unlinked;/* agi unlinked list ptr */ /* version 5 filesystem (inode version 3) fields start here */ uint32_t di_crc; @@ -523,7 +524,7 @@ typedef struct xfs_dinode * Size of the core inode on disk. Version 1 and 2 inodes have * the same size, but version 3 has grown a few additional fields. */ -static inline uint xfs_dinode_size(int version) +static inline uint8_t xfs_dinode_size(int version) { // The inode’s core is 96 bytes on a V4 filesystem and 176 bytes on a V5 filesystem. It contains information about the // file itself including most stat data information about data and attribute forks after the core within the inode. It uses @@ -537,7 +538,7 @@ static inline uint xfs_dinode_size(int version) return 100; // hardcode for now //sizeof(xfs_dinode_core_t) + sizeof(uint32_t); - // offsetof(struct xfs_dinode, di_next_unlinked) + sizeof(__uint32_t); // hacky + // offsetof(struct xfs_dinode, di_next_unlinked) + sizeof(uint32_t); // hacky //96; } @@ -646,7 +647,7 @@ typedef struct xfs_dir2_data_entry { } xfs_dir2_data_entry_t; typedef struct xfs_dir2_data_unused { - __uint16_t freetag; /* 0xffff */ + uint16_t freetag; /* 0xffff */ xfs_dir2_data_off_t length; xfs_dir2_data_off_t tag; } xfs_dir2_data_unused_t; diff --git a/tsk/fs/xfs.cpp b/tsk/fs/xfs.cpp index 50b17e2bd2689d53552d3bb8013519d6b97fa140..729ebfd9ccaf0614ffc45d5a992e6723e9051466 100644 --- a/tsk/fs/xfs.cpp +++ b/tsk/fs/xfs.cpp @@ -911,17 +911,17 @@ xfs_block_getflags(TSK_FS_INFO * a_fs, TSK_DADDR_T a_addr) len = xfsfs->fs->sb_sectsize; if (XFS_SB_VERSION_NUM(xfsfs->fs) == 5) { - if(xfsfs->fs->sb_sectsize < sizeof(xfs_agfl)) + if(xfsfs->fs->sb_sectsize < XFS_AGFL_SIZE) { // free other structures - tsk_error_set_errstr2("xfs_block_getflags: sb_sectsize = %" PRId64 " < sizeof(xfs_agfl) = %" PRId64 "", xfsfs->fs->sb_sectsize, sizeof(xfs_agfl)); + tsk_error_set_errstr2("xfs_block_getflags: sb_sectsize = %" PRId64 " < XFS_AGFL_SIZE = %" PRId64 "", xfsfs->fs->sb_sectsize, XFS_AGFL_SIZE); free(agf); free(agfl); return (TSK_FS_BLOCK_FLAG_ENUM) NULL; } - offset += sizeof(xfs_agfl); - len -= sizeof(xfs_agfl); + offset += XFS_AGFL_SIZE; + len -= XFS_AGFL_SIZE; } agfl_cur_len = len; @@ -2002,7 +2002,7 @@ visit_btree_node(TSK_FS_INFO *a_fs, TSK_FS_DIR *fs_dir, TSK_FS_META *fs_meta, xf uint64_t rel_blk = (uint64_t) next_node_block & rel_blk_neg; TSK_OFF_T next_node_offset = ((TSK_OFF_T) ag_num * (TSK_OFF_T) xfs->fs->sb_agblocks + rel_blk) * (TSK_OFF_T) xfs->fs_info.block_size; - if (tsk_verbose) { tsk_fprintf(stderr, "visiting next_node (block %" PRId64", offset %"PRId64" \n", next_node_block, next_node_offset); } + if (tsk_verbose) { tsk_fprintf(stderr, "visiting next_node (block %" PRId64", offset %" PRId64 " \n", next_node_block, next_node_offset); } visit_btree_node(a_fs, fs_dir, fs_meta, next_node_offset, dino_buf, fs_name, 0); } diff --git a/win32/libtsk/libtsk.vcxproj b/win32/libtsk/libtsk.vcxproj index 57d33f49365b9f82b9c2af01cd2c480868502b2d..fc68b5c68978c48f4828f85062608c30bf26477a 100755 --- a/win32/libtsk/libtsk.vcxproj +++ b/win32/libtsk/libtsk.vcxproj @@ -440,6 +440,7 @@ xcopy /E /Y "$(VCInstallDir)\redist\MSVC\$(VCToolsRedistVersion)\$(PlatformTarge <ClCompile Include="..\..\tsk\fs\walk_cpp.cpp" /> <ClCompile Include="..\..\tsk\fs\yaffs.cpp" /> <ClCompile Include="..\..\tsk\fs\logical_fs.cpp" /> + <ClCompile Include="..\..\tsk\fs\xfs.cpp" /> <ClCompile Include="..\..\tsk\auto\auto.cpp" /> <ClCompile Include="..\..\tsk\auto\auto_db.cpp" /> <ClCompile Include="..\..\tsk\auto\case_db.cpp" /> @@ -558,4 +559,4 @@ xcopy /E /Y "$(VCInstallDir)\redist\MSVC\$(VCToolsRedistVersion)\$(PlatformTarge <Error Condition="!Exists('..\packages\zlib_native.1.2.11\build\native\zlib_native.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\zlib_native.1.2.11\build\native\zlib_native.targets'))" /> <Error Condition="!Exists('..\packages\openssl-vc142.1.1.0\build\native\openssl-vc142.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\openssl-vc142.1.1.0\build\native\openssl-vc142.targets'))" /> </Target> -</Project> \ No newline at end of file +</Project> diff --git a/win32/libtsk/libtsk.vcxproj.filters b/win32/libtsk/libtsk.vcxproj.filters index 98cae96115f2417cbd0ad15f05c6d9db8bc03348..0db92a44fef9583ea71e56b5b924e0ef714a3cce 100755 --- a/win32/libtsk/libtsk.vcxproj.filters +++ b/win32/libtsk/libtsk.vcxproj.filters @@ -378,6 +378,7 @@ <ClCompile Include="..\..\tsk\img\unsupported_types.c"> <Filter>img</Filter> </ClCompile> + <ClCompile Include="..\..\tsk\fs\xfs.cpp" /> </ItemGroup> <ItemGroup> <ClInclude Include="..\..\tsk\vs\tsk_bsd.h"> @@ -568,4 +569,4 @@ <ItemGroup> <None Include="packages.config" /> </ItemGroup> -</Project> \ No newline at end of file +</Project>