430430", banner, argv[ 0 ], argv[ 0 ] );
431431
432432#define exiso_log (...) if ( ! s_quiet ) { printf(__VA_ARGS__); }
433- #define exiso_warn (...) if ( ! s_quiet ) { printf(__VA_ARGS__); s_warned = true; }
433+ #define exiso_warn (...) if ( ! s_quiet ) { printf("\nWARNING: " __VA_ARGS__); s_warned = true; }
434434#define flush () if ( ! s_quiet ) { fflush( stdout ); }
435435
436- #define mem_err () { log_err( __FILE__, __LINE__, "out of memory error\n " ); err = 1; }
437- #define read_err () { log_err( __FILE__, __LINE__, "read error: %s\n ", strerror( errno ) ); err = 1; }
438- #define seek_err () { log_err( __FILE__, __LINE__, "seek error: %s\n ", strerror( errno ) ); err = 1; }
439- #define write_err () { log_err( __FILE__, __LINE__, "write error: %s\n ", strerror( errno ) ); err = 1; }
440- #define rread_err () { log_err( __FILE__, __LINE__, "unable to read remote file\n " ); err = 1; }
441- #define rwrite_err () { log_err( __FILE__, __LINE__, "unable to write to remote file\n " ); err = 1; }
442- #define unknown_err () { log_err( __FILE__, __LINE__, "an unrecoverable error has occurred\n " ); err = 1; }
443- #define open_err ( in_file ) { log_err( __FILE__, __LINE__, "open error: %s %s\n ", ( in_file ), strerror( errno ) ); err = 1; }
444- #define chdir_err ( in_dir ) { log_err( __FILE__, __LINE__, "unable to change to directory %s: %s\n ", ( in_dir ), strerror( errno ) ); err = 1; }
445- #define mkdir_err ( in_dir ) { log_err( __FILE__, __LINE__, "unable to create directory %s: %s\n ", ( in_dir ), strerror( errno ) ); err = 1; }
446- #define ropen_err ( in_file ) { log_err( __FILE__, __LINE__, "unable to open remote file %s\n ", ( in_file ) ); err = 1; }
447- #define rchdir_err ( in_dir ) { log_err( __FILE__, __LINE__, "unable to change to remote directory %s\n ", ( in_dir ) ); err = 1; }
448- #define rmkdir_err ( in_dir ) { log_err( __FILE__, __LINE__, "unable to create remote directory %s\n ", ( in_dir ) ); err = 1; }
449- #define misc_err ( in_format , a , b , c ) { log_err( __FILE__, __LINE__, ( in_format ), ( a ), ( b ), ( c ) ); err = 1; }
436+ #define mem_err () { log_err( __FILE__, __LINE__, "out of memory error" ); err = 1; }
437+ #define read_err () { log_err( __FILE__, __LINE__, "read error: %s", strerror( errno ) ); err = 1; }
438+ #define seek_err () { log_err( __FILE__, __LINE__, "seek error: %s", strerror( errno ) ); err = 1; }
439+ #define write_err () { log_err( __FILE__, __LINE__, "write error: %s", strerror( errno ) ); err = 1; }
440+ #define rread_err () { log_err( __FILE__, __LINE__, "unable to read remote file" ); err = 1; }
441+ #define rwrite_err () { log_err( __FILE__, __LINE__, "unable to write to remote file" ); err = 1; }
442+ #define unknown_err () { log_err( __FILE__, __LINE__, "an unrecoverable error has occurred" ); err = 1; }
443+ #define open_err ( in_file ) { log_err( __FILE__, __LINE__, "open error: %s %s", ( in_file ), strerror( errno ) ); err = 1; }
444+ #define chdir_err ( in_dir ) { log_err( __FILE__, __LINE__, "unable to change to directory %s: %s", ( in_dir ), strerror( errno ) ); err = 1; }
445+ #define mkdir_err ( in_dir ) { log_err( __FILE__, __LINE__, "unable to create directory %s: %s", ( in_dir ), strerror( errno ) ); err = 1; }
446+ #define ropen_err ( in_file ) { log_err( __FILE__, __LINE__, "unable to open remote file %s", ( in_file ) ); err = 1; }
447+ #define rchdir_err ( in_dir ) { log_err( __FILE__, __LINE__, "unable to change to remote directory %s", ( in_dir ) ); err = 1; }
448+ #define rmkdir_err ( in_dir ) { log_err( __FILE__, __LINE__, "unable to create remote directory %s", ( in_dir ) ); err = 1; }
449+ #define misc_err ( ... ) { log_err( __FILE__, __LINE__, __VA_ARGS__ ); err = 1; }
450450
451451
452452#ifndef min
@@ -784,7 +784,6 @@ int main( int argc, char **argv ) {
784784 }
785785 } else for ( i = optind ; ! err && i < argc ; ++ i ) {
786786 ++ isos ;
787- exiso_log ( "\n" );
788787 s_total_bytes = s_total_files = 0 ;
789788
790789
@@ -804,19 +803,19 @@ int main( int argc, char **argv ) {
804803
805804 if ( rewrite ) {
806805 if ( optimized ) {
807- exiso_log ( "%s is already optimized, skipping...\n" , argv [ i ] );
806+ exiso_log ( "\n %s is already optimized, skipping...\n" , argv [ i ] );
808807 continue ;
809808 }
810809
811810 if ( ! err ) {
812811 if (asprintf (& buf , "%s.old" , argv [i ]) == -1 ) mem_err ();
813- if ( ! err && stat ( buf , & sb ) != -1 ) misc_err ( "%s already exists, cannot rewrite %s\n " , buf , argv [ i ], 0 );
814- if ( ! err && rename ( argv [ i ], buf ) == -1 ) misc_err ( "cannot rename %s to %s\n " , argv [ i ], buf , 0 );
812+ if ( ! err && stat ( buf , & sb ) != -1 ) misc_err ( "%s already exists, cannot rewrite %s" , buf , argv [ i ] );
813+ if ( ! err && rename ( argv [ i ], buf ) == -1 ) misc_err ( "cannot rename %s to %s" , argv [ i ], buf );
815814
816815 if ( err ) { err = 0 ; free ( buf ); continue ; }
817816 }
818817 if ( ! err ) err = decode_xiso ( buf , path , k_rewrite , & new_iso_path );
819- if ( ! err && delete && unlink ( buf ) == -1 ) log_err ( __FILE__ , __LINE__ , "unable to delete %s\n " , buf );
818+ if ( ! err && delete && unlink ( buf ) == -1 ) log_err ( __FILE__ , __LINE__ , "unable to delete %s" , buf );
820819
821820 if ( buf ) free ( buf );
822821 } else {
@@ -826,7 +825,7 @@ int main( int argc, char **argv ) {
826825 }
827826 }
828827
829- if ( ! err ) exiso_log ( "\n%u files in %s total %lld bytes\n" , s_total_files , rewrite ? new_iso_path : argv [ i ], (long long int ) s_total_bytes );
828+ if ( ! err ) exiso_log ( "\n\n %u files in %s total %lld bytes\n" , s_total_files , rewrite ? new_iso_path : argv [ i ], (long long int ) s_total_bytes );
830829
831830 if ( new_iso_path ) {
832831 if ( ! err ) exiso_log ( "\n%s successfully rewritten%s%s\n" , argv [ i ], path ? " as " : "." , path ? new_iso_path : "" );
@@ -839,7 +838,7 @@ int main( int argc, char **argv ) {
839838 }
840839
841840 if ( ! err && isos > 1 ) exiso_log ( "\n%u files in %u xiso's total %lld bytes\n" , s_total_files_all_isos , isos , (long long int ) s_total_bytes_all_isos );
842- if ( s_warned ) exiso_log ( "\nWARNING: Warning(s) were issued during execution--review stderr!\n" );
841+ if ( s_warned ) exiso_warn ( "Warning(s) were issued during execution--review stderr!\n" );
843842
844843 boyer_moore_done ();
845844
@@ -850,26 +849,33 @@ int main( int argc, char **argv ) {
850849}
851850
852851
853- int log_err ( const char * in_file , int in_line , const char * in_format , ... ) {
852+ int log_err (const char * in_file , int in_line , const char * in_format , ...) {
854853 va_list ap ;
855- char * format ;
854+ char * format ;
856855 int ret ;
857856
858857#if DEBUG
859- asprintf ( & format , "%s:%u %s" , in_file , in_line , in_format );
858+ asprintf (& format , "%s:%u %s" , in_file , in_line , in_format );
860859#else
861- format = (char * ) in_format ;
860+ format = (char * ) in_format ;
862861#endif
863-
864- if ( s_real_quiet ) ret = 0 ;
862+
863+ if (s_real_quiet ) {
864+ ret = 0 ;
865+ }
866+ else if (format ){
867+ va_start (ap , in_format );
868+ fprintf (stderr , "\n" );
869+ ret = vfprintf (stderr , format , ap );
870+ fprintf (stderr , "\n" );
871+ va_end (ap );
872+ }
865873 else {
866- va_start ( ap , in_format );
867- ret = vfprintf ( stderr , format , ap );
868- va_end ( ap );
874+ ret = 1 ;
869875 }
870876
871877#if DEBUG
872- free ( format );
878+ if ( format ) free ( format );
873879#endif
874880
875881 return ret ;
@@ -899,7 +905,7 @@ int verify_xiso( int in_xiso, int32_t *out_root_dir_sector, int32_t *out_root_di
899905 {
900906 if (lseek (in_xiso , (xoff_t )XISO_HEADER_OFFSET + XGD1_LSEEK_OFFSET , SEEK_SET ) == -1 ) seek_err ();
901907 if (!err && read (in_xiso , buffer , XISO_HEADER_DATA_LENGTH ) != XISO_HEADER_DATA_LENGTH ) read_err ();
902- if (!err && memcmp (buffer , XISO_HEADER_DATA , XISO_HEADER_DATA_LENGTH )) misc_err ("%s does not appear to be a valid xbox iso image\n " , in_iso_name , 0 , 0 )
908+ if (!err && memcmp (buffer , XISO_HEADER_DATA , XISO_HEADER_DATA_LENGTH )) misc_err ("%s does not appear to be a valid xbox iso image" , in_iso_name )
903909 else s_xbox_disc_lseek = XGD1_LSEEK_OFFSET ;
904910 }
905911 else s_xbox_disc_lseek = XGD3_LSEEK_OFFSET ;
@@ -918,12 +924,12 @@ int verify_xiso( int in_xiso, int32_t *out_root_dir_sector, int32_t *out_root_di
918924 // seek to header tail and verify media tag
919925 if ( ! err && lseek ( in_xiso , (xoff_t ) XISO_FILETIME_SIZE + XISO_UNUSED_SIZE , SEEK_CUR ) == -1 ) seek_err ();
920926 if ( ! err && read ( in_xiso , buffer , XISO_HEADER_DATA_LENGTH ) != XISO_HEADER_DATA_LENGTH ) read_err ();
921- if ( ! err && memcmp ( buffer , XISO_HEADER_DATA , XISO_HEADER_DATA_LENGTH ) ) misc_err ( "%s appears to be corrupt\n " , in_iso_name , 0 , 0 );
927+ if ( ! err && memcmp ( buffer , XISO_HEADER_DATA , XISO_HEADER_DATA_LENGTH ) ) misc_err ( "%s appears to be corrupt" , in_iso_name );
922928
923929 // seek to root directory sector
924930 if ( ! err ) {
925931 if ( ! * out_root_dir_sector && ! * out_root_dir_size ) {
926- exiso_log ( "xbox image %s contains no files.\n" , in_iso_name );
932+ exiso_log ( "\nxbox image %s contains no files.\n" , in_iso_name );
927933 err = err_iso_no_files ;
928934 } else {
929935 if ( lseek ( in_xiso , (xoff_t ) * out_root_dir_sector * XISO_SECTOR_SIZE , SEEK_SET ) == -1 ) seek_err ();
@@ -978,7 +984,7 @@ int create_xiso( char *in_root_directory, char *in_output_directory, dir_node_av
978984#endif
979985 }
980986 if ( ! err ) {
981- exiso_log ( "%s %s%s:\n\n " , in_root ? "rewriting" : "\ncreating " , iso_name , in_name ? "" : ".iso" );
987+ exiso_log ( "\n %s %s%s:\n" , in_root ? "rewriting" : "creating " , iso_name , in_name ? "" : ".iso" );
982988
983989 root .start_sector = XISO_ROOT_DIRECTORY_SECTOR ;
984990
@@ -990,15 +996,15 @@ int create_xiso( char *in_root_directory, char *in_output_directory, dir_node_av
990996 } else {
991997 int i , n = 0 ;
992998
993- exiso_log ( "generating avl tree from %sfilesystem : ", "" ); flush ();
999+ exiso_log ("\ngenerating avl tree from filesystem : " ); flush ();
9941000
9951001 err = generate_avl_tree_local ( & root .subdirectory , & n );
9961002
9971003 for ( i = 0 ; i < n ; ++ i ) exiso_log ( "\b" );
9981004 for ( i = 0 ; i < n ; ++ i ) exiso_log ( " " );
9991005 for ( i = 0 ; i < n ; ++ i ) exiso_log ( "\b" );
10001006
1001- exiso_log ( "%s\n\n " , err ? "failed!" : "[OK]" );
1007+ exiso_log ( "%s\n" , err ? "failed!" : "[OK]" );
10021008 }
10031009 }
10041010 if ( ! err && in_progress_callback ) (* in_progress_callback )( 0 , s_total_bytes );
@@ -1126,7 +1132,7 @@ int decode_xiso( char *in_xiso, char *in_path, modes in_mode, char **out_iso_pat
11261132 }
11271133 }
11281134
1129- if ( ! err && ! len ) misc_err ( "invalid xiso image name: %s\n " , in_xiso , 0 , 0 );
1135+ if ( ! err && ! len ) misc_err ( "invalid xiso image name: %s" , in_xiso );
11301136
11311137 if ( ! err && in_mode == k_extract && in_path ) {
11321138 if ( ( cwd = getcwd ( nil , 0 ) ) == nil ) mem_err ();
@@ -1139,7 +1145,7 @@ int decode_xiso( char *in_xiso, char *in_path, modes in_mode, char **out_iso_pat
11391145 iso_name = short_name ? short_name : name ;
11401146
11411147 if ( ! err && in_mode != k_rewrite ) {
1142- exiso_log ( "%s %s:\n \n" , in_mode == k_extract ? "extracting" : "listing" , name );
1148+ exiso_log ( "\n %s %s:\n" , in_mode == k_extract ? "extracting" : "listing" , name );
11431149
11441150 if ( in_mode == k_extract ) {
11451151 if ( ! in_path ) {
@@ -1173,7 +1179,7 @@ int decode_xiso( char *in_xiso, char *in_path, modes in_mode, char **out_iso_pat
11731179 }
11741180
11751181 if ( err == err_iso_rewritten ) err = 0 ;
1176- if ( err ) misc_err ( "failed to %s xbox iso image %s\n " , in_mode == k_rewrite ? "rewrite" : in_mode == k_extract ? "extract" : "list" , name , 0 );
1182+ if ( err ) misc_err ( "failed to %s xbox iso image %s" , in_mode == k_rewrite ? "rewrite" : in_mode == k_extract ? "extract" : "list" , name );
11771183
11781184 if ( xiso != -1 ) close ( xiso );
11791185
@@ -1203,7 +1209,7 @@ int traverse_xiso(int in_xiso, xoff_t in_dir_start, uint16_t entry_offset, char*
12031209 if (in_mode == k_generate_avl ) err = (avl_insert (in_root , EMPTY_SUBDIRECTORY ) == k_avl_error );
12041210 }
12051211 else {
1206- exiso_warn ("WARNING: Invalid node found and skipped!\n " );
1212+ exiso_warn ("Invalid node found and skipped!" );
12071213 }
12081214 return err ;
12091215 }
@@ -1245,7 +1251,7 @@ int traverse_xiso(int in_xiso, xoff_t in_dir_start, uint16_t entry_offset, char*
12451251 if (!err ) {
12461252 avl -> file_size = node -> file_size ;
12471253 avl -> old_start_sector = node -> start_sector ;
1248- if (avl_insert (in_root , avl ) == k_avl_error ) misc_err ("this iso appears to be corrupt\n" , 0 , 0 , 0 );
1254+ if (avl_insert (in_root , avl ) == k_avl_error ) misc_err ("this iso appears to be corrupt" );
12491255 }
12501256 }
12511257
@@ -1287,8 +1293,7 @@ int process_node(int in_xiso, dir_node* node, char* in_path, modes in_mode, dir_
12871293 if (!err && (err = chdir (node -> filename ))) chdir_err (node -> filename );
12881294 }
12891295 if (!err && in_mode != k_generate_avl ) {
1290- exiso_log ("%s%s%s%s (0 bytes)%s" , in_mode == k_extract ? "creating " : "" , in_path , node -> filename , PATH_CHAR_STR , in_mode == k_extract ? " [OK]" : "" ); flush ();
1291- exiso_log ("\n" );
1296+ exiso_log ("\n%s%s%s%s (0 bytes)%s" , in_mode == k_extract ? "creating " : "" , in_path , node -> filename , PATH_CHAR_STR , in_mode == k_extract ? " [OK]" : "" ); flush ();
12921297 }
12931298 }
12941299 }
@@ -1314,8 +1319,7 @@ int process_node(int in_xiso, dir_node* node, char* in_path, modes in_mode, dir_
13141319 err = extract_file (in_xiso , node , in_mode , in_path );
13151320 }
13161321 else {
1317- exiso_log ("%s%s (%u bytes)" , in_path , node -> filename , node -> file_size ); flush ();
1318- exiso_log ("\n" );
1322+ exiso_log ("\n%s%s (%u bytes)" , in_path , node -> filename , node -> file_size ); flush ();
13191323 }
13201324
13211325 ++ s_total_files ;
@@ -1607,8 +1611,9 @@ int extract_file( int in_xiso, dir_node *in_file, modes in_mode , char* path) {
16071611 if ( ! err && lseek ( in_xiso , (xoff_t ) in_file -> start_sector * XISO_SECTOR_SIZE + s_xbox_disc_lseek , SEEK_SET ) == -1 ) seek_err ();
16081612
16091613 if ( ! err ) {
1614+ exiso_log ("\n" );
16101615 if (in_file -> file_size == 0 ) {
1611- exiso_log ("%s%s%s (0 bytes) [100%%]%s \r" , in_mode == k_extract ? "extracting " : "" , path , in_file -> filename , "" );
1616+ exiso_log ("%s%s%s (0 bytes) [100%%]\r" , in_mode == k_extract ? "extracting " : "" , path , in_file -> filename );
16121617 }
16131618 else {
16141619 i = 0 ;
@@ -1626,22 +1631,20 @@ int extract_file( int in_xiso, dir_node *in_file, modes in_mode , char* path) {
16261631 }
16271632 totalsize += read_size ;
16281633 totalpercent = (totalsize * 100.0f ) / in_file -> file_size ;
1629- exiso_log ("%s%s%s (%u bytes) [%.1f%%]%s \r" , in_mode == k_extract ? "extracting " : "" , path , in_file -> filename , in_file -> file_size , totalpercent , "" );
1634+ exiso_log ("%s%s%s (%u bytes) [%.1f%%]\r" , in_mode == k_extract ? "extracting " : "" , path , in_file -> filename , in_file -> file_size , totalpercent );
16301635
16311636 i += read_size ;
16321637 size = min (in_file -> file_size - i , READWRITE_BUFFER_SIZE );
16331638 } while (i < in_file -> file_size && read_size > 0 );
16341639 if (!err && i < in_file -> file_size ) {
1635- exiso_warn ("\nWARNING: File %s is truncated. Reported size: %u bytes, read size: %u bytes!" , in_file -> filename , in_file -> file_size , i );
1640+ exiso_warn ("File %s is truncated. Reported size: %u bytes, read size: %u bytes!" , in_file -> filename , in_file -> file_size , i );
16361641 in_file -> file_size = i ;
16371642 }
16381643 }
16391644 if (in_mode == k_extract ) close (out );
16401645 }
16411646 }
16421647
1643- if ( ! err ) exiso_log ( "\n" );
1644-
16451648 return err ;
16461649}
16471650
@@ -1669,7 +1672,7 @@ int write_tree( dir_node_avl *in_avl, write_tree_context *in_context, int in_dep
16691672 else { if ( asprintf ( & context .path , "%c" , PATH_CHAR ) == -1 ) mem_err (); }
16701673
16711674 if ( ! err ) {
1672- exiso_log ( "adding %s (0 bytes) [OK]\n " , context .path );
1675+ exiso_log ( "\nadding %s (0 bytes) [OK]" , context .path );
16731676
16741677 if ( in_avl -> subdirectory != EMPTY_SUBDIRECTORY ) {
16751678 context .xiso = in_context -> xiso ;
@@ -1728,7 +1731,7 @@ int write_file( dir_node_avl *in_avl, write_tree_context *in_context, int in_dep
17281731 }
17291732
17301733 if ( ! err ) {
1731- exiso_log ( "adding %s%s (%u bytes) " , in_context -> path , in_avl -> filename , in_avl -> file_size ); flush ();
1734+ exiso_log ( "\nadding %s%s (%u bytes) " , in_context -> path , in_avl -> filename , in_avl -> file_size ); flush ();
17321735
17331736 i = 0 ;
17341737 bytes = in_avl -> file_size ;
@@ -1778,10 +1781,10 @@ int write_file( dir_node_avl *in_avl, write_tree_context *in_context, int in_dep
17781781 memset (buf , XISO_PAD_BYTE , bytes );
17791782 if (write (in_context -> xiso , buf , bytes ) != (int )bytes ) write_err ();
17801783 }
1781- exiso_log (err ? "failed\n " : "[OK]\n " );
1784+ exiso_log (err ? "failed" : "[OK]" );
17821785
17831786 if (!err && i != in_avl -> file_size ) {
1784- exiso_warn ("WARNING: File %s is truncated. Reported size: %u bytes, wrote size: %u bytes!\n " , in_avl -> filename , i , in_avl -> file_size );
1787+ exiso_warn ("File %s is truncated. Reported size: %u bytes, wrote size: %u bytes!" , in_avl -> filename , i , in_avl -> file_size );
17851788 }
17861789
17871790 if (!err ) {
@@ -1952,7 +1955,7 @@ int generate_avl_tree_local( dir_node_avl **out_root, int *io_n ) {
19521955 } else if ( S_ISREG ( sb .st_mode ) ) {
19531956 empty_dir = false;
19541957 if ( sb .st_size > ULONG_MAX ) {
1955- log_err ( __FILE__ , __LINE__ , "file %s is too large for xiso, skipping...\n " , avl -> filename );
1958+ log_err ( __FILE__ , __LINE__ , "file %s is too large for xiso, skipping..." , avl -> filename );
19561959 free ( avl -> filename );
19571960 free ( avl );
19581961 continue ;
@@ -1966,7 +1969,7 @@ int generate_avl_tree_local( dir_node_avl **out_root, int *io_n ) {
19661969 }
19671970 }
19681971 if ( ! err ) {
1969- if ( avl_insert ( out_root , avl ) == k_avl_error ) misc_err ( "error inserting file %s into tree (duplicate filename?)\n " , avl -> filename , 0 , 0 );
1972+ if ( avl_insert ( out_root , avl ) == k_avl_error ) misc_err ( "error inserting file %s into tree (duplicate filename?)" , avl -> filename );
19701973 } else {
19711974 if ( avl ) {
19721975 if ( avl -> filename ) free ( avl -> filename );
0 commit comments