Kernel - Slight reworks to timer code
[tpg/acess2.git] / Modules / Filesystems / Ext2 / ext2.c
index ac3d7e5..7c4bf97 100644 (file)
 #include "ext2_common.h"\r
 #include <modules.h>\r
 \r
+// === IMPORTS ===\r
+extern tVFS_NodeType   gExt2_DirType;\r
+\r
 // === PROTOTYPES ===\r
  int   Ext2_Install(char **Arguments);\r
 // Interface Functions\r
-tVFS_Node      *Ext2_InitDevice(char *Device, char **Options);\r
+tVFS_Node      *Ext2_InitDevice(const char *Device, const char **Options);\r
 void           Ext2_Unmount(tVFS_Node *Node);\r
 void           Ext2_CloseFile(tVFS_Node *Node);\r
 // Internal Helpers\r
@@ -44,13 +47,12 @@ int Ext2_Install(char **Arguments)
 }\r
 \r
 /**\r
- \fn tVFS_Node *Ext2_InitDevice(char *Device, char **Options)\r
  \brief Initializes a device to be read by by the driver\r
  \param Device String - Device to read from\r
  \param Options        NULL Terminated array of option strings\r
  \return Root Node\r
 */\r
-tVFS_Node *Ext2_InitDevice(char *Device, char **Options)\r
+tVFS_Node *Ext2_InitDevice(const char *Device, const char **Options)\r
 {\r
        tExt2_Disk      *disk;\r
         int    fd;\r
@@ -73,7 +75,8 @@ tVFS_Node *Ext2_InitDevice(char *Device, char **Options)
        \r
        // Sanity Check Magic value\r
        if(sb.s_magic != 0xEF53) {\r
-               Log_Warning("EXT2", "Volume '%s' is not an EXT2 volume", Device);\r
+               Log_Warning("EXT2", "Volume '%s' is not an EXT2 volume (0x%x != 0xEF53)",\r
+                       Device, sb.s_magic);\r
                VFS_Close(fd);\r
                LEAVE('n');\r
                return NULL;\r
@@ -130,10 +133,8 @@ tVFS_Node *Ext2_InitDevice(char *Device, char **Options)
        disk->RootNode.ImplPtr = disk;  // Save disk pointer\r
        disk->RootNode.Size = -1;       // Fill in later (on readdir)\r
        disk->RootNode.Flags = VFS_FFLAG_DIRECTORY;\r
-       \r
-       disk->RootNode.ReadDir = Ext2_ReadDir;\r
-       disk->RootNode.FindDir = Ext2_FindDir;\r
-       //disk->RootNode.Relink = Ext2_Relink;\r
+\r
+       disk->RootNode.Type = &gExt2_DirType;\r
        \r
        // Complete root node\r
        disk->RootNode.UID = inode.i_uid;\r
@@ -320,15 +321,17 @@ void Ext2_int_UpdateSuperblock(tExt2_Disk *Disk)
        if(ngrp <= 1)   return;\r
        VFS_WriteAt(Disk->FD, 1*bpg*Disk->BlockSize, 1024, &Disk->SuperBlock);\r
        \r
+       #define INT_MAX (((long long int)1<<(sizeof(int)*8))-1)\r
+       \r
        // Powers of 3\r
-       for( i = 3; i < ngrp; i *= 3 )\r
+       for( i = 3; i < ngrp && i < INT_MAX/3; i *= 3 )\r
                VFS_WriteAt(Disk->FD, i*bpg*Disk->BlockSize, 1024, &Disk->SuperBlock);\r
        \r
        // Powers of 5\r
-       for( i = 5; i < ngrp; i *= 5 )\r
+       for( i = 5; i < ngrp && i < INT_MAX/5; i *= 5 )\r
                VFS_WriteAt(Disk->FD, i*bpg*Disk->BlockSize, 1024, &Disk->SuperBlock);\r
        \r
        // Powers of 7\r
-       for( i = 7; i < ngrp; i *= 7 )\r
+       for( i = 7; i < ngrp && i < INT_MAX/7; i *= 7 )\r
                VFS_WriteAt(Disk->FD, i*bpg*Disk->BlockSize, 1024, &Disk->SuperBlock);\r
 }\r

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