@@ -1823,6 +1823,7 @@ int write_directory( dir_node_avl *in_avl, int in_xiso, int in_depth ) {
18231823 xoff_t pos ;
18241824 int err = 0 , pad ;
18251825 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 );
18261827 char length = (char ) strlen ( in_avl -> filename ), attributes = in_avl -> subdirectory ? XISO_ATTRIBUTE_DIR : XISO_ATTRIBUTE_ARC , sector [ XISO_SECTOR_SIZE ];
18271828
18281829 little32 ( in_avl -> file_size );
@@ -1841,7 +1842,7 @@ int write_directory( dir_node_avl *in_avl, int in_xiso, int in_depth ) {
18411842 if ( ! err && write ( in_xiso , & l_offset , XISO_TABLE_OFFSET_SIZE ) != XISO_TABLE_OFFSET_SIZE ) write_err ();
18421843 if ( ! err && write ( in_xiso , & r_offset , XISO_TABLE_OFFSET_SIZE ) != XISO_TABLE_OFFSET_SIZE ) write_err ();
18431844 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 ();
18451846 if ( ! err && write ( in_xiso , & attributes , XISO_ATTRIBUTES_SIZE ) != XISO_ATTRIBUTES_SIZE ) write_err ();
18461847 if ( ! err && write ( in_xiso , & length , XISO_FILENAME_LENGTH_SIZE ) != XISO_FILENAME_LENGTH_SIZE ) write_err ();
18471848 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
18591860 if ( in_avl -> subdirectory ) {
18601861 if (in_avl -> subdirectory == EMPTY_SUBDIRECTORY ) {
18611862 in_avl -> start_sector = * io_current_sector ;
1862- in_avl -> file_size = XISO_SECTOR_SIZE ;
18631863 * io_current_sector += 1 ;
18641864 }
18651865 else {
@@ -1890,12 +1890,8 @@ int write_dir_start_and_file_positions( dir_node_avl *in_avl, wdsafp_context *io
18901890
18911891
18921892int 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 );
18991895 } else {
19001896 ++ s_total_files ;
19011897 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
19061902
19071903
19081904int 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+ }
19121912 }
19131913
19141914 return 0 ;
0 commit comments