Skip to content

Commit 41f6254

Browse files
committed
Round directory size up to the nearest sector size multiple
1 parent 7f13908 commit 41f6254

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

extract-xiso.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

18921892
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 );
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

19081904
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+
}
19121912
}
19131913

19141914
return 0;

0 commit comments

Comments
 (0)