DiskTool - Autodetection of filesystems and better debugging
authorJohn Hodge <[email protected]>
Sat, 14 Jul 2012 12:26:40 +0000 (20:26 +0800)
committerJohn Hodge <[email protected]>
Sat, 14 Jul 2012 12:26:40 +0000 (20:26 +0800)
AcessNative/acesskernel_src/nativefs.c
Tools/DiskTool/src/Makefile
Tools/DiskTool/src/actions.c
Tools/DiskTool/src/logging.c
Tools/DiskTool/src/main.c

index e51f286..7c20b69 100644 (file)
@@ -48,9 +48,9 @@ tVFS_NodeType gNativeFS_DirNodeType = {
        .Close = NativeFS_Close\r
 };\r
 tVFS_Driver    gNativeFS_Driver = {\r
-       "nativefs", 0,\r
-       NativeFS_Mount, NativeFS_Unmount,\r
-       NULL,\r
+       .Name = "nativefs",\r
+       .InitDevice = NativeFS_Mount,\r
+       .Unmount = NativeFS_Unmount\r
 };\r
 \r
 // === CODE ===\r
index b232567..a1282ac 100644 (file)
@@ -19,7 +19,7 @@ K_OBJ += vfs/nodecache.o vfs/mount.o vfs/memfile.o # vfs/select.o
 K_OBJ += vfs/fs/root.o vfs/fs/devfs.o
 K_OBJ += drvutil_disk.o drv/proc.o
 # Modules
-MODULES := Storage/LVM Filesystems/FAT Filesystems/Ext2
+MODULES := Storage/LVM Filesystems/FAT Filesystems/Ext2 Filesystems/NTFS
 # Local kernel soruces (same as above, but located in same directory as Makefile)
 L_OBJ = vfs_handles.o threads.o nativefs.o time.o actions.o
 # Native Sources (compiled as usual)
index 377608d..d1fb703 100644 (file)
@@ -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;
 }
 
@@ -89,7 +92,7 @@ int DiskTool_MountImage(const char *Identifier, const char *Path)
        // Call mount
        VFS_MkDir(mountpoint);
        // TODO: Detect filesystem?
-       return VFS_Mount(tpath, mountpoint, "fat", "");
+       return VFS_Mount(tpath, mountpoint, "", "");
 }
 
 int DiskTool_Copy(const char *Source, const char *Destination)
@@ -145,13 +148,11 @@ int DiskTool_ListDirectory(const char *Directory)
 
 int DiskTool_LVM_Read(void *Handle, Uint64 Block, size_t BlockCount, void *Dest)
 {
-       VFS_ReadAt( (int)(tVAddr)Handle, Block*512, BlockCount*512, Dest);
-       return 0;
+       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)
 {
index fde9055..2b03c6f 100644 (file)
@@ -7,6 +7,7 @@
 #include <stdint.h>
 #include <acess_logging.h>
 #include <ctype.h>
+#include <inttypes.h>
 
 #define LOGHDR(col,type)       fprintf(stderr, "\e["col"m[%-8.8s]"type" ", Ident)
 #define LOGTAIL()      fprintf(stderr, "\e[0m\n")
@@ -22,7 +23,7 @@
 // === CODE ===
 void Log_KernelPanic(const char *Ident, const char *Message, ...) {
        PUTERR("35", "k")
-       exit(-1);
+       abort();
 }
 void Log_Panic(const char *Ident, const char *Message, ...)
        PUTERR("34", "p")
@@ -116,6 +117,9 @@ void Debug_TraceEnter(const char *Function, const char *Format, ...)
                case 'x':
                        fprintf(stderr, "0x%x", va_arg(args,unsigned int));
                        break;
+               case 'X':
+                       fprintf(stderr, "0x%"PRIx64, va_arg(args,uint64_t));
+                       break;
                default:
                        va_arg(args,uintptr_t);
                        fprintf(stderr, "?");
@@ -177,6 +181,9 @@ void Debug_TraceLeave(const char *Function, char Type, ...)
        case 'x':
                fprintf(stderr, " 0x%x", va_arg(args, unsigned int));
                break;
+       case 'X':
+               fprintf(stderr, " 0x%"PRIx64, va_arg(args,uint64_t));
+               break;
        case 's':
                fprintf(stderr, " \"%s\"", va_arg(args, const char *));
                break;
index 823bb2b..c3c4166 100644 (file)
@@ -68,6 +68,8 @@ int main(int argc, char *argv[])
                        i += 2;
                        continue ;
                }
+       
+               fprintf(stderr, "Unknown command '%s'\n", argv[i]);
        }
        
        DiskTool_Cleanup();

UCC git Repository :: git.ucc.asn.au