*/
#include <acess.h>
#include <disktool_common.h>
+#include <Storage/LVM/include/lvm.h>
// === IMPORTS ===
extern int NativeFS_Install(char **Arguments);
// === PROTOTYPES ===
void DiskTool_Initialise(void) __attribute__((constructor(101)));
int DiskTool_int_TranslateOpen(const char *File, int Mode);
+ int DiskTook_LVM_Read(void *Handle, Uint64 Block, size_t BlockCount, void *Dest);
+ int DiskTook_LVM_Write(void *Handle, Uint64 Block, size_t BlockCount, const void *Dest);
+
+// === GLOBALS ===
+tLVM_VolType gDiskTool_VolumeType = {
+ .Name = "DiskTool",
+ .Read = DiskTook_LVM_Read,
+ .Write = DiskTook_LVM_Write
+};
// === CODE ===
void DiskTool_Initialise(void)
VFS_Mount("/", "/Native", "nativefs", "");
}
+int DiskTool_RegisterLVM(const char *Identifier, const char *Path)
+{
+ int fd = DiskTool_int_TranslateOpen(Path, VFS_OPENFLAG_READ|VFS_OPENFLAG_WRITE);
+ if(fd == -1)
+ return -1;
+ VFS_Seek(fd, 0, SEEK_END);
+ LVM_AddVolume( &gDiskTool_VolumeType, Identifier, (void*)(tVAddr)fd, 512, VFS_Tell(fd)/512);
+ return 0;
+}
+
int DiskTool_MountImage(const char *Identifier, const char *Path)
{
// Validate Identifier and make mountpoint string
return 0;
}
+int DiskTook_LVM_Read(void *Handle, Uint64 Block, size_t BlockCount, void *Dest)
+{
+ VFS_ReadAt( (int)(tVAddr)Handle, Block*512, BlockCount*512, Dest);
+ return 0;
+}
+int DiskTook_LVM_Write(void *Handle, Uint64 Block, size_t BlockCount, const void *Dest)
+{
+ VFS_WriteAt( (int)(tVAddr)Handle, Block*512, BlockCount*512, Dest);
+ return 0;
+}
+
// --- Internal helpers ---
int DiskTool_int_TranslateOpen(const char *File, int Flags)
{