@@ -1823,6 +1823,7 @@ int write_directory( dir_node_avl *in_avl, int in_xiso, int in_depth ) {
1823
1823
xoff_t pos ;
1824
1824
int err = 0 , pad ;
1825
1825
unsigned short l_offset , r_offset ;
1826
+ unsigned long file_size = in_avl -> file_size + (in_avl -> subdirectory ? (XISO_SECTOR_SIZE - (in_avl -> file_size % XISO_SECTOR_SIZE )) % XISO_SECTOR_SIZE : 0 );
1826
1827
char length = (char ) strlen ( in_avl -> filename ), attributes = in_avl -> subdirectory ? XISO_ATTRIBUTE_DIR : XISO_ATTRIBUTE_ARC , sector [ XISO_SECTOR_SIZE ];
1827
1828
1828
1829
little32 ( in_avl -> file_size );
@@ -1841,7 +1842,7 @@ int write_directory( dir_node_avl *in_avl, int in_xiso, int in_depth ) {
1841
1842
if ( ! err && write ( in_xiso , & l_offset , XISO_TABLE_OFFSET_SIZE ) != XISO_TABLE_OFFSET_SIZE ) write_err ();
1842
1843
if ( ! err && write ( in_xiso , & r_offset , XISO_TABLE_OFFSET_SIZE ) != XISO_TABLE_OFFSET_SIZE ) write_err ();
1843
1844
if ( ! err && write ( in_xiso , & in_avl -> start_sector , XISO_SECTOR_OFFSET_SIZE ) != XISO_SECTOR_OFFSET_SIZE ) write_err ();
1844
- if ( ! err && write ( in_xiso , & in_avl -> file_size , XISO_FILESIZE_SIZE ) != XISO_FILESIZE_SIZE ) write_err ();
1845
+ if ( ! err && write ( in_xiso , & file_size , XISO_FILESIZE_SIZE ) != XISO_FILESIZE_SIZE ) write_err ();
1845
1846
if ( ! err && write ( in_xiso , & attributes , XISO_ATTRIBUTES_SIZE ) != XISO_ATTRIBUTES_SIZE ) write_err ();
1846
1847
if ( ! err && write ( in_xiso , & length , XISO_FILENAME_LENGTH_SIZE ) != XISO_FILENAME_LENGTH_SIZE ) write_err ();
1847
1848
if ( ! err && write ( in_xiso , in_avl -> filename , length ) != length ) write_err ();
@@ -1859,7 +1860,6 @@ int calculate_directory_offsets( dir_node_avl *in_avl, unsigned long *io_current
1859
1860
if ( in_avl -> subdirectory ) {
1860
1861
if (in_avl -> subdirectory == EMPTY_SUBDIRECTORY ) {
1861
1862
in_avl -> start_sector = * io_current_sector ;
1862
- in_avl -> file_size = XISO_SECTOR_SIZE ;
1863
1863
* io_current_sector += 1 ;
1864
1864
}
1865
1865
else {
@@ -1890,12 +1890,8 @@ int write_dir_start_and_file_positions( dir_node_avl *in_avl, wdsafp_context *io
1890
1890
1891
1891
1892
1892
int calculate_total_files_and_bytes ( dir_node_avl * in_avl , void * in_context , int in_depth ) {
1893
- if ( in_avl -> subdirectory ) {
1894
- if ( in_avl -> subdirectory != EMPTY_SUBDIRECTORY ) {
1895
- avl_traverse_depth_first ( in_avl -> subdirectory , (traversal_callback ) calculate_total_files_and_bytes , nil , k_prefix , 0 );
1896
- } else {
1897
- s_total_bytes += XISO_SECTOR_SIZE ;
1898
- }
1893
+ if ( in_avl -> subdirectory && in_avl -> subdirectory != EMPTY_SUBDIRECTORY ) {
1894
+ avl_traverse_depth_first ( in_avl -> subdirectory , (traversal_callback ) calculate_total_files_and_bytes , nil , k_prefix , 0 );
1899
1895
} else {
1900
1896
++ s_total_files ;
1901
1897
s_total_bytes += in_avl -> file_size ;
@@ -1906,9 +1902,13 @@ int calculate_total_files_and_bytes( dir_node_avl *in_avl, void *in_context, int
1906
1902
1907
1903
1908
1904
int calculate_directory_requirements ( dir_node_avl * in_avl , void * in_context , int in_depth ) {
1909
- if ( in_avl -> subdirectory && in_avl -> subdirectory != EMPTY_SUBDIRECTORY ) {
1910
- avl_traverse_depth_first ( in_avl -> subdirectory , (traversal_callback ) calculate_directory_size , & in_avl -> file_size , k_prefix , 0 );
1911
- avl_traverse_depth_first ( in_avl -> subdirectory , (traversal_callback ) calculate_directory_requirements , in_context , k_prefix , 0 );
1905
+ if ( in_avl -> subdirectory ) {
1906
+ if (in_avl -> subdirectory != EMPTY_SUBDIRECTORY ) {
1907
+ avl_traverse_depth_first (in_avl -> subdirectory , (traversal_callback )calculate_directory_size , & in_avl -> file_size , k_prefix , 0 );
1908
+ avl_traverse_depth_first (in_avl -> subdirectory , (traversal_callback )calculate_directory_requirements , in_context , k_prefix , 0 );
1909
+ } else {
1910
+ in_avl -> file_size = XISO_SECTOR_SIZE ;
1911
+ }
1912
1912
}
1913
1913
1914
1914
return 0 ;
0 commit comments