@@ -863,19 +863,15 @@ int log_err(const char* in_file, int in_line, const char* in_format, ...) {
863
863
format = (char * )in_format ;
864
864
#endif
865
865
866
- if (s_real_quiet ) {
867
- ret = 0 ;
868
- }
866
+ if (s_real_quiet ) ret = 0 ;
869
867
else if (format ){
870
868
va_start (ap , in_format );
871
869
fprintf (stderr , "\n" );
872
870
ret = vfprintf (stderr , format , ap );
873
871
fprintf (stderr , "\n" );
874
872
va_end (ap );
875
873
}
876
- else {
877
- ret = 1 ;
878
- }
874
+ else ret = 1 ;
879
875
880
876
#if DEBUG
881
877
if (format ) free (format );
@@ -949,7 +945,7 @@ int create_xiso( char *in_root_directory, char *in_output_directory, dir_node_av
949
945
xoff_t pos ;
950
946
dir_node_avl root ;
951
947
FILE_TIME * ft = nil ;
952
- write_tree_context wt_context ;
948
+ write_tree_context wt_context = { 0 } ;
953
949
uint32_t start_sector ;
954
950
int i , n , xiso = -1 , err = 0 ;
955
951
char * cwd = nil , * buf = nil , * iso_name , * xiso_path , * iso_dir ;
@@ -1253,7 +1249,7 @@ int traverse_xiso(int in_xiso, xoff_t in_dir_start, uint16_t entry_offset, uint1
1253
1249
little32 (node -> file_size );
1254
1250
little32 (node -> start_sector );
1255
1251
1256
- if ((node -> filename = (char * )malloc (node -> filename_length + 1 )) == nil ) mem_err ();
1252
+ if ((node -> filename = (char * )malloc (( size_t ) node -> filename_length + 1 )) == nil ) mem_err ();
1257
1253
}
1258
1254
1259
1255
if (!err ) {
@@ -1364,9 +1360,7 @@ int process_node(int in_xiso, dir_node* node, char* in_path, modes in_mode, dir_
1364
1360
if (!err ) {
1365
1361
if (!s_remove_systemupdate || !strstr (in_path , s_systemupdate ))
1366
1362
{
1367
- if (in_mode == k_extract ) {
1368
- err = extract_file (in_xiso , node , in_mode , in_path );
1369
- }
1363
+ if (in_mode == k_extract ) err = extract_file (in_xiso , node , in_mode , in_path );
1370
1364
else {
1371
1365
exiso_log ("\n%s%s (%u bytes)" , in_path , node -> filename , node -> file_size ); flush ();
1372
1366
}
@@ -1710,7 +1704,7 @@ int free_dir_node_avl( void *in_dir_node_avl, void *in_context, long in_depth )
1710
1704
1711
1705
int write_tree ( dir_node_avl * in_avl , write_tree_context * in_context , int in_depth ) {
1712
1706
xoff_t pos ;
1713
- write_tree_context context ;
1707
+ write_tree_context context = { 0 } ;
1714
1708
xoff_t dir_start = (xoff_t )in_avl -> start_sector * XISO_SECTOR_SIZE ;
1715
1709
int err = 0 , pad ;
1716
1710
char sector [XISO_SECTOR_SIZE ];
@@ -1738,7 +1732,8 @@ int write_tree( dir_node_avl *in_avl, write_tree_context *in_context, int in_dep
1738
1732
if (!err && lseek (in_context -> xiso , dir_start , SEEK_SET ) == -1 ) seek_err ();
1739
1733
if (!err ) err = avl_traverse_depth_first (in_avl -> subdirectory , (traversal_callback )write_directory , in_context , k_prefix , 0 );
1740
1734
if (!err && (pos = lseek (in_context -> xiso , 0 , SEEK_CUR )) == -1 ) seek_err ();
1741
- if (!err && (pad = (int )((XISO_SECTOR_SIZE - (pos % XISO_SECTOR_SIZE )) % XISO_SECTOR_SIZE ))) {
1735
+ if (!err ) {
1736
+ pad = (int )((XISO_SECTOR_SIZE - (pos % XISO_SECTOR_SIZE )) % XISO_SECTOR_SIZE );
1742
1737
memset (sector , XISO_PAD_BYTE , pad );
1743
1738
if (write (in_context -> xiso , sector , pad ) != pad ) write_err ();
1744
1739
}
@@ -1762,14 +1757,14 @@ int write_tree( dir_node_avl *in_avl, write_tree_context *in_context, int in_dep
1762
1757
1763
1758
int write_file ( dir_node_avl * in_avl , write_tree_context * in_context , int in_depth ) {
1764
1759
char * buf , * p ;
1765
- uint32_t bytes , n , size ;
1760
+ uint32_t bytes , n , size = max ( XISO_SECTOR_SIZE , READWRITE_BUFFER_SIZE ) ;
1766
1761
int err = 0 , fd = -1 , i ;
1767
1762
size_t len ;
1768
1763
1769
1764
if ( ! in_avl -> subdirectory ) {
1770
1765
if ( lseek ( in_context -> xiso , (xoff_t ) in_avl -> start_sector * XISO_SECTOR_SIZE , SEEK_SET ) == -1 ) seek_err ();
1771
1766
1772
- if ( ! err && ( buf = (char * ) malloc ( ( size = max ( XISO_SECTOR_SIZE , READWRITE_BUFFER_SIZE ) ) + 1 ) ) == nil ) mem_err ();
1767
+ if ( ! err && ( buf = (char * ) malloc ( (size_t ) size + 1 ) ) == nil ) mem_err ();
1773
1768
if ( ! err ) {
1774
1769
if ( in_context -> from == -1 ) {
1775
1770
if ( ( fd = open ( in_avl -> filename , READFLAGS , 0 ) ) == -1 ) open_err ( in_avl -> filename );
@@ -1783,40 +1778,37 @@ int write_file( dir_node_avl *in_avl, write_tree_context *in_context, int in_dep
1783
1778
1784
1779
i = 0 ;
1785
1780
bytes = in_avl -> file_size ;
1781
+ len = strlen (in_avl -> filename );
1786
1782
do {
1787
- if ((int )(n = read (fd , buf + i , min (bytes , size - i ))) < 0 ) {
1783
+ n = read (fd , buf + i , min (bytes , size - i ));
1784
+ if ((signed )n < 0 ) {
1788
1785
read_err ();
1789
1786
break ;
1790
1787
}
1791
- if (n == 0 ) {
1792
- if (i ) {
1793
- if (write (in_context -> xiso , buf , i ) != i ) {
1794
- write_err ();
1795
- break ;
1796
- }
1797
- }
1788
+ else if (n == 0 ) { // End of file
1789
+ if (i && write (in_context -> xiso , buf , i ) != i ) write_err (); // Write remaining 'i' bytes
1798
1790
break ;
1799
1791
}
1800
1792
bytes -= n ;
1801
- if (s_media_enable && ( len = strlen ( in_avl -> filename )) >= 4 && strcasecmp (& in_avl -> filename [len - 4 ], ".xbe" ) == 0 ) {
1793
+ if (s_media_enable && len >= 4 && strcasecmp (& in_avl -> filename [len - 4 ], ".xbe" ) == 0 ) {
1802
1794
for (buf [n += i ] = 0 , p = buf ; (p = boyer_moore_search (p , n - (long )(p - buf ))) != nil ; p += XISO_MEDIA_ENABLE_LENGTH ) p [XISO_MEDIA_ENABLE_BYTE_POS ] = XISO_MEDIA_ENABLE_BYTE ;
1803
1795
if (bytes ) {
1804
1796
i = XISO_MEDIA_ENABLE_LENGTH - 1 ;
1805
- if (write (in_context -> xiso , buf , n - i ) != (int )n - i ) {
1797
+ if (write (in_context -> xiso , buf , n - i ) != (signed )n - i ) {
1806
1798
write_err ();
1807
1799
break ;
1808
1800
}
1809
1801
memcpy (buf , & buf [n - i ], i );
1810
1802
}
1811
1803
else {
1812
- if (write (in_context -> xiso , buf , n + i ) != (int )n + i ) {
1804
+ if (write (in_context -> xiso , buf , n + i ) != (signed )n + i ) {
1813
1805
write_err ();
1814
1806
break ;
1815
1807
}
1816
1808
}
1817
1809
}
1818
1810
else {
1819
- if (write (in_context -> xiso , buf , n + i ) != (int )n + i ) {
1811
+ if (write (in_context -> xiso , buf , n + i ) != (signed )n + i ) {
1820
1812
write_err ();
1821
1813
break ;
1822
1814
}
@@ -1825,9 +1817,12 @@ int write_file( dir_node_avl *in_avl, write_tree_context *in_context, int in_dep
1825
1817
i = in_avl -> file_size ;
1826
1818
in_avl -> file_size -= bytes ;
1827
1819
1828
- if (!err && (bytes = (XISO_SECTOR_SIZE - (in_avl -> file_size % XISO_SECTOR_SIZE )) % XISO_SECTOR_SIZE )) {
1829
- memset (buf , XISO_PAD_BYTE , bytes );
1830
- if (write (in_context -> xiso , buf , bytes ) != (int )bytes ) write_err ();
1820
+ if (!err ) {
1821
+ bytes = (XISO_SECTOR_SIZE - (in_avl -> file_size % XISO_SECTOR_SIZE )) % XISO_SECTOR_SIZE ;
1822
+ if (bytes ) {
1823
+ memset (buf , XISO_PAD_BYTE , bytes );
1824
+ if (write (in_context -> xiso , buf , bytes ) != (signed )bytes ) write_err ();
1825
+ }
1831
1826
}
1832
1827
exiso_log (err ? "failed" : "[OK]" );
1833
1828
@@ -1852,12 +1847,12 @@ int write_file( dir_node_avl *in_avl, write_tree_context *in_context, int in_dep
1852
1847
1853
1848
int write_directory ( dir_node_avl * in_avl , write_tree_context * in_context , int in_depth ) {
1854
1849
xoff_t pos ;
1855
- int err = 0 , pad ;
1856
1850
uint16_t l_offset , r_offset ;
1857
- uint32_t file_size = in_avl -> file_size + ( in_avl -> subdirectory ? ( XISO_SECTOR_SIZE - ( in_avl -> file_size % XISO_SECTOR_SIZE )) % XISO_SECTOR_SIZE : 0 ) ;
1858
- char length = (char )strlen (in_avl -> filename );
1859
- char attributes = in_avl -> subdirectory ? XISO_ATTRIBUTE_DIR : XISO_ATTRIBUTE_ARC ;
1851
+ uint32_t file_size = in_avl -> subdirectory ? n_sectors ( in_avl -> file_size ) * XISO_SECTOR_SIZE : in_avl -> file_size ;
1852
+ uint8_t length = (uint8_t )strlen (in_avl -> filename );
1853
+ uint8_t attributes = in_avl -> subdirectory ? XISO_ATTRIBUTE_DIR : XISO_ATTRIBUTE_ARC ;
1860
1854
char sector [XISO_SECTOR_SIZE ];
1855
+ int err = 0 , pad ;
1861
1856
1862
1857
little32 ( in_avl -> file_size );
1863
1858
little32 ( in_avl -> start_sector );
@@ -1871,7 +1866,8 @@ int write_directory( dir_node_avl *in_avl, write_tree_context* in_context, int i
1871
1866
memset ( sector , XISO_PAD_BYTE , XISO_SECTOR_SIZE );
1872
1867
1873
1868
if ( ( pos = lseek ( in_context -> xiso , 0 , SEEK_CUR ) ) == -1 ) seek_err ();
1874
- if ( ! err && ( pad = (int ) ( (xoff_t ) in_avl -> offset + in_avl -> dir_start - pos ) ) && write ( in_context -> xiso , sector , pad ) != pad ) write_err ();
1869
+ if ( ! err ) pad = (int )((xoff_t )in_avl -> offset + in_avl -> dir_start - pos );
1870
+ if ( ! err && write ( in_context -> xiso , sector , pad ) != pad ) write_err ();
1875
1871
if ( ! err && write ( in_context -> xiso , & l_offset , XISO_TABLE_OFFSET_SIZE ) != XISO_TABLE_OFFSET_SIZE ) write_err ();
1876
1872
if ( ! err && write ( in_context -> xiso , & r_offset , XISO_TABLE_OFFSET_SIZE ) != XISO_TABLE_OFFSET_SIZE ) write_err ();
1877
1873
if ( ! err && write ( in_context -> xiso , & in_avl -> start_sector , XISO_SECTOR_OFFSET_SIZE ) != XISO_SECTOR_OFFSET_SIZE ) write_err ();
@@ -1888,7 +1884,7 @@ int write_directory( dir_node_avl *in_avl, write_tree_context* in_context, int i
1888
1884
1889
1885
1890
1886
int calculate_directory_offsets ( dir_node_avl * in_avl , uint32_t * io_current_sector , int in_depth ) {
1891
- wdsafp_context context ;
1887
+ wdsafp_context context = { 0 } ;
1892
1888
1893
1889
if ( in_avl -> subdirectory ) {
1894
1890
if (in_avl -> subdirectory == EMPTY_SUBDIRECTORY ) {
0 commit comments