|
441 | 441 | #endif
|
442 | 442 |
|
443 | 443 |
|
444 |
| -#define GLOBAL_LSEEK_OFFSET 0xFD90000ul |
445 |
| -#define XGD3_LSEEK_OFFSET 0x2080000ul |
| 444 | +#define GLOBAL_LSEEK_OFFSET 0x0FD90000ul |
| 445 | +#define XGD3_LSEEK_OFFSET 0x02080000ul |
| 446 | +#define XGD1_LSEEK_OFFSET 0x18300000ul |
446 | 447 |
|
447 | 448 | #define n_sectors( size ) ( ( size ) / XISO_SECTOR_SIZE + ( ( size ) % XISO_SECTOR_SIZE ? 1 : 0 ) )
|
448 | 449 |
|
@@ -882,18 +883,24 @@ int verify_xiso( int in_xiso, int32_t *out_root_dir_sector, int32_t *out_root_di
|
882 | 883 | if ( ! err && read( in_xiso, buffer, XISO_HEADER_DATA_LENGTH ) != XISO_HEADER_DATA_LENGTH ) read_err();
|
883 | 884 | if ( ! err && memcmp( buffer, XISO_HEADER_DATA, XISO_HEADER_DATA_LENGTH ) )
|
884 | 885 | {
|
885 |
| - if ( lseek( in_xiso, (xoff_t) XISO_HEADER_OFFSET + GLOBAL_LSEEK_OFFSET, SEEK_SET ) == -1 ) seek_err(); |
886 |
| - if ( ! err && read( in_xiso, buffer, XISO_HEADER_DATA_LENGTH ) != XISO_HEADER_DATA_LENGTH ) read_err(); |
887 |
| - if ( ! err && memcmp( buffer, XISO_HEADER_DATA, XISO_HEADER_DATA_LENGTH ) ) { |
888 |
| - |
889 |
| - if ( lseek( in_xiso, (xoff_t) XISO_HEADER_OFFSET + XGD3_LSEEK_OFFSET, SEEK_SET ) == -1 ) seek_err(); |
890 |
| - if ( ! err && read( in_xiso, buffer, XISO_HEADER_DATA_LENGTH ) != XISO_HEADER_DATA_LENGTH ) read_err(); |
891 |
| - 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 ) |
892 |
| - else s_xbox_disc_lseek = XGD3_LSEEK_OFFSET; |
893 |
| - } |
894 |
| - else s_xbox_disc_lseek = GLOBAL_LSEEK_OFFSET; |
895 |
| - } |
896 |
| - else s_xbox_disc_lseek = 0; |
| 886 | + if ( lseek( in_xiso, (xoff_t) XISO_HEADER_OFFSET + GLOBAL_LSEEK_OFFSET, SEEK_SET ) == -1 ) seek_err(); |
| 887 | + if ( ! err && read( in_xiso, buffer, XISO_HEADER_DATA_LENGTH ) != XISO_HEADER_DATA_LENGTH ) read_err(); |
| 888 | + if ( ! err && memcmp( buffer, XISO_HEADER_DATA, XISO_HEADER_DATA_LENGTH ) ) |
| 889 | + { |
| 890 | + if ( lseek( in_xiso, (xoff_t) XISO_HEADER_OFFSET + XGD3_LSEEK_OFFSET, SEEK_SET ) == -1 ) seek_err(); |
| 891 | + if ( ! err && read( in_xiso, buffer, XISO_HEADER_DATA_LENGTH ) != XISO_HEADER_DATA_LENGTH ) read_err(); |
| 892 | + if (!err && memcmp(buffer, XISO_HEADER_DATA, XISO_HEADER_DATA_LENGTH)) |
| 893 | + { |
| 894 | + if (lseek(in_xiso, (xoff_t)XISO_HEADER_OFFSET + XGD1_LSEEK_OFFSET, SEEK_SET) == -1) seek_err(); |
| 895 | + if (!err && read(in_xiso, buffer, XISO_HEADER_DATA_LENGTH) != XISO_HEADER_DATA_LENGTH) read_err(); |
| 896 | + 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) |
| 897 | + else s_xbox_disc_lseek = XGD1_LSEEK_OFFSET; |
| 898 | + } |
| 899 | + else s_xbox_disc_lseek = XGD3_LSEEK_OFFSET; |
| 900 | + } |
| 901 | + else s_xbox_disc_lseek = GLOBAL_LSEEK_OFFSET; |
| 902 | + } |
| 903 | + else s_xbox_disc_lseek = 0; |
897 | 904 |
|
898 | 905 | // read root directory information
|
899 | 906 | if ( ! err && read( in_xiso, out_root_dir_sector, XISO_SECTOR_OFFSET_SIZE ) != XISO_SECTOR_OFFSET_SIZE ) read_err();
|
@@ -1022,7 +1029,7 @@ int create_xiso( char *in_root_directory, char *in_output_directory, dir_node_av
|
1022 | 1029 | }
|
1023 | 1030 | if ( ! err ) {
|
1024 | 1031 | if ( in_root ) {
|
1025 |
| - if ( lseek( in_xiso, (xoff_t) XISO_HEADER_OFFSET + XISO_HEADER_DATA_LENGTH + XISO_SECTOR_OFFSET_SIZE + XISO_DIRTABLE_SIZE, SEEK_SET ) == -1 ) seek_err(); |
| 1032 | + if ( lseek( in_xiso, (xoff_t) XISO_HEADER_OFFSET + XISO_HEADER_DATA_LENGTH + XISO_SECTOR_OFFSET_SIZE + XISO_DIRTABLE_SIZE + s_xbox_disc_lseek, SEEK_SET ) == -1 ) seek_err(); |
1026 | 1033 | if ( ! err && read( in_xiso, buf, XISO_FILETIME_SIZE ) != XISO_FILETIME_SIZE ) read_err();
|
1027 | 1034 | if ( ! err && write( xiso, buf, XISO_FILETIME_SIZE ) != XISO_FILETIME_SIZE ) write_err();
|
1028 | 1035 |
|
@@ -1738,7 +1745,7 @@ int write_file( dir_node_avl *in_avl, write_tree_context *in_context, int in_dep
|
1738 | 1745 | if ( in_context->from == -1 ) {
|
1739 | 1746 | if ( ( fd = open( in_avl->filename, READFLAGS, 0 ) ) == -1 ) open_err( in_avl->filename );
|
1740 | 1747 | } else {
|
1741 |
| - if ( lseek( fd = in_context->from, (xoff_t) in_avl->old_start_sector * XISO_SECTOR_SIZE, SEEK_SET ) == -1 ) seek_err(); |
| 1748 | + if ( lseek( fd = in_context->from, (xoff_t) in_avl->old_start_sector * XISO_SECTOR_SIZE + s_xbox_disc_lseek, SEEK_SET ) == -1 ) seek_err(); |
1742 | 1749 | }
|
1743 | 1750 | }
|
1744 | 1751 |
|
|
0 commit comments