git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Modules/Ext2 - Fixed bugs in read/write support
[tpg/acess2.git]
/
KernelLand
/
Modules
/
Filesystems
/
Ext2
/
dir.c
diff --git
a/KernelLand/Modules/Filesystems/Ext2/dir.c
b/KernelLand/Modules/Filesystems/Ext2/dir.c
index
a0a5f14
..
f04a60c
100644
(file)
--- a/
KernelLand/Modules/Filesystems/Ext2/dir.c
+++ b/
KernelLand/Modules/Filesystems/Ext2/dir.c
@@
-44,7
+44,7
@@
tVFS_NodeType gExt2_FileType = {
*/
int Ext2_ReadDir(tVFS_Node *Node, int Pos, char Dest[FILENAME_MAX])
{
*/
int Ext2_ReadDir(tVFS_Node *Node, int Pos, char Dest[FILENAME_MAX])
{
- tExt2_Inode
inode
;
+ tExt2_Inode
*inode = (void*)(Node+1)
;
tExt2_DirEnt dirent;
Uint64 Base; // Block's Base Address
int block = 0;
tExt2_DirEnt dirent;
Uint64 Base; // Block's Base Address
int block = 0;
@@
-56,17
+56,16
@@
int Ext2_ReadDir(tVFS_Node *Node, int Pos, char Dest[FILENAME_MAX])
ENTER("pNode iPos", Node, Pos);
// Read directory's inode
ENTER("pNode iPos", Node, Pos);
// Read directory's inode
- Ext2_int_ReadInode(disk, Node->Inode, &inode);
- size = inode.i_size;
+ size = inode->i_size;
- LOG("inode={.i_block[0]= 0x%x, .i_size=0x%x}", inode
.i_block[0], inode.
i_size);
+ LOG("inode={.i_block[0]= 0x%x, .i_size=0x%x}", inode
->i_block[0], inode->
i_size);
// Find Entry
// Get First Block
// - Do this ourselves as it is a simple operation
// Find Entry
// Get First Block
// - Do this ourselves as it is a simple operation
- Base = inode
.
i_block[0] * disk->BlockSize;
+ Base = inode
->
i_block[0] * disk->BlockSize;
// Scan directory
// Scan directory
- while(Pos -- && size > 0 && size <= inode
.
i_size)
+ while(Pos -- && size > 0 && size <= inode
->
i_size)
{
VFS_ReadAt( disk->FD, Base+ofs, sizeof(tExt2_DirEnt), &dirent);
ofs += dirent.rec_len;
{
VFS_ReadAt( disk->FD, Base+ofs, sizeof(tExt2_DirEnt), &dirent);
ofs += dirent.rec_len;
@@
-80,7
+79,7
@@
int Ext2_ReadDir(tVFS_Node *Node, int Pos, char Dest[FILENAME_MAX])
entNum-1, Node->Inode);
}
ofs = 0;
entNum-1, Node->Inode);
}
ofs = 0;
- Base = Ext2_int_GetBlockAddr( disk, inode
.
i_block, block );
+ Base = Ext2_int_GetBlockAddr( disk, inode
->
i_block, block );
if( Base == 0 ) {
size = 0;
break;
if( Base == 0 ) {
size = 0;
break;
@@
-89,7
+88,7
@@
int Ext2_ReadDir(tVFS_Node *Node, int Pos, char Dest[FILENAME_MAX])
}
// Check for the end of the list
}
// Check for the end of the list
- if(size <= 0 || size > inode
.
i_size) {
+ if(size <= 0 || size > inode
->
i_size) {
LEAVE('i', -ENOENT);
return -ENOENT;
}
LEAVE('i', -ENOENT);
return -ENOENT;
}
@@
-127,7
+126,7
@@
int Ext2_ReadDir(tVFS_Node *Node, int Pos, char Dest[FILENAME_MAX])
tVFS_Node *Ext2_FindDir(tVFS_Node *Node, const char *Filename, Uint Flags)
{
tExt2_Disk *disk = Node->ImplPtr;
tVFS_Node *Ext2_FindDir(tVFS_Node *Node, const char *Filename, Uint Flags)
{
tExt2_Disk *disk = Node->ImplPtr;
- tExt2_Inode
inode
;
+ tExt2_Inode
*inode = (void*)(Node+1)
;
tExt2_DirEnt dirent;
Uint64 Base; // Block's Base Address
int block = 0;
tExt2_DirEnt dirent;
Uint64 Base; // Block's Base Address
int block = 0;
@@
-137,12
+136,11
@@
tVFS_Node *Ext2_FindDir(tVFS_Node *Node, const char *Filename, Uint Flags)
int filenameLen = strlen(Filename);
// Read directory's inode
int filenameLen = strlen(Filename);
// Read directory's inode
- Ext2_int_ReadInode(disk, Node->Inode, &inode);
- size = inode.i_size;
+ size = inode->i_size;
// Get First Block
// - Do this ourselves as it is a simple operation
// Get First Block
// - Do this ourselves as it is a simple operation
- Base = inode
.
i_block[0] * disk->BlockSize;
+ Base = inode
->
i_block[0] * disk->BlockSize;
// Find File
while(size > 0)
{
// Find File
while(size > 0)
{
@@
-163,7
+161,7
@@
tVFS_Node *Ext2_FindDir(tVFS_Node *Node, const char *Filename, Uint Flags)
entNum-1, Node->Inode);
}
ofs = 0;
entNum-1, Node->Inode);
}
ofs = 0;
- Base = Ext2_int_GetBlockAddr( disk, inode
.
i_block, block );
+ Base = Ext2_int_GetBlockAddr( disk, inode
->
i_block, block );
}
}
}
}
@@
-231,7
+229,7
@@
int Ext2_Unlink(tVFS_Node *Node, const char *OldName)
int Ext2_Link(tVFS_Node *Node, const char *Name, tVFS_Node *Child)
{
tExt2_Disk *disk = Node->ImplPtr;
int Ext2_Link(tVFS_Node *Node, const char *Name, tVFS_Node *Child)
{
tExt2_Disk *disk = Node->ImplPtr;
- tExt2_Inode
inode
;
+ tExt2_Inode
*inode = (void*)(Node+1)
;
tExt2_DirEnt *dirent;
tExt2_DirEnt newEntry;
Uint64 base; // Block's Base Address
tExt2_DirEnt *dirent;
tExt2_DirEnt newEntry;
Uint64 base; // Block's Base Address
@@
-246,19
+244,15
@@
int Ext2_Link(tVFS_Node *Node, const char *Name, tVFS_Node *Child)
void *blockData = malloc(disk->BlockSize);
void *blockData = malloc(disk->BlockSize);
- // Read child inode (get's the file type)
- Ext2_int_ReadInode(disk, Child->Inode, &inode);
-
// Create a stub entry
newEntry.inode = Child->Inode;
newEntry.name_len = strlen(Name);
newEntry.rec_len = ((newEntry.name_len+3)&~3) + EXT2_DIRENT_SIZE;
// Create a stub entry
newEntry.inode = Child->Inode;
newEntry.name_len = strlen(Name);
newEntry.rec_len = ((newEntry.name_len+3)&~3) + EXT2_DIRENT_SIZE;
- newEntry.type = inode
.
i_mode >> 12;
+ newEntry.type = inode
->
i_mode >> 12;
memcpy(newEntry.name, Name, newEntry.name_len);
// Read directory's inode
memcpy(newEntry.name, Name, newEntry.name_len);
// Read directory's inode
- Ext2_int_ReadInode(disk, Node->Inode, &inode);
- size = inode.i_size;
+ size = inode->i_size;
// Get a lock on the inode
//Ext2_int_LockInode(disk, Node->Inode);
// Get a lock on the inode
//Ext2_int_LockInode(disk, Node->Inode);
@@
-269,7
+263,7
@@
int Ext2_Link(tVFS_Node *Node, const char *Name, tVFS_Node *Child)
// Get First Block
// - Do this ourselves as it is a simple operation
// Get First Block
// - Do this ourselves as it is a simple operation
- base = inode
.
i_block[0] * disk->BlockSize;
+ base = inode
->
i_block[0] * disk->BlockSize;
VFS_ReadAt( disk->FD, base, disk->BlockSize, blockData );
block = 0;
nEntries = 0;
VFS_ReadAt( disk->FD, base, disk->BlockSize, blockData );
block = 0;
nEntries = 0;
@@
-330,7
+324,7
@@
int Ext2_Link(tVFS_Node *Node, const char *Name, tVFS_Node *Child)
// BLOCK_DIR_OFS(Node->Data, block) = nEntries;
block ++;
ofs = 0;
// BLOCK_DIR_OFS(Node->Data, block) = nEntries;
block ++;
ofs = 0;
- base = Ext2_int_GetBlockAddr(disk, inode
.
i_block, block);
+ base = Ext2_int_GetBlockAddr(disk, inode
->
i_block, block);
VFS_ReadAt( disk->FD, base, disk->BlockSize, blockData );
}
}
VFS_ReadAt( disk->FD, base, disk->BlockSize, blockData );
}
}
@@
-349,7
+343,7
@@
int Ext2_Link(tVFS_Node *Node, const char *Name, tVFS_Node *Child)
if( bestMatch >= 0 )
{
// Read-Modify-Write
if( bestMatch >= 0 )
{
// Read-Modify-Write
- base = Ext2_int_GetBlockAddr(disk, inode
.
i_block, bestBlock);
+ base = Ext2_int_GetBlockAddr(disk, inode
->
i_block, bestBlock);
VFS_ReadAt( disk->FD, base, disk->BlockSize, blockData );
dirent = blockData + bestOfs;
// Shorten a pre-existing entry
VFS_ReadAt( disk->FD, base, disk->BlockSize, blockData );
dirent = blockData + bestOfs;
// Shorten a pre-existing entry
@@
-377,7
+371,7
@@
int Ext2_Link(tVFS_Node *Node, const char *Name, tVFS_Node *Child)
else {
// Allocate block, Write
Uint32 newblock = Ext2_int_AllocateBlock(disk, base / disk->BlockSize);
else {
// Allocate block, Write
Uint32 newblock = Ext2_int_AllocateBlock(disk, base / disk->BlockSize);
- Ext2_int_AppendBlock(
disk, &
inode, newblock);
+ Ext2_int_AppendBlock(
Node,
inode, newblock);
base = newblock * disk->BlockSize;
Node->Size += newEntry.rec_len;
Node->Flags |= VFS_FFLAG_DIRTY;
base = newblock * disk->BlockSize;
Node->Size += newEntry.rec_len;
Node->Flags |= VFS_FFLAG_DIRTY;
UCC
git Repository :: git.ucc.asn.au