@@ -1671,6 +1671,7 @@ int extract_file( int in_xiso, dir_node *in_file, modes in_mode , char* path) {
1671
1671
} while (i < in_file -> file_size && read_size > 0 );
1672
1672
if (!err && i < in_file -> file_size ) {
1673
1673
exiso_log ("\nWARNING: File %s is truncated. Reported size: %u bytes, read size: %u bytes!" , in_file -> filename , in_file -> file_size , i );
1674
+ in_file -> file_size = i ;
1674
1675
}
1675
1676
}
1676
1677
if (in_mode == k_extract ) close (out );
@@ -1717,15 +1718,18 @@ int write_tree( dir_node_avl *in_avl, write_tree_context *in_context, int in_dep
1717
1718
if ( in_context -> from == -1 ) {
1718
1719
if ( chdir ( in_avl -> filename ) == -1 ) chdir_err ( in_avl -> filename );
1719
1720
}
1720
- if ( ! err && lseek ( in_context -> xiso , (xoff_t ) in_avl -> start_sector * XISO_SECTOR_SIZE , SEEK_SET ) == -1 ) seek_err ();
1721
- if ( ! err ) err = avl_traverse_depth_first ( in_avl -> subdirectory , (traversal_callback ) write_directory , (void * ) in_context -> xiso , k_prefix , 0 );
1722
- if ( ! err && ( pos = lseek ( in_context -> xiso , 0 , SEEK_CUR ) ) == -1 ) seek_err ();
1723
- if ( ! err && ( pad = (int ) (( XISO_SECTOR_SIZE - ( pos % XISO_SECTOR_SIZE ) ) % XISO_SECTOR_SIZE ) ) ) {
1724
- memset ( sector , XISO_PAD_BYTE , pad );
1725
- if ( write ( in_context -> xiso , sector , pad ) != pad ) write_err ();
1726
- }
1721
+
1727
1722
if ( ! err ) err = avl_traverse_depth_first ( in_avl -> subdirectory , (traversal_callback ) write_file , & context , k_prefix , 0 );
1728
1723
if ( ! err ) err = avl_traverse_depth_first ( in_avl -> subdirectory , (traversal_callback ) write_tree , & context , k_prefix , 0 );
1724
+
1725
+ if (!err && lseek (in_context -> xiso , (xoff_t )in_avl -> start_sector * XISO_SECTOR_SIZE , SEEK_SET ) == -1 ) seek_err ();
1726
+ if (!err ) err = avl_traverse_depth_first (in_avl -> subdirectory , (traversal_callback )write_directory , (void * )in_context -> xiso , k_prefix , 0 );
1727
+ if (!err && (pos = lseek (in_context -> xiso , 0 , SEEK_CUR )) == -1 ) seek_err ();
1728
+ if (!err && (pad = (int )((XISO_SECTOR_SIZE - (pos % XISO_SECTOR_SIZE )) % XISO_SECTOR_SIZE ))) {
1729
+ memset (sector , XISO_PAD_BYTE , pad );
1730
+ if (write (in_context -> xiso , sector , pad ) != pad ) write_err ();
1731
+ }
1732
+
1729
1733
if ( ! err && in_context -> from == -1 ) {
1730
1734
if ( chdir ( ".." ) == -1 ) chdir_err ( ".." );
1731
1735
}
@@ -1805,7 +1809,8 @@ int write_file( dir_node_avl *in_avl, write_tree_context *in_context, int in_dep
1805
1809
}
1806
1810
}
1807
1811
} while (bytes );
1808
- i = in_avl -> file_size - bytes ;
1812
+ i = in_avl -> file_size ;
1813
+ in_avl -> file_size -= bytes ;
1809
1814
1810
1815
if (!err && (bytes = (XISO_SECTOR_SIZE - (in_avl -> file_size % XISO_SECTOR_SIZE )) % XISO_SECTOR_SIZE )) {
1811
1816
memset (buf , XISO_PAD_BYTE , bytes );
@@ -1814,7 +1819,7 @@ int write_file( dir_node_avl *in_avl, write_tree_context *in_context, int in_dep
1814
1819
exiso_log (err ? "failed\n" : "[OK]\n" );
1815
1820
1816
1821
if (!err && i != in_avl -> file_size ) {
1817
- exiso_log ("WARNING: File %s is truncated. Reported size: %u bytes, wrote size: %u bytes!\n" , in_avl -> filename , in_avl -> file_size , i );
1822
+ exiso_log ("WARNING: File %s is truncated. Reported size: %u bytes, wrote size: %u bytes!\n" , in_avl -> filename , i , in_avl -> file_size );
1818
1823
}
1819
1824
1820
1825
if (!err ) {
0 commit comments