X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Tools%2FDiskTool%2Fsrc%2Factions.c;h=5cda5885a10087eaca6b85907f746dc66be8e083;hb=d0b4559f2936f6d9f06be0f7c3c51527a480ec0d;hp=377608dec894161d068ef22c36dfce08bc00ff22;hpb=11dbd684e9a3d907d43d71a3145205f1a86992fb;p=tpg%2Facess2.git diff --git a/Tools/DiskTool/src/actions.c b/Tools/DiskTool/src/actions.c index 377608de..5cda5885 100644 --- a/Tools/DiskTool/src/actions.c +++ b/Tools/DiskTool/src/actions.c @@ -65,10 +65,13 @@ void DiskTool_Cleanup(void) int DiskTool_RegisterLVM(const char *Identifier, const char *Path) { int fd = DiskTool_int_TranslateOpen(Path, VFS_OPENFLAG_READ|VFS_OPENFLAG_WRITE); - if(fd == -1) + if(fd == -1) { + Log_Notice("DiskTool", "Can't open '%s' for LVM %s", Path, Identifier); return -1; + } VFS_Seek(fd, 0, SEEK_END); LVM_AddVolume( &gDiskTool_VolumeType, Identifier, (void*)(tVAddr)fd, 512, VFS_Tell(fd)/512); + Log_Debug("DiskTool", "Registered '%s' for LVM %s", Path, Identifier); return 0; } @@ -81,15 +84,18 @@ int DiskTool_MountImage(const char *Identifier, const char *Path) // Translate path size_t tpath_len = DiskTool_int_TranslatePath(NULL, Path); - if(tpath_len == -1) - return -1; char tpath[tpath_len-1]; DiskTool_int_TranslatePath(tpath, Path); // Call mount VFS_MkDir(mountpoint); // TODO: Detect filesystem? - return VFS_Mount(tpath, mountpoint, "fat", ""); + return VFS_Mount(tpath, mountpoint, "", ""); +} + +int DiskTool_MkDir(const char *Directory) +{ + return -1; } int DiskTool_Copy(const char *Source, const char *Destination) @@ -135,7 +141,14 @@ int DiskTool_ListDirectory(const char *Directory) char name[256]; while( VFS_ReadDir(fd, name) ) { - Log("- %s", name); + tFInfo fi; + int child = VFS_OpenChild(fd, name, 0); + if( child != -1 ) + { + VFS_FInfo(child, &fi, 0); + VFS_Close(child); + } + Log("- %02x %6lli %s", fi.flags, fi.size, name); } VFS_Close(fd); @@ -143,15 +156,36 @@ int DiskTool_ListDirectory(const char *Directory) return 0; } -int DiskTool_LVM_Read(void *Handle, Uint64 Block, size_t BlockCount, void *Dest) +int DiskTool_Cat(const char *File) { - VFS_ReadAt( (int)(tVAddr)Handle, Block*512, BlockCount*512, Dest); + int src = DiskTool_int_TranslateOpen(File, VFS_OPENFLAG_READ); + if( src == -1 ) { + Log_Error("DiskTool", "Unable to open %s for reading", File); + return -1; + } + + char buf[1024]; + size_t len, total = 0; + while( (len = VFS_Read(src, sizeof(buf), buf)) == sizeof(buf) ) { + _fwrite_stdout(len, buf); + total += len; + } + _fwrite_stdout(len, buf); + total += len; + + Log_Notice("DiskTool", "%i bytes from %s", total, File); + + VFS_Close(src); return 0; } + +int DiskTool_LVM_Read(void *Handle, Uint64 Block, size_t BlockCount, void *Dest) +{ + return VFS_ReadAt( (int)(tVAddr)Handle, Block*512, BlockCount*512, Dest) / 512; +} int DiskTool_LVM_Write(void *Handle, Uint64 Block, size_t BlockCount, const void *Dest) { - VFS_WriteAt( (int)(tVAddr)Handle, Block*512, BlockCount*512, Dest); - return 0; + return VFS_WriteAt( (int)(tVAddr)Handle, Block*512, BlockCount*512, Dest) / 512; } void DiskTool_LVM_Cleanup(void *Handle) { @@ -162,7 +196,7 @@ void DiskTool_LVM_Cleanup(void *Handle) int DiskTool_int_TranslateOpen(const char *File, int Flags) { size_t tpath_len = DiskTool_int_TranslatePath(NULL, File); - if(tpath_len == -1) + if(tpath_len == 0) return -1; char tpath[tpath_len-1]; DiskTool_int_TranslatePath(tpath, File);