2009-05-03 20:53:31 +02:00
|
|
|
#ifndef WIIDISC_H
|
|
|
|
#define WIIDISC_H
|
|
|
|
#include <stdio.h>
|
|
|
|
#include "libwbfs_os.h" // this file is provided by the project wanting to compile libwbfs and wiidisc
|
|
|
|
#ifdef __cplusplus
|
2010-09-19 01:16:05 +02:00
|
|
|
extern "C"
|
|
|
|
{
|
2009-05-03 20:53:31 +02:00
|
|
|
#endif /* __cplusplus */
|
|
|
|
#if 0 //removes extra automatic indentation by editors
|
2010-09-19 01:16:05 +02:00
|
|
|
}
|
2009-05-03 20:53:31 +02:00
|
|
|
#endif
|
2010-09-24 02:48:03 +02:00
|
|
|
// callback definition. Return 1 on fatal error (callback is supposed to make retries until no hopes..)
|
|
|
|
// offset points 32bit words, count counts bytes
|
|
|
|
typedef int (*read_wiidisc_callback_t)(void*fp, u32 offset, u32 count, void*iobuf);
|
2009-05-03 20:53:31 +02:00
|
|
|
|
2010-09-24 02:48:03 +02:00
|
|
|
typedef enum
|
|
|
|
{
|
|
|
|
UPDATE_PARTITION_TYPE = 0, GAME_PARTITION_TYPE, OTHER_PARTITION_TYPE,
|
|
|
|
// value in between selects partition types of that value
|
|
|
|
ALL_PARTITIONS = 0xffffffff - 3,
|
|
|
|
REMOVE_UPDATE_PARTITION, // keeps game + channel installers
|
|
|
|
ONLY_GAME_PARTITION,
|
|
|
|
} partition_selector_t;
|
2009-05-03 20:53:31 +02:00
|
|
|
|
2010-09-24 02:48:03 +02:00
|
|
|
typedef struct wiidisc_s
|
|
|
|
{
|
|
|
|
read_wiidisc_callback_t read;
|
|
|
|
void *fp;
|
|
|
|
u8 *sector_usage_table;
|
2010-09-19 01:16:05 +02:00
|
|
|
|
2010-09-24 02:48:03 +02:00
|
|
|
// everything points 32bit words.
|
|
|
|
u32 disc_raw_offset;
|
|
|
|
u32 partition_raw_offset;
|
|
|
|
u32 partition_data_offset;
|
|
|
|
u32 partition_data_size;
|
|
|
|
u32 partition_block;
|
2009-05-03 20:53:31 +02:00
|
|
|
|
2010-09-24 02:48:03 +02:00
|
|
|
u8 *tmp_buffer;
|
|
|
|
u8 *tmp_buffer2;
|
|
|
|
u8 disc_key[16];
|
|
|
|
int dont_decrypt;
|
2009-05-03 20:53:31 +02:00
|
|
|
|
2010-09-24 02:48:03 +02:00
|
|
|
partition_selector_t part_sel;
|
2009-05-03 20:53:31 +02:00
|
|
|
|
2010-09-24 02:48:03 +02:00
|
|
|
char *extract_pathname;
|
|
|
|
u8 *extracted_buffer;
|
|
|
|
int extracted_size;
|
|
|
|
} wiidisc_t;
|
2009-05-03 20:53:31 +02:00
|
|
|
|
2010-09-24 02:48:03 +02:00
|
|
|
wiidisc_t *wd_open_disc(read_wiidisc_callback_t read, void*fp);
|
|
|
|
void wd_close_disc(wiidisc_t *);
|
|
|
|
// returns a buffer allocated with wbfs_ioalloc() or NULL if not found of alloc error
|
|
|
|
u8 * wd_extract_file(wiidisc_t *d, partition_selector_t partition_type, char *pathname);
|
2009-05-03 20:53:31 +02:00
|
|
|
|
2010-09-24 02:48:03 +02:00
|
|
|
void wd_build_disc_usage(wiidisc_t *d, partition_selector_t selector, u8* usage_table);
|
2009-05-03 20:53:31 +02:00
|
|
|
|
2010-09-24 02:48:03 +02:00
|
|
|
// effectively remove not copied partition from the partition table.
|
|
|
|
void wd_fix_partition_table(wiidisc_t *d, partition_selector_t selector, u8* partition_table);
|
2010-10-01 17:01:19 +02:00
|
|
|
u8 * wd_get_fst(wiidisc_t *d, partition_selector_t partition_type);
|
2009-05-03 20:53:31 +02:00
|
|
|
|
|
|
|
#if 0
|
|
|
|
{
|
|
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
2010-09-19 01:16:05 +02:00
|
|
|
}
|
2009-05-03 20:53:31 +02:00
|
|
|
#endif /* __cplusplus */
|
|
|
|
|
|
|
|
#endif
|