@@ -1671,6 +1671,7 @@ int extract_file( int in_xiso, dir_node *in_file, modes in_mode , char* path) {
16711671 } while (i < in_file -> file_size && read_size > 0 );
16721672 if (!err && i < in_file -> file_size ) {
16731673 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 ;
16741675 }
16751676 }
16761677 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
17171718 if ( in_context -> from == -1 ) {
17181719 if ( chdir ( in_avl -> filename ) == -1 ) chdir_err ( in_avl -> filename );
17191720 }
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+
17271722 if ( ! err ) err = avl_traverse_depth_first ( in_avl -> subdirectory , (traversal_callback ) write_file , & context , k_prefix , 0 );
17281723 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+
17291733 if ( ! err && in_context -> from == -1 ) {
17301734 if ( chdir ( ".." ) == -1 ) chdir_err ( ".." );
17311735 }
@@ -1805,7 +1809,8 @@ int write_file( dir_node_avl *in_avl, write_tree_context *in_context, int in_dep
18051809 }
18061810 }
18071811 } while (bytes );
1808- i = in_avl -> file_size - bytes ;
1812+ i = in_avl -> file_size ;
1813+ in_avl -> file_size -= bytes ;
18091814
18101815 if (!err && (bytes = (XISO_SECTOR_SIZE - (in_avl -> file_size % XISO_SECTOR_SIZE )) % XISO_SECTOR_SIZE )) {
18111816 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
18141819 exiso_log (err ? "failed\n" : "[OK]\n" );
18151820
18161821 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 );
18181823 }
18191824
18201825 if (!err ) {
0 commit comments