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 );
@@ -1130,7 +1136,7 @@ int decode_xiso( char *in_xiso, char *in_path, modes in_mode, char **out_iso_pat
11301136 }
11311137 }
11321138
1133- if ( ! err && ! len ) misc_err ( "invalid xiso image name: %s\n " , in_xiso , 0 , 0 );
1139+ if ( ! err && ! len ) misc_err ( "invalid xiso image name: %s" , in_xiso );
11341140
11351141 if ( ! err && in_mode == k_extract && in_path ) {
11361142 if ( ( cwd = getcwd ( nil , 0 ) ) == nil ) mem_err ();
@@ -1143,7 +1149,7 @@ int decode_xiso( char *in_xiso, char *in_path, modes in_mode, char **out_iso_pat
11431149 iso_name = short_name ? short_name : name ;
11441150
11451151 if ( ! err && in_mode != k_rewrite ) {
1146- exiso_log ( "%s %s:\n \n" , in_mode == k_extract ? "extracting" : "listing" , name );
1152+ exiso_log ( "\n %s %s:\n" , in_mode == k_extract ? "extracting" : "listing" , name );
11471153
11481154 if ( in_mode == k_extract ) {
11491155 if ( ! in_path ) {
@@ -1177,7 +1183,7 @@ int decode_xiso( char *in_xiso, char *in_path, modes in_mode, char **out_iso_pat
11771183 }
11781184
11791185 if ( err == err_iso_rewritten ) err = 0 ;
1180- 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 );
1186+ if ( err ) misc_err ( "failed to %s xbox iso image %s" , in_mode == k_rewrite ? "rewrite" : in_mode == k_extract ? "extract" : "list" , name );
11811187
11821188 if ( xiso != -1 ) close ( xiso );
11831189
@@ -1207,7 +1213,7 @@ int traverse_xiso(int in_xiso, xoff_t in_dir_start, uint16_t entry_offset, char*
12071213 if (in_mode == k_generate_avl ) err = (avl_insert (in_root , EMPTY_SUBDIRECTORY ) == k_avl_error );
12081214 }
12091215 else {
1210- exiso_warn ("WARNING: Invalid node found and skipped!\n " );
1216+ exiso_warn ("Invalid node found and skipped!" );
12111217 }
12121218 return err ;
12131219 }
@@ -1249,7 +1255,7 @@ int traverse_xiso(int in_xiso, xoff_t in_dir_start, uint16_t entry_offset, char*
12491255 if (!err ) {
12501256 avl -> file_size = node -> file_size ;
12511257 avl -> old_start_sector = node -> start_sector ;
1252- if (avl_insert (in_root , avl ) == k_avl_error ) misc_err ("this iso appears to be corrupt\n" , 0 , 0 , 0 );
1258+ if (avl_insert (in_root , avl ) == k_avl_error ) misc_err ("this iso appears to be corrupt" );
12531259 }
12541260 }
12551261
@@ -1291,8 +1297,7 @@ int process_node(int in_xiso, dir_node* node, char* in_path, modes in_mode, dir_
12911297 if (!err && (err = chdir (node -> filename ))) chdir_err (node -> filename );
12921298 }
12931299 if (!err && in_mode != k_generate_avl ) {
1294- 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 ();
1295- exiso_log ("\n" );
1300+ 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 ();
12961301 }
12971302 }
12981303 }
@@ -1318,8 +1323,7 @@ int process_node(int in_xiso, dir_node* node, char* in_path, modes in_mode, dir_
13181323 err = extract_file (in_xiso , node , in_mode , in_path );
13191324 }
13201325 else {
1321- exiso_log ("%s%s (%u bytes)" , in_path , node -> filename , node -> file_size ); flush ();
1322- exiso_log ("\n" );
1326+ exiso_log ("\n%s%s (%u bytes)" , in_path , node -> filename , node -> file_size ); flush ();
13231327 }
13241328
13251329 ++ s_total_files ;
@@ -1611,8 +1615,9 @@ int extract_file( int in_xiso, dir_node *in_file, modes in_mode , char* path) {
16111615 if ( ! err && lseek ( in_xiso , (xoff_t ) in_file -> start_sector * XISO_SECTOR_SIZE + s_xbox_disc_lseek , SEEK_SET ) == -1 ) seek_err ();
16121616
16131617 if ( ! err ) {
1618+ exiso_log ("\n" );
16141619 if (in_file -> file_size == 0 ) {
1615- exiso_log ("%s%s%s (0 bytes) [100%%]%s \r" , in_mode == k_extract ? "extracting " : "" , path , in_file -> filename , "" );
1620+ exiso_log ("%s%s%s (0 bytes) [100%%]\r" , in_mode == k_extract ? "extracting " : "" , path , in_file -> filename );
16161621 }
16171622 else {
16181623 i = 0 ;
@@ -1630,22 +1635,20 @@ int extract_file( int in_xiso, dir_node *in_file, modes in_mode , char* path) {
16301635 }
16311636 totalsize += read_size ;
16321637 totalpercent = (totalsize * 100.0f ) / in_file -> file_size ;
1633- exiso_log ("%s%s%s (%u bytes) [%.1f%%]%s \r" , in_mode == k_extract ? "extracting " : "" , path , in_file -> filename , in_file -> file_size , totalpercent , "" );
1638+ exiso_log ("%s%s%s (%u bytes) [%.1f%%]\r" , in_mode == k_extract ? "extracting " : "" , path , in_file -> filename , in_file -> file_size , totalpercent );
16341639
16351640 i += read_size ;
16361641 size = min (in_file -> file_size - i , READWRITE_BUFFER_SIZE );
16371642 } while (i < in_file -> file_size && read_size > 0 );
16381643 if (!err && i < in_file -> file_size ) {
1639- exiso_warn ("\nWARNING: File %s is truncated. Reported size: %u bytes, read size: %u bytes!" , in_file -> filename , in_file -> file_size , i );
1644+ exiso_warn ("File %s is truncated. Reported size: %u bytes, read size: %u bytes!" , in_file -> filename , in_file -> file_size , i );
16401645 in_file -> file_size = i ;
16411646 }
16421647 }
16431648 if (in_mode == k_extract ) close (out );
16441649 }
16451650 }
16461651
1647- if ( ! err ) exiso_log ( "\n" );
1648-
16491652 return err ;
16501653}
16511654
@@ -1673,7 +1676,7 @@ int write_tree( dir_node_avl *in_avl, write_tree_context *in_context, int in_dep
16731676 else { if ( asprintf ( & context .path , "%c" , PATH_CHAR ) == -1 ) mem_err (); }
16741677
16751678 if ( ! err ) {
1676- exiso_log ( "adding %s (0 bytes) [OK]\n " , context .path );
1679+ exiso_log ( "\nadding %s (0 bytes) [OK]" , context .path );
16771680
16781681 if ( in_avl -> subdirectory != EMPTY_SUBDIRECTORY ) {
16791682 context .xiso = in_context -> xiso ;
@@ -1732,7 +1735,7 @@ int write_file( dir_node_avl *in_avl, write_tree_context *in_context, int in_dep
17321735 }
17331736
17341737 if ( ! err ) {
1735- exiso_log ( "adding %s%s (%u bytes) " , in_context -> path , in_avl -> filename , in_avl -> file_size ); flush ();
1738+ exiso_log ( "\nadding %s%s (%u bytes) " , in_context -> path , in_avl -> filename , in_avl -> file_size ); flush ();
17361739
17371740 i = 0 ;
17381741 bytes = in_avl -> file_size ;
@@ -1782,10 +1785,10 @@ int write_file( dir_node_avl *in_avl, write_tree_context *in_context, int in_dep
17821785 memset (buf , XISO_PAD_BYTE , bytes );
17831786 if (write (in_context -> xiso , buf , bytes ) != (int )bytes ) write_err ();
17841787 }
1785- exiso_log (err ? "failed\n " : "[OK]\n " );
1788+ exiso_log (err ? "failed" : "[OK]" );
17861789
17871790 if (!err && i != in_avl -> file_size ) {
1788- exiso_warn ("WARNING: File %s is truncated. Reported size: %u bytes, wrote size: %u bytes!\n " , in_avl -> filename , i , in_avl -> file_size );
1791+ exiso_warn ("File %s is truncated. Reported size: %u bytes, wrote size: %u bytes!" , in_avl -> filename , i , in_avl -> file_size );
17891792 }
17901793
17911794 if (!err ) {
@@ -1956,7 +1959,7 @@ int generate_avl_tree_local( dir_node_avl **out_root, int *io_n ) {
19561959 } else if ( S_ISREG ( sb .st_mode ) ) {
19571960 empty_dir = false;
19581961 if ( sb .st_size > ULONG_MAX ) {
1959- log_err ( __FILE__ , __LINE__ , "file %s is too large for xiso, skipping...\n " , avl -> filename );
1962+ log_err ( __FILE__ , __LINE__ , "file %s is too large for xiso, skipping..." , avl -> filename );
19601963 free ( avl -> filename );
19611964 free ( avl );
19621965 continue ;
@@ -1970,7 +1973,7 @@ int generate_avl_tree_local( dir_node_avl **out_root, int *io_n ) {
19701973 }
19711974 }
19721975 if ( ! err ) {
1973- if ( avl_insert ( out_root , avl ) == k_avl_error ) misc_err ( "error inserting file %s into tree (duplicate filename?)\n " , avl -> filename , 0 , 0 );
1976+ if ( avl_insert ( out_root , avl ) == k_avl_error ) misc_err ( "error inserting file %s into tree (duplicate filename?)" , avl -> filename );
19741977 } else {
19751978 if ( avl ) {
19761979 if ( avl -> filename ) free ( avl -> filename );
0 commit comments