334334 #include "win32/asprintf.c"
335335#endif
336336 #define lseek _lseeki64
337- #define mkdir ( a , b ) mkdir( a )
337+ #define mkdir ( a , b ) _mkdir( (a) )
338338
339339 typedef __int32 int32_t ;
340340 typedef __int64 xoff_t ;
@@ -598,7 +598,7 @@ int create_xiso( char *in_root_directory, char *in_output_directory, dir_node_av
598598FILE_TIME * alloc_filetime_now ( void );
599599int generate_avl_tree_local ( dir_node_avl * * out_root , int * io_n );
600600int generate_avl_tree_remote ( dir_node_avl * * out_root , int * io_n );
601- int write_directory ( dir_node_avl * in_avl , int in_xiso , int in_depth );
601+ int write_directory ( dir_node_avl * in_avl , write_tree_context * in_context , int in_depth );
602602int write_file ( dir_node_avl * in_avl , write_tree_context * in_context , int in_depth );
603603int write_tree ( dir_node_avl * in_avl , write_tree_context * in_context , int in_depth );
604604int calculate_total_files_and_bytes ( dir_node_avl * in_avl , void * in_context , int in_depth );
@@ -1060,7 +1060,7 @@ int create_xiso( char *in_root_directory, char *in_output_directory, dir_node_av
10601060 if ( ! err && ( pos = lseek ( xiso , (xoff_t ) 0 , SEEK_END ) ) == -1 ) seek_err ();
10611061 if ( ! err && write ( xiso , buf , i = (int ) (( XISO_FILE_MODULUS - pos % XISO_FILE_MODULUS ) % XISO_FILE_MODULUS ) ) != i ) write_err ();
10621062
1063- if ( ! err ) err = write_volume_descriptors ( xiso , ( pos + (xoff_t ) i ) / XISO_SECTOR_SIZE );
1063+ if ( ! err ) err = write_volume_descriptors ( xiso , (uint32_t )(( pos + (xoff_t )i ) / XISO_SECTOR_SIZE ) );
10641064
10651065 if ( ! err && lseek ( xiso , (xoff_t ) XISO_OPTIMIZED_TAG_OFFSET , SEEK_SET ) == -1 ) seek_err ();
10661066 if ( ! err && write ( xiso , XISO_OPTIMIZED_TAG , XISO_OPTIMIZED_TAG_LENGTH ) != XISO_OPTIMIZED_TAG_LENGTH ) write_err ();
@@ -1123,7 +1123,7 @@ int decode_xiso( char *in_xiso, char *in_path, modes in_mode, char **out_iso_pat
11231123
11241124 if ( ! err && in_mode == k_extract && in_path ) {
11251125 if ( ( cwd = getcwd ( nil , 0 ) ) == nil ) mem_err ();
1126- if ( ! err && mkdir ( in_path , 0755 ) );
1126+ if ( ! err && mkdir ( in_path , 0755 ) == -1 ) mkdir_err ( in_path );
11271127 if ( ! err && chdir ( in_path ) == -1 ) chdir_err ( in_path );
11281128 }
11291129
@@ -1587,7 +1587,8 @@ char *boyer_moore_search( char *in_text, long in_text_len ) {
15871587int extract_file ( int in_xiso , dir_node * in_file , modes in_mode , char * path ) {
15881588 int err = 0 ;
15891589 bool warn = false;
1590- uint32_t i , size , read_size , totalsize = 0 , totalpercent = 0 ;
1590+ uint32_t i , size , read_size , totalsize = 0 ;
1591+ float totalpercent = 0.0f ;
15911592 int out ;
15921593
15931594 if ( s_remove_systemupdate && strstr ( path , s_systemupdate ) ){
@@ -1619,8 +1620,8 @@ int extract_file( int in_xiso, dir_node *in_file, modes in_mode , char* path) {
16191620 }
16201621 }
16211622 totalsize += read_size ;
1622- totalpercent = (totalsize * 100.0 ) / in_file -> file_size ;
1623- exiso_log ("%s%s%s (%u bytes) [%u %%]%s\r" , in_mode == k_extract ? "extracting " : "" , path , in_file -> filename , in_file -> file_size , totalpercent , "" );
1623+ totalpercent = (totalsize * 100.0f ) / in_file -> file_size ;
1624+ exiso_log ("%s%s%s (%u bytes) [%.1f %%]%s\r" , in_mode == k_extract ? "extracting " : "" , path , in_file -> filename , in_file -> file_size , totalpercent , "" );
16241625
16251626 i += read_size ;
16261627 size = min (in_file -> file_size - i , READWRITE_BUFFER_SIZE );
@@ -1679,7 +1680,7 @@ int write_tree( dir_node_avl *in_avl, write_tree_context *in_context, int in_dep
16791680 if ( ! err ) err = avl_traverse_depth_first ( in_avl -> subdirectory , (traversal_callback ) write_tree , & context , k_prefix , 0 );
16801681
16811682 if (!err && lseek (in_context -> xiso , (xoff_t )in_avl -> start_sector * XISO_SECTOR_SIZE , SEEK_SET ) == -1 ) seek_err ();
1682- if (!err ) err = avl_traverse_depth_first (in_avl -> subdirectory , (traversal_callback )write_directory , ( void * ) in_context -> xiso , k_prefix , 0 );
1683+ if (!err ) err = avl_traverse_depth_first (in_avl -> subdirectory , (traversal_callback )write_directory , in_context , k_prefix , 0 );
16831684 if (!err && (pos = lseek (in_context -> xiso , 0 , SEEK_CUR )) == -1 ) seek_err ();
16841685 if (!err && (pad = (int )((XISO_SECTOR_SIZE - (pos % XISO_SECTOR_SIZE )) % XISO_SECTOR_SIZE ))) {
16851686 memset (sector , XISO_PAD_BYTE , pad );
@@ -1742,7 +1743,7 @@ int write_file( dir_node_avl *in_avl, write_tree_context *in_context, int in_dep
17421743 }
17431744 bytes -= n ;
17441745 if (s_media_enable && (len = strlen (in_avl -> filename )) >= 4 && strcasecmp (& in_avl -> filename [len - 4 ], ".xbe" ) == 0 ) {
1745- for (buf [n += i ] = 0 , p = buf ; (p = boyer_moore_search (p , n - (p - buf ))) != nil ; p += XISO_MEDIA_ENABLE_LENGTH ) p [XISO_MEDIA_ENABLE_BYTE_POS ] = XISO_MEDIA_ENABLE_BYTE ;
1746+ 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 ;
17461747 if (bytes ) {
17471748 i = XISO_MEDIA_ENABLE_LENGTH - 1 ;
17481749 if (write (in_context -> xiso , buf , n - i ) != (int )n - i ) {
@@ -1793,7 +1794,7 @@ int write_file( dir_node_avl *in_avl, write_tree_context *in_context, int in_dep
17931794}
17941795
17951796
1796- int write_directory ( dir_node_avl * in_avl , int in_xiso , int in_depth ) {
1797+ int write_directory ( dir_node_avl * in_avl , write_tree_context * in_context , int in_depth ) {
17971798 xoff_t pos ;
17981799 int err = 0 , pad ;
17991800 uint16_t l_offset , r_offset ;
@@ -1811,15 +1812,15 @@ int write_directory( dir_node_avl *in_avl, int in_xiso, int in_depth ) {
18111812
18121813 memset ( sector , XISO_PAD_BYTE , XISO_SECTOR_SIZE );
18131814
1814- if ( ( pos = lseek ( in_xiso , 0 , SEEK_CUR ) ) == -1 ) seek_err ();
1815- if ( ! err && ( pad = (int ) ( (xoff_t ) in_avl -> offset + in_avl -> dir_start - pos ) ) && write ( in_xiso , sector , pad ) != pad ) write_err ();
1816- if ( ! err && write ( in_xiso , & l_offset , XISO_TABLE_OFFSET_SIZE ) != XISO_TABLE_OFFSET_SIZE ) write_err ();
1817- if ( ! err && write ( in_xiso , & r_offset , XISO_TABLE_OFFSET_SIZE ) != XISO_TABLE_OFFSET_SIZE ) write_err ();
1818- if ( ! err && write ( in_xiso , & in_avl -> start_sector , XISO_SECTOR_OFFSET_SIZE ) != XISO_SECTOR_OFFSET_SIZE ) write_err ();
1819- if ( ! err && write ( in_xiso , & file_size , XISO_FILESIZE_SIZE ) != XISO_FILESIZE_SIZE ) write_err ();
1820- if ( ! err && write ( in_xiso , & attributes , XISO_ATTRIBUTES_SIZE ) != XISO_ATTRIBUTES_SIZE ) write_err ();
1821- if ( ! err && write ( in_xiso , & length , XISO_FILENAME_LENGTH_SIZE ) != XISO_FILENAME_LENGTH_SIZE ) write_err ();
1822- if ( ! err && write ( in_xiso , in_avl -> filename , length ) != length ) write_err ();
1815+ if ( ( pos = lseek ( in_context -> xiso , 0 , SEEK_CUR ) ) == -1 ) seek_err ();
1816+ if ( ! err && ( pad = (int ) ( (xoff_t ) in_avl -> offset + in_avl -> dir_start - pos ) ) && write ( in_context -> xiso , sector , pad ) != pad ) write_err ();
1817+ if ( ! err && write ( in_context -> xiso , & l_offset , XISO_TABLE_OFFSET_SIZE ) != XISO_TABLE_OFFSET_SIZE ) write_err ();
1818+ if ( ! err && write ( in_context -> xiso , & r_offset , XISO_TABLE_OFFSET_SIZE ) != XISO_TABLE_OFFSET_SIZE ) write_err ();
1819+ if ( ! err && write ( in_context -> xiso , & in_avl -> start_sector , XISO_SECTOR_OFFSET_SIZE ) != XISO_SECTOR_OFFSET_SIZE ) write_err ();
1820+ if ( ! err && write ( in_context -> xiso , & file_size , XISO_FILESIZE_SIZE ) != XISO_FILESIZE_SIZE ) write_err ();
1821+ if ( ! err && write ( in_context -> xiso , & attributes , XISO_ATTRIBUTES_SIZE ) != XISO_ATTRIBUTES_SIZE ) write_err ();
1822+ if ( ! err && write ( in_context -> xiso , & length , XISO_FILENAME_LENGTH_SIZE ) != XISO_FILENAME_LENGTH_SIZE ) write_err ();
1823+ if ( ! err && write ( in_context -> xiso , in_avl -> filename , length ) != length ) write_err ();
18231824
18241825 little32 ( in_avl -> start_sector );
18251826 little32 ( in_avl -> file_size );
@@ -1894,7 +1895,7 @@ int calculate_directory_size( dir_node_avl *in_avl, uint32_t *out_size, long in_
18941895
18951896 if ( in_depth == 0 ) * out_size = 0 ;
18961897
1897- length = XISO_FILENAME_OFFSET + strlen ( in_avl -> filename );
1898+ length = XISO_FILENAME_OFFSET + ( uint32_t ) strlen ( in_avl -> filename );
18981899 length += ( XISO_DWORD_SIZE - ( length % XISO_DWORD_SIZE ) ) % XISO_DWORD_SIZE ;
18991900
19001901 if ( n_sectors ( * out_size + length ) > n_sectors ( * out_size ) ) {
0 commit comments