2009-12-19 15:05:31 +01:00
|
|
|
|
|
|
|
// worst case wbfs fragmentation scenario:
|
|
|
|
// 9GB (dual layer) / 2mb (wbfs sector size) = 4608
|
|
|
|
#define MAX_FRAG 20000
|
|
|
|
// max that ehcmodule_frag will allow at the moment is about:
|
|
|
|
// 40000/4/3-1 = 21844
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
2010-09-19 01:16:05 +02:00
|
|
|
extern "C"
|
|
|
|
{
|
2009-12-19 15:05:31 +01:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#include "libwbfs/libwbfs.h"
|
|
|
|
|
2010-09-19 01:16:05 +02:00
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
u32 offset; // file offset, in sectors unit
|
|
|
|
u32 sector;
|
|
|
|
u32 count;
|
|
|
|
} Fragment;
|
2010-02-09 11:59:55 +01:00
|
|
|
|
2010-09-19 01:16:05 +02:00
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
u32 size; // num sectors
|
|
|
|
u32 num; // num fragments
|
|
|
|
u32 maxnum;
|
|
|
|
Fragment frag[MAX_FRAG];
|
|
|
|
} FragList;
|
2010-02-09 11:59:55 +01:00
|
|
|
|
2010-09-19 01:16:05 +02:00
|
|
|
typedef int ( *frag_append_t )( void *ff, u32 offset, u32 sector, u32 count );
|
2010-02-09 11:59:55 +01:00
|
|
|
|
2010-09-19 01:16:05 +02:00
|
|
|
int _FAT_get_fragments ( const char *path, _frag_append_t append_fragment, void *callback_data );
|
2010-02-09 11:59:55 +01:00
|
|
|
|
2010-09-19 01:16:05 +02:00
|
|
|
void frag_init( FragList *ff, int maxnum );
|
|
|
|
int frag_append( FragList *ff, u32 offset, u32 sector, u32 count );
|
|
|
|
int _frag_append( void *ff, u32 offset, u32 sector, u32 count );
|
|
|
|
int frag_concat( FragList *ff, FragList *src );
|
2009-12-19 15:05:31 +01:00
|
|
|
|
|
|
|
// in case a sparse block is requested,
|
|
|
|
// the returned poffset might not be equal to requested offset
|
|
|
|
// the difference should be filled with 0
|
2010-09-19 01:16:05 +02:00
|
|
|
int frag_get( FragList *ff, u32 offset, u32 count,
|
|
|
|
u32 *poffset, u32 *psector, u32 *pcount );
|
2009-12-19 15:05:31 +01:00
|
|
|
|
2010-09-19 01:16:05 +02:00
|
|
|
int frag_remap( FragList *ff, FragList *log, FragList *phy );
|
2009-12-19 15:05:31 +01:00
|
|
|
|
2010-09-19 01:16:05 +02:00
|
|
|
int get_frag_list( u8 *id );
|
|
|
|
int set_frag_list( u8 *id );
|
2009-12-19 15:05:31 +01:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|