Import backup from 2005-01-14

This commit is contained in:
Josh Holtrop 2005-01-14 22:00:00 -05:00
parent 05183a3949
commit ba5906c7a3
6 changed files with 104 additions and 25 deletions

View File

@ -71,3 +71,7 @@ initrd:
umount $(INITRD_MOUNT)
rm -rf $(INITRD_MOUNT)
wordcount:
find . -regex '\(.*\.[ch]\)\|\(.*\.asm\)\|\(.*\.inc\)\|\(.*\.cpp\)' | xargs cat | wc -l

View File

@ -63,29 +63,35 @@ int ext2_stat(vfs_mount_t *mount, char *file, vfs_stat_t *stat)
u32_t inode_number = ext2_get_inode_number(mount, file);
if (!inode_number)
return -1;
ext2_inode_t inode = ext2_get_inode(mount, inode_number);
ext2_inode_t *inode = New(ext2_inode_t);
if ( ext2_read_inode(mount, inode_number, inode) )
{
kfree(inode);
return -2;
}
stat->dev = 0;
switch(inode.i_mode & EXT2_I_MODE_TYPE_MASK)
switch(inode->i_mode & EXT2_I_MODE_TYPE_MASK)
{
case EXT2_I_MODE_FIFO: stat->type = VFS_FT_FIFO; break;
case EXT2_I_MODE_CHAR: stat->type = VFS_FT_CHAR; stat->dev = inode.i_block[0]; break;
case EXT2_I_MODE_CHAR: stat->type = VFS_FT_CHAR; stat->dev = inode->i_block[0]; break;
case EXT2_I_MODE_DIR: stat->type = VFS_FT_DIR; break;
case EXT2_I_MODE_BLOCK: stat->type = VFS_FT_BLOCK; stat->dev = inode.i_block[0]; break;
case EXT2_I_MODE_BLOCK: stat->type = VFS_FT_BLOCK; stat->dev = inode->i_block[0]; break;
case EXT2_I_MODE_FILE: stat->type = VFS_FT_FILE; break;
case EXT2_I_MODE_SYM: stat->type = VFS_FT_SYMLINK; break;
case EXT2_I_MODE_SOCK: stat->type = VFS_FT_SOCK; break;
default: stat->type = VFS_FT_UNKNOWN; break;
}
stat->size = inode.i_size;
stat->size = inode->i_size;
stat->inode = inode_number;
stat->permissions = inode.i_mode & EXT2_I_MODE_ATTR_MASK;
stat->uid = inode.i_uid;
stat->gid = inode.i_gid;
stat->atime = inode.i_atime;
stat->mtime = inode.i_mtime;
stat->ctime = inode.i_ctime;
stat->links = inode.i_links_count;
stat->permissions = inode->i_mode & EXT2_I_MODE_ATTR_MASK;
stat->uid = inode->i_uid;
stat->gid = inode->i_gid;
stat->atime = inode->i_atime;
stat->mtime = inode->i_mtime;
stat->ctime = inode->i_ctime;
stat->links = inode->i_links_count;
kfree(inode);
return 0;
}
@ -195,11 +201,12 @@ int ext2_close_dir(vfs_mount_t *mount, ext2_open_dir_t *open_dir)
// open an inode for reading
ext2_open_inode_t *ext2_open_inode(vfs_mount_t *mount, u32_t inode_number)
{
if (ext2_inode_status(mount, inode_number) != 1)
return NULL;
ext2_inode_t inode = ext2_get_inode(mount, inode_number);
ext2_open_inode_t *open_inode = New(ext2_open_inode_t);
open_inode->inode = inode;
if ( ext2_read_inode(mount, inode_number, &(open_inode->inode)) )
{
kfree(open_inode);
return NULL;
}
open_inode->block = 0;
open_inode->block_pointers = NULL;
open_inode->block_pointers_start = 0;
@ -342,8 +349,10 @@ u32_t ext2_block_number(vfs_mount_t *mount, ext2_open_inode_t *open_inode)
// read the inode structure from the device and return it
ext2_inode_t ext2_get_inode(vfs_mount_t *mount, u32_t inode)
int ext2_read_inode(vfs_mount_t *mount, u32_t inode, ext2_inode_t *dat)
{
if (ext2_inode_status(mount, inode) != 1)
return -1; // free or invalid inode number
ext2_super_block_t *super = mount->super;
inode--; // turn inode into a 0-based index
u32_t group = inode / super->s_inodes_per_group;
@ -352,9 +361,9 @@ ext2_inode_t ext2_get_inode(vfs_mount_t *mount, u32_t inode)
(10 + super->s_log_block_size)) + (index << 7);
void *block = kmalloc(512);
block_read(mount->major, mount->minor, inodeAddr >> 9, 1, block);
ext2_inode_t in = *(ext2_inode_t *)(block + (inodeAddr & 0x1FF));
memcpy(dat, (block + (inodeAddr & 0x1FF)), sizeof(ext2_inode_t));
kfree(block);
return in;
return 0;
}
// read the group descriptor structure from the device and return it
@ -370,6 +379,18 @@ ext2_group_desc_t ext2_get_group_desc(vfs_mount_t *mount, u32_t group)
}
// TODO: finish allocating an inode
u32_t ext2_alloc_inode(vfs_mount_t *mount)
{
ext2_super_block_t *super = mount->super;
if (!super->s_free_inodes_count)
return 0; // no free inodes
}
/***************** VFS INTERFACE FUNCTIONS *******************/
// VFS interface function to open a directory
int ext2__open_dir(vfs_mount_t *mount, char *file, vfs_open_file_t *dir)
{
@ -402,16 +423,19 @@ int ext2__close_dir(vfs_mount_t *mount, vfs_open_file_t *dir)
}
// VFS interface function to open a file for reading a byte at a time
int ext2__open_file(vfs_mount_t *mount, char *file, vfs_open_file_t *open_file)
{
return 0;
}
// VFS interface function to read a byte from an open file
int ext2__read_file(vfs_mount_t *mount, vfs_open_file_t *open_file)
{
return 0;
}
// VFS interface function to close a byte-file
int ext2__close_file(vfs_mount_t *mount, vfs_open_file_t *open_file)
{
return 0;

View File

@ -184,7 +184,7 @@ static inline u32_t ext2_FSToDiskBlock(u32_t block, ext2_super_block_t *super)
int ext2_init(int fsID);
void *ext2_mount_super(major_t major, minor_t minor);
int ext2_umount_super(vfs_mount_t *mount);
ext2_inode_t ext2_get_inode(vfs_mount_t *mount, u32_t inode);
int ext2_read_inode(vfs_mount_t *mount, u32_t inode, ext2_inode_t *dat);
ext2_group_desc_t ext2_get_group_desc(vfs_mount_t *mount, u32_t group);
int ext2_stat(vfs_mount_t *mount, char *file, vfs_stat_t *stat);
ext2_open_inode_t *ext2_open_inode(vfs_mount_t *mount, u32_t inode_number);
@ -195,6 +195,8 @@ u32_t ext2_get_inode_number(vfs_mount_t *mount, char *file);
int ext2_inode_seek(vfs_mount_t *mount, ext2_open_inode_t *open_inode, u32_t block_number);
int ext2_inode_status(vfs_mount_t *mount, u32_t inode_number);
int ext2_block_status(vfs_mount_t *mount, u32_t block_number);
u32_t ext2_alloc_inode(vfs_mount_t *mount);
ext2_open_dir_t *ext2_open_dir(vfs_mount_t *mount, u32_t inode_number);
int ext2_dir_read_entry(vfs_mount_t *mount, ext2_open_dir_t *open_dir, ext2_dir_entry_t *dentry);

18
make.grc Normal file
View File

@ -0,0 +1,18 @@
regexp=.*In.function.*
colours=green
-
regexp=.*warning\:.*
colours=yellow
-
regexp=In.file.included.*
colours=green
-
regexp=\s*from.*\:\s*
colours=green
-
regexp=.*error\:.*
colours=red
-
regexp=.*\*\*\*.*
colours=red

View File

@ -34,11 +34,7 @@ start_refreshed:
call con_clear
mov ax, 0x4F00
mov di, vbe_info_block
int 0x10
cmp ax, 0x004F
jz vesa_present
; ccall vesa_get_info, es, vbe_info_block
jmp no_vesa
vesa_present:
@ -165,3 +161,5 @@ OemVendorName: dd 0
OemProductName: dd 0
OemProductRev: dd 0
Reserved: times 478 db 0

33
rmmod/vesa.inc Normal file
View File

@ -0,0 +1,33 @@
; vesa.inc
; Author: Josh Holtrop
; Date: 01/04/05
; Modified: 01/04/05
; real mode vesa functions
vesa_get_info: ;vesa_get_info(word seg, word offset)
push bp
mov bp, sp
pusha
mov ax, [bp + 4]
mov es, ax
mov di, [bp + 6]
mov ax, 0x4F00
int 0x10
cmp ax, 0x004F
jz vesa_got_info
mov [vesa_return], word 1
jmp vesa_get_info_done
vesa_got_info:
mov [vesa_return], word 0
vesa_got_info_done:
popa
pop bp
mov ax, [vesa_return]
ret
vesa_return: dw 0