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 ();
@@ -979,7 +985,7 @@ int create_xiso( char *in_root_directory, char *in_output_directory, dir_node_av
979985#endif
980986 }
981987 if ( ! err ) {
982- exiso_log ( "%s %s%s:\n\n " , in_root ? "rewriting" : "\ncreating " , iso_name , in_name ? "" : ".iso" );
988+ exiso_log ( "\n %s %s%s:\n" , in_root ? "rewriting" : "creating " , iso_name , in_name ? "" : ".iso" );
983989
984990 root .start_sector = XISO_ROOT_DIRECTORY_SECTOR ;
985991
@@ -991,15 +997,15 @@ int create_xiso( char *in_root_directory, char *in_output_directory, dir_node_av
991997 } else {
992998 int i , n = 0 ;
993999
994- exiso_log ( "generating avl tree from %sfilesystem : ", "" ); flush ();
1000+ exiso_log ("\ngenerating avl tree from filesystem : " ); flush ();
9951001
9961002 err = generate_avl_tree_local ( & root .subdirectory , & n );
9971003
9981004 for ( i = 0 ; i < n ; ++ i ) exiso_log ( "\b" );
9991005 for ( i = 0 ; i < n ; ++ i ) exiso_log ( " " );
10001006 for ( i = 0 ; i < n ; ++ i ) exiso_log ( "\b" );
10011007
1002- exiso_log ( "%s\n\n " , err ? "failed!" : "[OK]" );
1008+ exiso_log ( "%s\n" , err ? "failed!" : "[OK]" );
10031009 }
10041010 }
10051011 if ( ! err && in_progress_callback ) (* in_progress_callback )( 0 , s_total_bytes );
@@ -1128,7 +1134,7 @@ int decode_xiso( char *in_xiso, char *in_path, modes in_mode, char **out_iso_pat
11281134 }
11291135 }
11301136
1131- if ( ! err && ! len ) misc_err ( "invalid xiso image name: %s\n " , in_xiso , 0 , 0 );
1137+ if ( ! err && ! len ) misc_err ( "invalid xiso image name: %s" , in_xiso );
11321138
11331139 if ( ! err && in_mode == k_extract && in_path ) {
11341140 if ( ( cwd = getcwd ( nil , 0 ) ) == nil ) mem_err ();
@@ -1141,7 +1147,7 @@ int decode_xiso( char *in_xiso, char *in_path, modes in_mode, char **out_iso_pat
11411147 iso_name = short_name ? short_name : name ;
11421148
11431149 if ( ! err && in_mode != k_rewrite ) {
1144- exiso_log ( "%s %s:\n \n" , in_mode == k_extract ? "extracting" : "listing" , name );
1150+ exiso_log ( "\n %s %s:\n" , in_mode == k_extract ? "extracting" : "listing" , name );
11451151
11461152 if ( in_mode == k_extract ) {
11471153 if ( ! in_path ) {
@@ -1175,7 +1181,7 @@ int decode_xiso( char *in_xiso, char *in_path, modes in_mode, char **out_iso_pat
11751181 }
11761182
11771183 if ( err == err_iso_rewritten ) err = 0 ;
1178- 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 );
1184+ if ( err ) misc_err ( "failed to %s xbox iso image %s" , in_mode == k_rewrite ? "rewrite" : in_mode == k_extract ? "extract" : "list" , name );
11791185
11801186 if ( xiso != -1 ) close ( xiso );
11811187
@@ -1205,7 +1211,7 @@ int traverse_xiso(int in_xiso, xoff_t in_dir_start, uint16_t entry_offset, char*
12051211 if (in_mode == k_generate_avl ) err = (avl_insert (in_root , EMPTY_SUBDIRECTORY ) == k_avl_error );
12061212 }
12071213 else {
1208- exiso_warn ("WARNING: Invalid node found and skipped!\n " );
1214+ exiso_warn ("Invalid node found and skipped!" );
12091215 }
12101216 return err ;
12111217 }
@@ -1247,7 +1253,7 @@ int traverse_xiso(int in_xiso, xoff_t in_dir_start, uint16_t entry_offset, char*
12471253 if (!err ) {
12481254 avl -> file_size = node -> file_size ;
12491255 avl -> old_start_sector = node -> start_sector ;
1250- if (avl_insert (in_root , avl ) == k_avl_error ) misc_err ("this iso appears to be corrupt\n" , 0 , 0 , 0 );
1256+ if (avl_insert (in_root , avl ) == k_avl_error ) misc_err ("this iso appears to be corrupt" );
12511257 }
12521258 }
12531259
@@ -1289,8 +1295,7 @@ int process_node(int in_xiso, dir_node* node, char* in_path, modes in_mode, dir_
12891295 if (!err && (err = chdir (node -> filename ))) chdir_err (node -> filename );
12901296 }
12911297 if (!err && in_mode != k_generate_avl ) {
1292- 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 ();
1293- exiso_log ("\n" );
1298+ 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 ();
12941299 }
12951300 }
12961301 }
@@ -1316,8 +1321,7 @@ int process_node(int in_xiso, dir_node* node, char* in_path, modes in_mode, dir_
13161321 err = extract_file (in_xiso , node , in_mode , in_path );
13171322 }
13181323 else {
1319- exiso_log ("%s%s (%u bytes)" , in_path , node -> filename , node -> file_size ); flush ();
1320- exiso_log ("\n" );
1324+ exiso_log ("\n%s%s (%u bytes)" , in_path , node -> filename , node -> file_size ); flush ();
13211325 }
13221326
13231327 ++ s_total_files ;
@@ -1609,8 +1613,9 @@ int extract_file( int in_xiso, dir_node *in_file, modes in_mode , char* path) {
16091613 if ( ! err && lseek ( in_xiso , (xoff_t ) in_file -> start_sector * XISO_SECTOR_SIZE + s_xbox_disc_lseek , SEEK_SET ) == -1 ) seek_err ();
16101614
16111615 if ( ! err ) {
1616+ exiso_log ("\n" );
16121617 if (in_file -> file_size == 0 ) {
1613- exiso_log ("%s%s%s (0 bytes) [100%%]%s \r" , in_mode == k_extract ? "extracting " : "" , path , in_file -> filename , "" );
1618+ exiso_log ("%s%s%s (0 bytes) [100%%]\r" , in_mode == k_extract ? "extracting " : "" , path , in_file -> filename );
16141619 }
16151620 else {
16161621 i = 0 ;
@@ -1628,22 +1633,20 @@ int extract_file( int in_xiso, dir_node *in_file, modes in_mode , char* path) {
16281633 }
16291634 totalsize += read_size ;
16301635 totalpercent = (totalsize * 100.0f ) / in_file -> file_size ;
1631- exiso_log ("%s%s%s (%u bytes) [%.1f%%]%s \r" , in_mode == k_extract ? "extracting " : "" , path , in_file -> filename , in_file -> file_size , totalpercent , "" );
1636+ exiso_log ("%s%s%s (%u bytes) [%.1f%%]\r" , in_mode == k_extract ? "extracting " : "" , path , in_file -> filename , in_file -> file_size , totalpercent );
16321637
16331638 i += read_size ;
16341639 size = min (in_file -> file_size - i , READWRITE_BUFFER_SIZE );
16351640 } while (i < in_file -> file_size && read_size > 0 );
16361641 if (!err && i < in_file -> file_size ) {
1637- exiso_warn ("\nWARNING: File %s is truncated. Reported size: %u bytes, read size: %u bytes!" , in_file -> filename , in_file -> file_size , i );
1642+ exiso_warn ("File %s is truncated. Reported size: %u bytes, read size: %u bytes!" , in_file -> filename , in_file -> file_size , i );
16381643 in_file -> file_size = i ;
16391644 }
16401645 }
16411646 if (in_mode == k_extract ) close (out );
16421647 }
16431648 }
16441649
1645- if ( ! err ) exiso_log ( "\n" );
1646-
16471650 return err ;
16481651}
16491652
@@ -1671,7 +1674,7 @@ int write_tree( dir_node_avl *in_avl, write_tree_context *in_context, int in_dep
16711674 else { if ( asprintf ( & context .path , "%c" , PATH_CHAR ) == -1 ) mem_err (); }
16721675
16731676 if ( ! err ) {
1674- exiso_log ( "adding %s (0 bytes) [OK]\n " , context .path );
1677+ exiso_log ( "\nadding %s (0 bytes) [OK]" , context .path );
16751678
16761679 if ( in_avl -> subdirectory != EMPTY_SUBDIRECTORY ) {
16771680 context .xiso = in_context -> xiso ;
@@ -1730,7 +1733,7 @@ int write_file( dir_node_avl *in_avl, write_tree_context *in_context, int in_dep
17301733 }
17311734
17321735 if ( ! err ) {
1733- exiso_log ( "adding %s%s (%u bytes) " , in_context -> path , in_avl -> filename , in_avl -> file_size ); flush ();
1736+ exiso_log ( "\nadding %s%s (%u bytes) " , in_context -> path , in_avl -> filename , in_avl -> file_size ); flush ();
17341737
17351738 i = 0 ;
17361739 bytes = in_avl -> file_size ;
@@ -1780,10 +1783,10 @@ int write_file( dir_node_avl *in_avl, write_tree_context *in_context, int in_dep
17801783 memset (buf , XISO_PAD_BYTE , bytes );
17811784 if (write (in_context -> xiso , buf , bytes ) != (int )bytes ) write_err ();
17821785 }
1783- exiso_log (err ? "failed\n " : "[OK]\n " );
1786+ exiso_log (err ? "failed" : "[OK]" );
17841787
17851788 if (!err && i != in_avl -> file_size ) {
1786- exiso_warn ("WARNING: File %s is truncated. Reported size: %u bytes, wrote size: %u bytes!\n " , in_avl -> filename , i , in_avl -> file_size );
1789+ exiso_warn ("File %s is truncated. Reported size: %u bytes, wrote size: %u bytes!" , in_avl -> filename , i , in_avl -> file_size );
17871790 }
17881791
17891792 if (!err ) {
@@ -1954,7 +1957,7 @@ int generate_avl_tree_local( dir_node_avl **out_root, int *io_n ) {
19541957 } else if ( S_ISREG ( sb .st_mode ) ) {
19551958 empty_dir = false;
19561959 if ( sb .st_size > ULONG_MAX ) {
1957- log_err ( __FILE__ , __LINE__ , "file %s is too large for xiso, skipping...\n " , avl -> filename );
1960+ log_err ( __FILE__ , __LINE__ , "file %s is too large for xiso, skipping..." , avl -> filename );
19581961 free ( avl -> filename );
19591962 free ( avl );
19601963 continue ;
@@ -1968,7 +1971,7 @@ int generate_avl_tree_local( dir_node_avl **out_root, int *io_n ) {
19681971 }
19691972 }
19701973 if ( ! err ) {
1971- if ( avl_insert ( out_root , avl ) == k_avl_error ) misc_err ( "error inserting file %s into tree (duplicate filename?)\n " , avl -> filename , 0 , 0 );
1974+ if ( avl_insert ( out_root , avl ) == k_avl_error ) misc_err ( "error inserting file %s into tree (duplicate filename?)" , avl -> filename );
19721975 } else {
19731976 if ( avl ) {
19741977 if ( avl -> filename ) free ( avl -> filename );
0 commit comments